sql - 从 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?
解决方案
好吧,大多数时候我看到 rowid 上的连接是由于性能优化,但在某些情况下,表中没有唯一的列组合。请与拥有这些数据的人交谈并对不同的组合键进行您自己的分析,然后再与我们联系。
推荐阅读
- excel - Set ForeColor 不会在 Exit 事件中执行
- python - 在Python中通过多个条件提取数据框
- backup - 无效的目标板 - jetson-tx2-devkit
- kubernetes - 如何在复制的有状态中初始化 MySQL 数据
- mysql - 从 S3 上导出的快照创建 RDS 实例
- android - 如何使用毕加索将 imageView 的内容保存到内部存储
- postgresql - 如何在 Postgres 中使用创建索引来优化搜索
- c - 如何用 C 中的以下 3 位替换括号中的 3 位?
- laravel - laravel 中的 save() 方法仅将最后一条记录保存在 json 中
- ruby - 成功点击后更改页面:stale element reference: element is not attach to the page document