我有一个要求,其中我需要逐步将表从mysql导入到hive,并且在执行此操作时遇到问题。 这是我到目前为止所尝试的:
/ sqoop job
--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'和最大边界作为当前时间。 第二次执行:拾取上次运行的所有更改,但旧行被覆盖,只留下上次运行中已更改的行。
我发现这是一个问题,除了将新值放入一个副目录并在数据上运行sqoop merge以展平它之外,还没有找到解决方案。我想在shell脚本中自动执行此操作,并且想知道是否有更好的功能 处理此增量更新的方法。
想要检查什么是最佳选项,我需要导入一个mysql表,并根据带有最后修改时间戳的列逐步更新更改到hive。 即根据mysql中的更改创建,更新或删除Hive表中的行,以使它们保持同步。
非常感谢任何帮助。
此致 罗希特夏尔
答案 0 :(得分:1)
基于配置单元的系统很难处理涉及记录更新的增量加载。这个link将提供更多可行的解决方案。
答案 1 :(得分:1)
使用append
命令代替lastmodified
来持续获取更新。
例如:
--create test2 -- import
--connect jdbc:mysql://URL
--username username
--password password
--table mysqlTablename
--hive-import
--direct
--incremental append
--check-column last_modified_time
--last-value "0"