设置常量边界查询

Set a constant boundary query

我正在使用 Sqoop 将 MySQL 表导入 HDFS。为此,我使用了自由格式查询导入。

--query "SELECT $query_select FROM $table where $CONDITIONS"

由于 min(id) 和 max(id) 搜索,此查询非常慢。为了提高性能,我决定使用 --boundary-query 并手动指定下限和上限。 (https://www.safaribooksonline.com/library/view/apache-sqoop-cookbook/9781449364618/ch04.html):

--boundary-query "select 176862848, 172862848"

然而,sqoop 不关心指定的值,并再次尝试自己找到最小值和最大值 "id"。

16/06/13 14:24:44 INFO tool.ImportTool: Lower bound value: 170581647
16/06/13 14:24:44 INFO tool.ImportTool: Upper bound value: 172909234

完整的sqoop命令:

sqoop-import -fs hdfs://xxxxxxxxx/ -D mapreduce.map.java.opts=" -Duser.timezone=Europe/Paris" -m $nodes_number\
    --connect jdbc:mysql://$server:$port/$database --username $username --password $password\
    --target-dir $destination_dir --boundary-query "select 176862848, 172862848"\
    --incremental append --check-column $id_column_name --last-value $last_value\
    --split-by $id_column_name --query "SELECT $query_select FROM $table where $CONDITIONS"\
    --fields-terminated-by , --escaped-by \ --enclosed-by '\"'

有人已经met/solved遇到过这个问题吗?谢谢

这样试试..

--boundary-query "select 176862848, 172862848 from tablename limit 1" \

我已经通过删除以下参数解决了这个问题:

--incremental append --check-column $id_column_name --last-value $last_value

参数--boundary-query、--check-column、--split-by和--incremental append之间似乎存在并发性

你是对的..

我们不应该将 --split-by--boundary-query 控制参数一起使用。