使用sqoop从rdbms增量导入数据到hive/hadoop

bvhaajcl  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(389)

我有一个oracle数据库,需要将数据导入配置单元表。每天导入的数据大小大约为1GB。更好的方法是什么?
如果我将每天的数据作为分区导入,那么如何处理更新的值?
例如,如果我将今天的数据作为分区导入,第二天就会有一些字段用新值更新。
使用 --lastmodified 我们可以得到这些值,但是我们需要将更新后的值发送到新分区还是发送到旧的(已经存在的)分区?
如果我发送到新分区,那么数据是重复的。如果我想发送到已经存在的分区,我们如何才能实现呢?

rdrgkggo

rdrgkggo1#

您唯一的选择是使用“insert overwrite table…”覆盖整个现有分区。
问题是-你要多久才能不断更新数据?
我想你可以考虑三种方法:
决定“新鲜”数据的阈值。例如“向后14天”或“向后1个月”。
然后,每天运行作业时,都会向后覆盖分区(仅覆盖具有更新值的分区),直到确定阈值为止。
每天大约1 gb的容量应该是可行的。
在您决定时间之前的所有数据不保证100%正确。
如果您知道字段只能在初始设置后的某个时间窗口内更改,则此场景可能是相关的。
使您的配置单元表与acid事务兼容,从而允许对表进行更新。
将每日作业分为两个任务:为运行日写入的新数据。需要向后运行的更新数据。sqoop将负责新的数据。“手动”处理更新的数据(一些生成update语句的脚本)
不要使用基于时间的分区。动态分区可能更适合您的用例,这取决于所处理数据的性质。

相关问题