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

时间:2016-07-25 18:45:50

标签: hadoop 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.

尝试了几种单引号/双引号组合并转义$ CONDITIONS并使用--where开关。

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

2 个答案:

答案 0 :(得分:0)

在您的命令中list1 = ['ad', 'sbe', 'k3', 'lm0'] list2 = ['sb', 'e', 'lm', '0'] list3 = [1, 3] print f(list1, list2, list3) >>> ['ad', 'sb', 'e', 'k3', 'lm', '0'] 应为--split-by=id,我会使用--split-by=a.id而不是添加额外的join条件,我也会将日期转换为(指定的字符串值){ {1}}(使用sybase特定功能)

where

答案 1 :(得分:0)

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

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

选项文件可能是:

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

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