我有一个需求,其中我需要将一个表从mysql增量导入hive,并且在这样做时遇到了问题。这就是我迄今为止所尝试的:
我已经创建了一个作业来导入带有下面提到的查询的表。
/sqoop作业
--create test2 -- import
--connect jdbc:mysql://URL
--username username
--password password
--table mysqlTablename
--hive-import
--hive-overwrite
--direct
--incremental lastmodified
--check-column last_modified_time
--last-value 0
第一次执行:按预期导入所有内容,最小边界为“0”,最大边界为当前时间。第二次执行:从上一次运行的所有更改都会被提取,但是旧的行会被覆盖,只剩下从上一次运行更改的行。
我删除了--hive overwrite和--hive import选项,并使用了“-target dir”选项。第一次执行:按预期获取所有内容,最小边界为“0”,最大边界为当前时间,但不会显示在配置单元中,因为元存储未更新。第二次执行:它抛出一个错误,指出作为参数提到的directy--target dir选项已经存在。这是在从hdfs中删除directy之后执行的,但不能解决问题。
我发现提到这一点是一个问题,除了将新值放入一个侧目录并对数据运行sqoop merge以将其展平之外,还没有找到其他解决方案。我想在shell脚本中实现自动化,并且想知道是否有更好的方法来处理这个增量更新。
我想看看对于我需要导入一个mysql表的需求来说,什么是最好的选择,并基于带有最后修改的时间戳的列将更改增量地更新到配置单元中。i、 e.根据mysql中的更改创建、更新或删除hive表中的行,以保持它们的同步。
在此方面的任何帮助都将不胜感激。
向罗希特致意
2条答案
按热度按时间iswrvxsc1#
使用
append
命令而不是lastmodified
不断更新。如:
2skhul332#
对于基于配置单元的系统来说,处理涉及记录更新的增量负载是非常困难的。这种联系将提供许多可行的解决办法。