sqoop增量更新使用问题

使用sqoop增量更新数据到hive中,使用参数–increment,–check-column 指定增量更新的基准列,–last-value为更新比较值。

sqoop增量更新有两种模式,append和lastmodified,其中,append为根据递增列更新数据,lastmodified为根据更新时间进行增量更新。

1、append模式

append模式比较简单,只需要指定一个自增列即可,比如id,还需要设置一个基准值,比如100,那么增量导入时只会导入id大于100的记录。

 sqoop import --connect CONNECTOR --username USERNAME --password PASSWORD --fetch-size 1000\
        -m 1 --check-column id --incremental append --last-value 100 --append --target-dir dir  \
        --query "select * from table_name where condition" \
        --fields-terminated-by "\\01" \
        --hive-drop-import-delims \
        --null-string '\\N'\
        --null-non-string '\\N'

“–check-column id --incremental append --last-value 100” 要放到查询条件(–target-dir --query)之前。

2、lastmodified模式

lastmodified模式可以指定根据时间进行增量更新,同时也可以分为两种方式:–append和**–merge-key**。
增量导入数据除以上3个参数外,还必须添加 --append或者–merge-key参数指定数据更新的方式。

–append 追加方式

顾名思义,使用–append参数时,相对于存量数据指定时间字段的较新的记录会被直接追加到表尾。

 sqoop import --connect CONNECTOR --username USERNAME --password PASSWORD --fetch-size 1000\
        -m 1 --check-column time_column --incremental lastmodified --last-value "2018-11-11 00:00:00" --append --target-dir dir  \
        --query "select * from table_name where condition" \
        --fields-terminated-by "\\01" \
        --hive-drop-import-delims \
        --null-string '\\N'\
        --null-non-string '\\N'

执行以上代码会将时间字段在 2018-11-11 00:00:00 之后的记录导入到数据表中。

–merge-key 合并方式

此处有坑:因为是从全量更新修改成增量更新,所以 --incremental 参数是后加的,开始加在了最后,结果是一直找不到命令,移动到当前位置后能够正常运行,

你可能感兴趣的:(大数据)