gpt4 book ai didi

sql-server - Sqoop & Hadoop - 如何在 lastmodified 模式下加入/合并 Sqoop 导入的旧数据和新数据?

转载 作者:可可西里 更新时间:2023-11-01 14:52:33 27 4
gpt4 key购买 nike

背景:

我在 SQL 服务器上有一个具有以下架构的表。可以更新现有行,新行也会添加到该表中。

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 模式下添加增量更新。我的 --check-column 参数是 last_login_date 列。在我的第一次运行 中,我将以上两条记录输入到 Hadoop 中 - 我们称其为当前数据。我注意到最后一个值(第一次导入的检查列的最大值)是 2016-06-18 19:07:00.0。

假设SQL服务器端有变化,我现在在SQL服务器端有如下变化:

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

我用最近的 last_login_date 值更新了第 123-111 行,计数列也已更新。我还添加了一个新行 125-500。

在我的第二次 运行中,sqoop 查看所有 last_login_date 列大于我从上次导入中已知的最后一个值的列 - 2016-06-18 19:07:00.0

这只给我更改的数据,即 123-111 和 125-500 记录。我们称之为 - 新数据。

问题

如何使用当前数据和新数据在 Hadoop/Hive 中进行合并连接,以便最终得到更新版本的 123-111、124-100 和新添加的 125-500?

最佳答案

使用 scoop 更改数据加载是一个两阶段过程。

  1. 第 1 阶段 - 使用sqoop 导入实用程序。
  2. 第二阶段 - 使用 sqoop-merge 将更改的数据与旧数据合并效用。

如果表很小(比如几 M 条记录),则使用 sqoop 导入进行全加载。

有时可能只加载最新的分区 - 在这种情况下使用 sqoop import 实用程序使用自定义查询加载分区,然后简单地将覆盖加载的分区插入目标表或复制文件而不是合并 - 这将比 sqoop merge 工作得更快.

关于sql-server - Sqoop & Hadoop - 如何在 lastmodified 模式下加入/合并 Sqoop 导入的旧数据和新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38109475/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com