从oracle到hdfs的增量sqoop条件

时间:2016-09-23 14:14:15

标签: hadoop oracle11g hdfs sqoop

我正在从hdfs oracle执行增量sqooping,给出类似

的条件
(LST_UPD_TMST >TO_TIMESTAMP('2016-05-31T18:55Z', 'YYYY-MM-DD"T"HH24:MI"Z"')
 AND LST_UPD_TMST <= TO_TIMESTAMP('2016-09-13T08:51Z', 'YYYY-MM-DD"T"HH24:MI"Z"'))

但它没有使用索引。如何通过仅考虑过滤记录来强制索引以使sqoop更快。

进行增量sqoop的最佳选择是什么。 oracle中的表大小是TB。 表有数十亿行,在条件之后有几百万行

1 个答案:

答案 0 :(得分:2)

  

您可以使用--where--query选择中的条件来过滤导入结果

我不确定你的sqoop full命令,只是试试这种方式

sqoop import 
    --connect jdbc:oracle:thin:@//db.example.com/dbname \
    --username dbusername \
    --password dbpassword \
    --table tablename \
    --columns "column,names,to,select,in,comma,separeted" \
    --where "(LST_UPD_TMST >TO_TIMESTAMP('2016-05-31T18:55Z', 'YYYY-MM-DD\"T\"HH24:MI\"Z\"') AND LST_UPD_TMST <= TO_TIMESTAMP('2016-09-13T08:51Z', 'YYYY-MM-DD\"T\"HH24:MI\"Z\"'))" \
    --target-dir {hdfs/location/to/save/data/from/oracle} \
    --incremental lastmodified \
    --check-column LST_UPD_TMST \
    --last-value {from Date/Timestamp to Sqoop in incremental}

查看有关sqoop incremental load

的更多详情

更新

对于增量导入,建议 Sqoop保存作业自动维护--last-value

sqoop job --create {incremental job name} \
    -- import
    --connect jdbc:oracle:thin:@//db.example.com/dbname \
    --username dbusername \
    --password dbpassword \
    --table tablename \
    --columns "column,names,to,select,in,comma,separeted" \
    --incremental lastmodified \
    --check-column LST_UPD_TMST \
    --last-value 0 
  

这里--last-value 0首次从开始导入,然后是最新导入   值将在sqoop job

的下一次调用中自动传递