Redshift
Redshift - 將數據插入臨時表,條件為列 doc_id 應該是唯一的,而不是 null
我正在嘗試在 Redshift 中創建一個臨時表並將數據插入其中。我的目標是為唯一的doc_id WHERE doc_id IS NOT NULL創建一條記錄。
這是我的程式碼:
-- Creating temp table to load only rows with unique and not null doc_id DROP TABLE IF EXISTS TMP_table CASCADE; CREATE TEMP TABLE IF NOT EXISTS TMP_table ( uuid varchar, id integer, doc_id integer, revenue double, doc_date varchar, ); -- insert into the temp table and add the distinct and not null filter on the doc_id INSERT INTO TMP_table ( uuid, id, doc_id, revenue, doc_date ) SELECT uuid, id, select DISTINCT (table_x.doc_id) from table_x where table_x.doc_id IS NOT NULL, revenue, doc_date FROM schema.table_x;
執行上面的程式碼後,我得到一個語法錯誤幾乎不同。而且我似乎無法弄清楚錯誤是什麼。
請問有什麼指導嗎?
如果有重複的 doc_ids 我只想選擇一個並插入它(它也不應該為空,因此我的 where 語句)。
您可以使用視窗/排名功能 - 例如。
ROW_NUMBER()
- 簡化查詢。注意:我沒有檢查這些在 Redshift 中是否可用。
INSERT INTO TMP_table ( uuid, id, doc_id, revenue, doc_date ) SELECT uuid, id, doc_id, revenue, doc_date FROM ( SELECT uuid, id, doc_id, revenue, doc_date, ROW_NUMBER() OVER -- assign row numbers ( PARTITION BY doc_id -- per doc_id -- without any specific order ) AS rn FROM schema.table_x WHERE doc_id IS NOT NULL ) AS x WHERE rn = 1 -- pick the first one per doc_id if there are 2+ ;