我有一个 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)中描述的错误背后的原因吗?
2条答案
按热度按时间nbysray51#
gkl3eglg2#
问题1
添加
$CONDITION
在sqoop中是必需的,即使有1个Map器,因为sqoop transform查询1个Map器,例如-获取元数据:
替换
\$CONDITIONS
1=0时要获取所有数据:
替换
\$CONDITIONS
1=1时问题2
检查类似的问题:sqoop——where is not working with——query