代码之家  ›  专栏  ›  技术社区  ›  The Beast

无效的空字节-字段长度超过1字节

  •  0
  • The Beast  · 技术社区  · 4 年前

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

    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 AS“\0”。这不起作用。这给出的错误是 Invalid operation: NULL argument is not supported for JSON based COPY

    0 回复  |  直到 4 年前
        1
  •  0
  •   Bill Weiner    4 年前

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

    Ascii zero被定义为null终止符(也称为NUL,但这与null不同),该字符在数据流中具有特殊意义。这是一个控制角色,因此不需要在你的字符串中。

    如果您试图在字符串中表示二进制数据,则应首先对数据进行base64编码。

    如果您试图表示NULL,则在json-“列”中使用NULL来完成:NULL

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

    推荐文章