sqoop import为正确的sql查询提供了错误的结果

时间:2017-10-06 20:09:40

标签: mysql hadoop sqoop

我在MySQL中使用了如下所示的查询。我得到了我想要的结果。

select TABLE_NAME,count(column_name) as no_of_columns from information_schema.columns where TABLE_SCHEMA = 'testing' and TABLE_NAME NOT REGEXP 'temp|bkup|RemoveMe|test' group by TABLE_NAME

当我在sqoop import语句中使用相同的查询时,结果会有所不同。

sqoop导入语句如下。

sqoop import --connect jdbc:mysql://xxxxxx:3306/information_schema --username xxxxx --password-file /user/xxxxx/passwds/mysql.file --query "select TABLE_NAME,count(column_name) as no_of_columns from information_schema.columns where TABLE_SCHEMA = 'testing' and TABLE_NAME NOT REGEXP 'temp|bkup|RemoveMe|test' group by TABLE_NAME and \$CONDITIONS" -m 1 --target-dir /user/hive/warehouse/xxxx.db/testing_columns --outdir /home/xxxxx/logs/outdir

为什么会发生这种情况,我该怎么办才能获得理想的结果

1 个答案:

答案 0 :(得分:1)

$CONDITIONS令牌必须位于WHERE子句中:

sqoop import --connect jdbc:mysql://xxxxxx:3306/information_schema \
    --username xxxxx --password-file /user/xxxxx/passwds/mysql.file \
    --query "select TABLE_NAME,count(column_name) as no_of_columns \ 
               from information_schema.columns \
               where TABLE_SCHEMA = 'testing' \
                 and TABLE_NAME NOT REGEXP 'temp|bkup|RemoveMe|test' \ 
                 and \$CONDITIONS \
               group by TABLE_NAME" \
    -m 1 --target-dir /user/hive/warehouse/xxxx.db/testing_columns \
    --outdir /home/xxxxx/logs/outdir

还要考虑根据Sqoop User Guide

  

在当前版本的Sqoop中使用自由格式查询的功能   仅限于没有模棱两可的预测的简单查询   OR子句中没有WHERE个条件。使用复杂的查询等   作为具有子查询或联接的查询导致模糊不清   预测会导致意想不到的结果。