【发布时间】:2021-01-11 13:55:49
【问题描述】:
我在处理源表中的重复项时遇到问题。这似乎是源问题,我想在加载到目标时处理它们,因为我没有签入源系统的选项。
示例源表数据 - TAB_SOURCE
ID CD CT NOI QTY VER PID DESC
1 19700101 200050 10 1 1.0 123
1 19700101 200050 10 Got Error
2 20210101 190050 09 2 1.0 345
2 20210101 190050 09 Success
5 20211001 150151 02 1 1.0 987 Success
必需的目标表条目 - TAB_TARGET
ID CD CT NOI QTY VER PID DESC
1 19700101 200050 10 1 1.0 123 Got Error
2 20210101 190050 09 2 1.0 345 Success
5 20211001 150151 02 1 1.0 987 Success
我正在使用下面的合并语句将数据从源加载到目标。考虑源数据已加载到目标表所在的同一数据库中的登陆架构中。
Merge into target.TAB_TARGET as tgt using
( select * from landing.TAB_SOURCE) src
on tgt.ID = src.ID and tgt.CD = src.CD and tgt.CT = src.CT and tgt.NOI = trim(src.NOI)
when matched then update set
tgt.ID = trim(src.ID),
tgt.CD = trim(src.CD),
tgt.CT = trim(src.CT),
tgt.NOI = trim(src.NOI),
tgt.QTY = trim(src.QTY),
tgt.VER = trim(src.VER),
tgt.PID = trim(src.PID),
tgt.DESC = trim(src.DESC)
when not matched then insert
(ID,CD,CT,NOI,QTY,VER,PID,DESC)
values
(trim(ID),trim(CD),trim(CT),trim(NOI),trim(QTY),trim(VER),trim(PID),trim(DESC));
这里的问题是 DESC 列值作为单独的条目出现,其中 NOI(Merge 上的键之一)列具有前面的空格和少数记录的值,我希望通过填充 DESC 将它们视为单个记录与目标表条目中显示的其他列。
有人可以帮助我按照目标中显示的示例将源数据加载到目标中。
【问题讨论】:
-
嗨 - 你只需要重写你的 SELECT 语句,让它返回你想要的数据
-
嗨@NickW 你能分享几个相同的样本吗?我不知道如何获得所需的结果......
标签: sql snowflake-cloud-data-platform