在mysql中,我有mydb/emp表和字段(eid、ename、esal)。
在这里,我尝试在步骤1中使用incremental append导入emp,而不创建job并传递最后一个值。
sqoop import -- connect jdbc:mysql://localhost/myDB --table test --m 1
--target-dir /user/cloudera/mydata --incremental append --check-column eid
我在mydata中得到了名为part-0001的不同文件的结果。。具有从eid 0到最后一个(例如eid 0到eid 8)记录的更新值。
但是当我用job做同样的代码时,结果是不同的。。。
sqoop job --create dayimport -- import --connect jdbc:mysql://localhost/myDB --table test --m 1 --target-dir /user/cloudera/mydata --incremental append --check-column eid
sqoop job --exec dayimport
在这里,我得到了不同文件的结果,但只更新了记录,即从上一个值,例如,我用新行eid7,8更新了表,所以它只包含eid7和eid8记录。
有人能解释为什么这是发生在工作,而不是正常的脚本?如果记录太大,如何确定检查列后的最后一个值?有没有不检查结束值就知道上次更新值的直接方法?
1条答案
按热度按时间lxkprmvk1#
在增量导入中,如果不指定最后一个值,sqoop将导入所有行,但是当它保存为job时,即使没有给出最后一个值,sqoop也知道从何处导入。如果您计划创建一个保存的作业,则不需要给出最后一个值,但如果您想了解它,则可以这样给出:
请参阅用户指南。