比较 2 个 hive 表以查找没有任何唯一列/时间戳的更新/插入/删除记录并将其附加到 Hadoop 中的基表

库马尔

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 个变化。

  1. 记录 ID 7682 的城市名称在第 2 天加载时更改为达姆施塔特
  2. 记录 ID 2097 在第 02 天加载中被删除,它在第 01 天加载中存在
  3. 在第 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档