设置常量边界查询

nimxete2  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(356)

我使用sqoop将mysql表导入hdfs。为此,我使用自由形式的查询导入。

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

由于使用了min(id)和max(id)搜索,这个查询非常慢。为了提高性能,我决定使用--boundary查询并手动指定下限和上限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 '\"'

有没有人已经遇到/解决了这个问题?谢谢

dgtucam1

dgtucam11#

像这样试试。。

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

cgfeq70w2#

你说得对。。
我们不应该使用--split by with--boundary查询控制参数。

mm9b1k5b

mm9b1k5b3#

我通过删除以下参数成功地解决了此问题:

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

似乎在参数之间存在并发性—边界查询、—检查列、—拆分方式和—增量追加

相关问题