【问题标题】:Invalid null byte - field longer than 1 byte无效的空字节 - 字段长于 1 个字节
【发布时间】:2021-11-24 19:52:00
【问题描述】:

我正在从存储在 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

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-redshift


    【解决方案1】:

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

    Ascii 零被定义为空终止符(也称为 NUL,但这与 NULL 不同),并且该字符在数据流中具有特殊含义。它是一个控制字符,因此与您的字符串无关。

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

    如果您尝试表示 NULL,则可以在 json 中使用 null - "column":null

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

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2018-12-26
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 2013-03-10
      相关资源
      最近更新 更多