1. 场景分析: 从业务DB mysql 导入到hive, 如果Mysql单表的数据量过大,Sqoop会长时间处于heart beat(心跳)状态。
原因: sqoop先执行默认的boundary-query操作, 获取Mysql表中ID的最大和最小值,为后续切片使用。
SELECT MIN(id), MAX(id) FROM (select id,xxoo from [big_table] a where (1 = 1) ) AS t1
上面的语句采用子查询,性能太差, 而且会生成临时中间表。
解决方案: 增加--boundary-query 参数, 修改语句
SELECT MIN(`id`), MAX(`id`) FROM `hdtool_orders` WHERE gmt_create >='${start}' and gmt_create <'${end}'