hive 外部表增量加载

Posted

技术标签:

【中文标题】hive 外部表增量加载【英文标题】:hive external table incremental load 【发布时间】:2016-08-23 16:58:23 【问题描述】:

请在下面查看我的流程和问题: step1 - 我想以增量方式加载一个 mysql 表数据。所以首先我使用 SQOOP 导入增量数据 '增量附加检查列最后一个值' 假设这存储到 HDFS 文件夹 '/sqoopdir1' 第 2 步 - 我想使用 pig 脚本进行一些数据验证,例如重复检查,结果应该转到 '/user/root/pigdir' 第 3 步 - 我想创建一个指向 pig 输出目录的配置单元外部表 'extsample' 为“存储为文本文件位置 '/user/root/pigdir'

我的问题是 (1)SQOOP 将在 HDFS 的文件夹 /sqoopdir1 中创建 part-m-00001、part-m-00002 等。但是对于每个增量进程,我只需要 PIG 进程的最新文件来自动选择。 (2) 另一个问题是,PIG 在 /user/root/pigdir 中创建了 part-r-00000 文件。第二次作业失败,说文件已经存在,所以我必须重命名文件才能运行 PIG 作业。

简而言之,我想在最终的配置单元表中插入/更新记录。作为初学者,请您帮助解决上述问题或建议更好的方法。谢谢!

【问题讨论】:

【参考方案1】:

1)根据我的理解,您正在尝试将每个增量数据放入同一个文件夹中?但这不可能是真的,sqoop 也会抛出一个已经存在的异常文件夹。 Part-m-00 文件是 sqoop 的输出,所以如果您考虑一下,所有这些“part”文件都是您由单个 sqoop 摄取生成的增量数据。

我们需要在代码中处理这个问题,例如对于每个 sqoop 增量摄取,我们需要提供一个动态输出位置(将时间戳附加到文件夹名称)... Pig 也是如此。如果你使用 shell 脚本调用 sqoop 和 pig 传递一个动态位置是非常容易的。

【讨论】:

嗨,因为它是 SQOOP 增量 APPEND,它允许我在同一个文件夹中有多个文件,如 part-m-00001、part-m-00002 等 那么您可能需要一个临时文件夹来保存一个特定的增量数据并尝试将其传递给 Pig 脚本。或者使用基于时间戳的逻辑来获取最新的增量文件并将其提供给 Pig 脚本。 .. 感谢您的回复。您是否同意在两者之间使用 pig 脚本是一种有效的方法?如果是这样,您能否给我一些使用 pig 的有效数据验证示例(如重复删除)?临时表也应该是仅容纳特定日期增量数据的外部表吗?我们是否需要对临时表数据执行任何操作或仅用于容纳增量数据?

以上是关于hive 外部表增量加载的主要内容,如果未能解决你的问题,请参考以下文章

Hive内部表和外部表的区别

hive 四种表,分区表,内部,外部表,桶表

增量更新 Hive 表数据

将数据加载到 Hive/Impala

Hive 外部表在 EMR 上返回不一致的结果

2018-11-13#Hive外表创建和加载数据