-查询时没有where$条件

wfveoks0  于 2021-06-03  发布在  Sqoop
关注(0)|答案(2)|浏览(310)

我有一个 dept_nopk table。这个表有两列, department_id 以及 department_name 并且此表没有任何主键。我尝试使用以下sqoop命令在hdfs中导入这个表。

sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db"
--username useranem
--password pass
--query "select * from dept_nopk where department_id <> 1000"
--target-dir /user/cloudera/departments
-m 1

但它给出了以下错误:

java.io.IOException: query[select * from dept_nopk where department_id <> 1000] must contain $CONDITION in where clause

我现在的问题是:
1) 当我已经指定Map的数目只有1时,为什么会出现这个错误?有必要把 $CONDITION 在我的 where 条款?
2) 第二次我修改了我的查询如下

sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db"
--username useranem
--password pass
--query "select * from dept_nopk where \$CONDITIONS"
--target-dir /user/cloudera/departments
--where "department_id <> 8000"            
-m 1

我曾经 --where 对于 department_id<>8000 并指定 \$CONDITIONS . 现在,我没有得到任何错误,但在结果中,它导入了行 department_id =8000 同时,也就是说,它完全忽略了 --where 争论。为什么?
3) 我试着跟着它走,效果很好。

sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db"
--username useranem
--password pass
--query "select * from dept_nopk where department_id <> 8000 and \$CONDITIONS"
--target-dir /user/cloudera/departments          
-m 1

你能解释一下1)和2)中描述的错误背后的原因吗?

nbysray5

nbysray51#

  • --where与--query互斥(如果包含则忽略)[逻辑上,u r adding--query添加where caluse]
  • $conditions与您的条件(where子句)无关。它(在--query和中是必需的)在内部用于并行化结果,即使Map器大于1。它的工作原理是——按参数分割。
gkl3eglg

gkl3eglg2#

问题1
添加 $CONDITION 在sqoop中是必需的,即使有1个Map器,因为sqoop transform查询1个Map器,例如-
获取元数据:

select * from dept_nopk where 1 = 0

替换 \$CONDITIONS 1=0时
要获取所有数据:

select * from dept_nopk where 1 = 1

替换 \$CONDITIONS 1=1时
问题2
检查类似的问题:sqoop——where is not working with——query

相关问题