【问题标题】:Redshift COPY Invalid digit, Value '"', Pos 0, Type: LongRedshift COPY 无效数字,值 '"',位置 0,类型:Long
【发布时间】:2020-04-30 23:17:00
【问题描述】:

我使用 spark 创建了一个 CSV 文件,如下所示:

t1.write.option("sep","\001").mode("overwrite").format("csv").save("s3://test123/testcsv001/")

然后尝试在 Redshift 中使用 COPY 命令来加载 CSV 文件:

复制 schema123.table123 来自's3://test123/testcsv001/' access_key_id '删除' secret_access_key '删除' session_token '删除' TIMEFORMAT 'auto' DATEFORMAT 'auto' DELIMITER '\001' IGNOREHEADER AS 0 TRUNCATECOLUMNS NULL as 'NULL' TRIMBLANKS ACCEPTANYDATE EMPTYASNULL BLANKSASNULL ESCAPE COMPUPDATE OFF STATUPDATE ON ;

该命令在第一列具有空值的记录上失败。 spark 中的第一列具有 LONG 的列定义。 目标列是没有 NOT NULL 约束的 BIGINT。 我在 spark 中将列转换为 INT 并将其写入 csv,但由于相同的原因它仍然失败。

根据 redshift 文档将 NULL 加载到 BIGINT 中应该可以正常工作。

对此有何见解?

【问题讨论】:

  • 请提供一个样本行?
  • 你用的是什么 Spark 版本??

标签: apache-spark pyspark amazon-redshift


【解决方案1】:

您将 NULL 设置为“NULL”。这意味着当您的源文件中有字符串“NULL”时,这意味着该值为 NULL。因此,当您的输入文件将“”作为 bigint 的输入时,Redshift 应该做什么?你说当值为NULL时你会给它“NULL”。

我希望您想要 NULL AS '',并且您还应该将文件类型设置为 CSV,以便应用标准 CSV 规则。

【讨论】:

  • 实际上我在网上搜索过,有人建议将选项 NULL 用作“NULL”,这就是我放这个的原因。除此之外,问题仍然存在。
猜你喜欢
  • 2021-07-01
  • 2022-01-24
  • 1970-01-01
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多