Base_table(第 1 天从源加载)
**Id Name City Country**
7682 Stuart Frankfurt Germany
8723 Micke Paris France
2355 Niki New york USA
2097 Deny Italy Rome
new_table(第 2 天从源加载)
**Id Name City Country**
7682 Stuart *Darmstadt* Germany
8723 Micke Paris France
2355 Niki New york USA
*9057 Bony Prague Prague*
比较以上 2 个表格时,可以看到以下 3 个变化。
- 记录 ID 7682 的城市名称在第 2 天加载时更改为达姆施塔特
- 记录 ID 2097 在第 02 天加载中被删除,它在第 01 天加载中存在
- 在第 02 天加载时插入了 ID 为 9057 的新记录
以上 3 个变化都需要被捕获并附加到 Base_table 中
以下 3 条记录应被捕获以进行比较
7682 Stuart Darmstadt Germany
2097 Deny Italy Rome
9057 Bony Prague Prague
附加第 02 天更改后的 Base_table 输出
**Id Name City Country**
7682 Stuart Frankfurt Germany
8723 Micke Paris France
2355 Niki New york USA
2097 Deny Italy Rome
*7682 Stuart Darmstadt Germany*
*2097 Deny Italy Rome*
*9057 Bony Prague Prague*
我能够使用 SQL 连接获取插入和删除的记录,但无法获取更新的记录。为了获取更新的记录,我使用本地将文件复制到 linux 并进行比较,但它不适用于大量数据。任何人都可以分享您处理此类情况的经验吗?
select inline
(
array
(
case
when n.id is null then struct(b.*)
else struct (n.*)
end
)
)
from base_table as b
full join new_table as n
on n.id = b.id
where b.id is null
or n.id is null
or struct(b.*) not in (struct(n.*))
+------+--------+-----------+---------+
| col1 | col2 | col3 | col4 |
+------+--------+-----------+---------+
| 2097 | Deny | Italy | Rome |
| 7682 | Stuart | Darmstadt | Germany |
| 9057 | Bony | Prague | Prague |
+------+--------+-----------+---------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句