我有一堆我想要复制到Redshift(使用AWS Data Pipelines和RedshiftCopyActivity)的s3文件。挑战在于我的s3文件只有一列,而不是目标Redshift表。 表本身具有“id”列 - 一个IDENTITY列,其值在插入期间自动生成。将s3文件复制到带有IDENTITY列的Redshift表中没有EXPLICIT_IDS
我知道我应该/可以使用RedSiftCopyActivity的transformSql属性,但我在构造有用的查询时失败。执行总是返回我一个错误:
Exception ERROR: cannot set an identity column to a value
更多的细节: 标识列是表的第一列。
数据已成功插入到表中,它应该是。另外,我看到我的transformSQL已经运行并且数据被插入表staging2。日志显示:
create temporary table staging2 as select myField1, myField2, ..., myFieldN from staging
但之后谈到:
INSERT INTO target_table SELECT * FROM staging2
这将导致发生错误。
那么,我该如何解决这个问题,并使Redshift忽略了我提供一列少的事实? 可能的解决办法可能是将“id”列作为最后一个列,但我仍然没有尝试这个。说实话,我不喜欢它的声音 - 就像非常脆弱的做法。
感谢您的答案,但我不得不问,这如何帮助数据管道和transformSql?我不明白这一点。 – ezamur