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

vom3gejh  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(364)

我在中使用了下面这样的查询 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

为什么会发生这种情况?我应该怎么做才能得到想要的结果

oknwwptz

oknwwptz1#

这个 $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用户指南:
在当前版本的sqoop中,使用自由形式查询的功能仅限于简单的查询,其中没有不明确的投影和 OR 环境条件 WHERE 条款。使用复杂的查询(例如具有子查询或连接的查询)会导致不明确的投影,这可能会导致意外的结果。

相关问题