hadoop - Apache sqoop 增量保存作业设置
问题描述
对于使用 sqoop 保存的作业,ooficial 文档指出将导入更新的记录。没有问题。
但是,如果我们想要使用保存的作业并且我们想要使用 >= 最后保存的值,例如并发使用数据库中这种数据类型可能出现的时间戳不准确,该怎么办?我们可以影响保存的值或比较,即 >= 而不是 > 吗?
解决方案
我们还尝试使用基于最后时间戳的 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 ;
推荐阅读
- html - 如何:在 HTML/ASP 页面中显示来自 AlaSQL Excel 文件导入的数据
- c++ - 如何对类成员向量进行排序?
- python - 如何使用 TextInputs 中的内容制作 CSV 文件?
- java - 我写了一个代码,如果一个新单词在一个句子中开始,它会将单词的第一个字符发送为大写
- dynamics-crm - 对于 Dynamics CRM 365 安全角色,追加和追加意味着什么?
- perl - 无法使用包含单引号的键从存储中检索数据
- tensorflow - 无法保存保存/导出并加载使用急切执行的 keras 模型
- workflow - Netsuite 关闭销售订单不会触发用户事件脚本
- performance - 如何在 Ubuntu 上加速特定进程
- java - 如何通过usb otg将命令linux从一台设备发送到另一台设备?