sqoop&hadoop-如何连接/合并sqoop在lastmodified模式下导入的旧数据和新数据?

6vl6ewon  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(332)

背景:
我在sql server上有一个具有以下模式的表。可以更新现有行,并且新行也会添加到此表中。

unique_id | user_id | last_login_date       | count
123-111   |   111   | 2016-06-18 19:07:00.0 | 180
124-100   |   100   | 2016-06-02 10:27:00.0 | 50

我使用sqoop在lastmodified模式下添加增量更新。my--check column参数是最后一个登录日期列。在我的第一次运行中,我将上述两条记录放入hadoop中—我们称之为当前数据。我注意到最后一个值(第一次导入的check列的最大值)是2016-06-18 19:07:00.0。
假设sql server端有更改,我现在在sql server端有以下更改:

unique_id | user_id | last_login_date       | count
123-111   |   111   | 2016-06-25 20:10:00.0 | 200
124-100   |   100   | 2016-06-02 10:27:00.0 | 50
125-500   |   500   | 2016-06-28 19:54:00.0 | 1

我已经用最近的上次登录日期值更新了第123-111行,计数列也已经更新。我还新增了一行125-500。
在我的第二次运行中,sqoop将查看最后一个登录日期列大于上一次导入的已知最后一个值(2016-06-18 19:07:00.0)的所有列
这只提供更改的数据,即123-111和125-500记录。我们称之为新数据。
问题
如何在hadoop/hive中使用当前数据和新数据进行合并联接,从而得到123-111、124-100和新添加的125-500的更新版本?

kiayqfof

kiayqfof1#

您可以更改现有的sqoop查询(通过指定新的自定义查询)以从源表获取所有数据,而不是仅获取更改的数据。请参阅使用sqoop将数据移动到配置单元中。这将是实现这一点的最简单方法—即执行完整的数据刷新,而不是应用增量。

dnph8jn4

dnph8jn42#

使用scoop改变数据负载是一个两阶段的过程。
第一阶段-使用sqoop导入实用程序将更改的数据加载到某个temp(stage)表中。
第二阶段-使用sqoop合并实用程序将更改的数据与旧数据合并。
如果表很小(比如说几个m记录),那么使用sqoop导入使用满负载。
有时可能只加载最新的分区—在这种情况下,使用sqoop import实用程序使用自定义查询加载分区,然后不进行合并—只需将覆盖加载的分区插入目标表或复制文件—这将比sqoop merge工作得更快。

相关问题