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。 (是的,我尝试用 \ 和其他几种引号组合转义它)
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。 (是的,我尝试用 \ 和其他几种引号组合转义它)