2016-09-23 75 views
2

到HDFS我做一个增量sqooping从到HDFS甲骨文给where条件像增量sqoop与条件

(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中。 表具有数十亿行并在条件之后,在约400万

回答

2

您可以使用--where--query其中选择条件来筛选导入结果

我不知道你的sqoop完整的命令,只是试试这种方式

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任务,经过