Apache sqoop 增量保存的作业设置

Apache sqoop incremental saved jobs setting

对于使用 sqoop 保存的作业,官方文档指出将导入较新的记录。没问题。

但是,如果我们想要使用保存的作业并且我们想要使用 >= 上次保存的值,例如并发使用数据库中此数据类型可能出现的时间戳不准确?我们可以影响保存的值或比较,即 >= 而不是 > ?

我们还尝试使用基于最后时间戳的 Sqoop 作业增量上传。您将面临的挑战是,如果 Sqoop 服务重新启动,它会丢失时间戳或您正在使用的控制变量的轨迹。

我建议改为调整导入查询。例如,如果您想将 table_1 从 RDBMS 增量导入到 Hive,请在 bash shell 中使用如下内容:

    # Get the max id from the hive table
    maxCount=`hive -S -e "SELECT MAX(id) FROM hivedb.table_1" | head -1 | cut -d ' ' -f1`

    # If maxCount is not a number, make it zero.
    re='^[0-9]+$'
    if ! [[ $maxCount =~ $re ]] ; then
       maxCount=0
    fi

    # Build the SQL query
    sql_query="select col1, col2, ..., coln from  table_1 (NOLOCK) WHERE id > ${maxCount}"

    # Run the Sqoop import
    sqoop import --connect 'jdbc:jdbcUrl;UserName=usrname;password=password;database=dbName' --query "$sql_query AND $CONDITIONS" -m 4 --split-by id --hive-table hivedb.table_1 --hive-import ;