我正在将为Netezza编写的ETL查询转换为RedShift。我在使用ROWID时遇到了一些问题,因为它在RedShift中不受支持。我已经尝试使用谓词中的键列,根据生成的ROWID来实际执行变通方法。但是我很困惑,如果有多个连接操作,将使用哪些列。那么有谁可以帮我转换查询。我甚至尝试使用ROW_NUMBER()over()函数,但它也不起作用,因为行ID对于所有行都不是唯一的。
以下是来自netezza的查询:
查询#1
CREATE TEMP TABLE TMPRY_DELTA_UPD_1000 AS
SELECT
nvl(PT.HOST_CRRNCY_SRRGT_KEY,-1) as HOST_CRRNCY_SRRGT_KEY,
delta1.ROWID ROW_ID
FROM TMPRY_POS_TX_1000 PT
LEFT JOIN TMPRY_TX_CSTMR_1000 TC ON PT.TX_SRRGT_KEY = TC.TX_SRRGT_KEY AND PT.UPDT_TMSTMP > '2017-01-01'
AND PT.INS_TMSTMP < '2017-01-01' AND PT.DVSN_NBR = 70
JOIN INS_EDW_CP.DM_TX_LINE_FCT delta1 ON PT.TX_SRRGT_KEY = delta1.TX_SRRGT_KEY
WHERE
(
delta1.HOST_CRRNCY_SRRGT_KEY <> PT.HOST_CRRNCY_SRRGT_KEY OR
)
AND PT.DVSN_NBR = 70;
查询#2
UPDATE INS_EDW_CP..DM_TX_LINE_FCT base
SET
base.HOST_CRRNCY_SRRGT_KEY = delta1.HOST_CRRNCY_SRRGT_KEY,
)
FROM TMPRY_DELTA_UPD_1000 delta1
WHERE base.ROWID = delta1.ROW_ID;
如何转换查询#2?
好吧,大多数时候我看到在rowid上加入它是由于性能优化,但在某些情况下,表中没有唯一的列组合。请与拥有这些数据的人交谈并运行您自己对不同组合键的分析,然后再回复我们。