从oracle到hdfs的增量sqoop

eoigrqb6  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(320)

我正在做一个从hdfs到oracle的增量sqooping,给出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"'))

但它没有使用索引。如何强制索引,以便sqoop只考虑过滤的记录就可以更快。
增量sqoop的最佳选择是什么。oracle中的表大小以tbs为单位。表有数十亿行,在条件之后是百万行

nbysray5

nbysray51#

你可以用 --where 或者 --query 在select中使用where条件过滤导入结果
我不确定你的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增量加载的更多详细信息

更新

对于增量导入,建议维护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 第一次从start导入时,sqoop作业将在下一次调用中自动传递最新的值

相关问题