sqoop中如何指定多个条件?

How to specify multiple conditions in sqoop?

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.

尝试了 single/double 引号和转义 $CONDITIONS 以及使用 --where 开关的几种组合。

PS:条件为非数字。 (它适用于 x<10 左右的情况,但不适用于字符串或日期)

在你的命令中 --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

可以使用的解决方法:-options-file

复制选项文件中的查询并使用开关。

选项文件可能如下:

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

注意:不确定是否是特定版本问题,但直接在命令中查询只是拒绝使用 $CONDITIONS。 (是的,我尝试用 \ 和其他几种引号组合转义它)