我正在从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。 表有数十亿行,在条件之后有几百万行
答案 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保存作业自动维护--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