从Netezza的ROWID上的JOIN转换为RedShift

问题描述 投票:0回答:1

我正在将为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?

sql sql-update netezza
1个回答
0
投票

好吧,大多数时候我看到在rowid上加入它是由于性能优化,但在某些情况下,表中没有唯一的列组合。请与拥有这些数据的人交谈并运行您自己对不同组合键的分析,然后再回复我们。

© www.soinside.com 2019 - 2024. All rights reserved.