【发布时间】:2023-03-17 16:38:01
【问题描述】:
我有一堆 s3 文件想要复制到 Redshift(使用 AWS Data Pipelines 和 RedshiftCopyActivity)。挑战在于我的 s3 文件比目标 Redshift 表少一列。 表本身有“id”列 - 一个 IDENTITY 列,其值在插入期间自动生成。
我知道我应该/可以使用 RedshiftCopyActivity 的 transformSql 属性,但我未能构建有用的查询。执行总是给我一个错误:
Exception ERROR: cannot set an identity column to a value
更多细节: 标识列是表的第一列。
数据已成功插入到名为 staging 的表中,应该是这样。另外,我看到我的 transformSQL 已运行,并且数据被插入到名为 staging2 的表中。日志显示:
create temporary table staging2 as select myField1, myField2, ..., myFieldN from staging
但在那之后:
INSERT INTO target_table SELECT * FROM staging2
导致错误发生。
那么,我该如何解决这个问题并让 Redshift 忽略我提供的列少的事实? 也许解决方案可以将“id”列作为最后一个,我仍然没有尝试这个。老实说,我不喜欢这听起来 - 像非常脆弱的方法。
【问题讨论】:
标签: amazon-web-services amazon-s3 copy amazon-redshift amazon-data-pipeline