首页 > 解决方案 > 从 Netezza 中的 ROWID 上的 JOIN 转换为 RedShift

问题描述

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

标签: sqlsql-updatenetezza

解决方案


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


推荐阅读