我有一堆我想要複製到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