如何使用sqoop job自动执行sqoop增量导入?
据我所知,sqoop作业会记住最后一个值。 如果我们创建像
这样的sqoop作业sqoop job --create myjob - import --connect blah blah ..
sqoop exec myjob
并自动执行作业,每次执行时都会创建作业。所以,我们会得到工作已经存在的错误。
那么,是否可以使用sqoop job自动执行sqoop增量导入?
请告诉我你对此的了解。提前致谢。
答案 0 :(得分:1)
完全控制书签以获得重述的可能性更好。这就是为什么自定义机制优于sqoop作业。
工作流程模板是:
阅读最新书签。可以存储在一些rdbms(mySQL)或Hadoop / etc中的文件中。如果不存在,可以从目标表中选择书签。例如select max(etl_load_timestamp) from target_table
。
将书签条件作为参数传递给sqoop查询,例如将and etl_update_timestamp>$your_bookmark
连接到WHERE
子句。
如果增量数据太大(书签值离current_timestamp太远),请在每月/每日/每小时循环中运行sqoop,在每次迭代后保存书签。
书签可以是时间戳或某些run_id(源系统etl序列)
如果您需要重新显示数据(追溯加载),则更新书签和工作流程将从书签开始重新加载数据。
答案 1 :(得分:0)
您只需使用选项文件创建一个sqoop作业,您的作业就会被保存。 下次,当您运行作业时,它将自动获取增量数据。
答案 2 :(得分:0)
您可以创建一个shell脚本来触发sqoop
进程,我们可以使用sqoop
list --job name,添加一个条件来检查sqoop
作业是否已经存在退出可以触发已保存的作业,如果没有,则可以创建并触发sqoop作业。.对于调度,您可以创建cron
,oozie
作业,也可以使用uc4
,airflow
等调度程序,autosys
...