2016-09-23 77 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任務,經過