无效的空字节-字段长度大于1字节



我正在从存储在S3中的红移清单文件复制数据。我的复制命令看起来像

COPY <table name> FROM 's3://...' CREDENTIALS '<credentials>' FORMAT AS JSON 'auto' GZIP TRUNCATECOLUMNS ACCEPTINVCHARS EMPTYASNULL TIMEFORMAT AS 'auto' REGION '<region>' manifest;

我面临这个问题的表中的列类型是varchar(255)。s3文件中该列的值看起来像

"<column>":"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000..."

错误:Invalid null byte - field longer than 1 byte

我也尝试过使用NULL作为''。但这行不通。这给出的错误是Invalid operation: NULL argument is not supported for JSON based COPY

目前还不清楚为什么要在字符串中存储一堆ascii零字符,因此有关这是什么的更多信息将获得更有用的解决方案。最基本的答案是"不要这样做"。

Ascii 0被定义为空结束符(又名NUL,但这不是null),这个字符在数据流中有特殊的意义。它是一个控制字符,因此不应该出现在你的字符串中。

如果你想在字符串中表示二进制数据,你应该先对数据进行base64编码。

如果你想表示NULL,可以在json - "column": NULL

更多关于你正在做的事情的信息将有助于提出解决方案。

最新更新