我正在从存储在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
更多关于你正在做的事情的信息将有助于提出解决方案。