如何在sqoop中指定多个条件?

xxls0lw8  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(594)

sqoop版本:1.4.6.2.3.4.0-3485
我一直在尝试使用以下命令使用sqoop导入数据:

sqoop import -libjars /usr/local/bfm/lib/java/jConnect-6/6.0.0/jconn3-6.0.0.jar --connect jdbc:sybase:db --username user --password 'pwd' --driver com.sybase.jdbc3.jdbc.SybDriver --query 'SELECT  a.* from table1 a,table2 b where b.run_group=a.run_group  and a.date<"7/22/2016" AND $CONDITIONS' --target-dir /user/user/a/ --verbose --hive-import --hive-table default.temp_a --split-by id

我得到以下错误:

Invalid column name '7/22/2016'

我试过用双引号括住查询,但是它说:

CONDITIONS: Undefined variable.

尝试了几个单引号/双引号和转义$条件的组合,还使用了--where开关。
ps:条件不是数字(它适用于x<10左右的情况,但不适用于字符串或日期)

nue99wik

nue99wik1#

可以使用的解决方法:-选项文件
复制选项文件中的查询并使用开关。
选项文件可能如下所示:

--query
select * \
from table t1 \
where t1.field="text" \
and t1.value="value" \
and $CONDITIONS

注意:不确定这是否是一个特定的版本问题,但是——直接在命令中查询只是拒绝使用$conditions(是的,我试着用\和其他几个引号组合来转义)

o3imoua4

o3imoua42#

听你的指挥 --split-by=id 应该是 --split-by=a.id ,我会用 join 而不是增加额外的 where 条件,也可以将日期转换为(指定的字符串值) VARCHR (使用sybase特定函数)

sqoop import -libjars /usr/local/bfm/lib/java/jConnect-6/6.0.0/jconn3-6.0.0.jar \
--connect jdbc:sybase:db \
--username user \
--password 'pwd' \
--driver com.sybase.jdbc3.jdbc.SybDriver \
--query "SELECT  a.* from table1 a join table2 b on a.id=b.id where a.run_group=b.run_group and convert(varchar, a.date, 101) < '7/22/2016' AND \$CONDITIONS" \
--target-dir /user/user/a/ \
--verbose \
--hive-import \
--hive-table default.temp_a \
--split-by a.id

相关问题