2016-07-25 159 views
0

Sqoop版本:1.4.6.2.3.4.0-3485如何在sqoop中指定多个条件?

我一直在尝试使用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左右,但不是在情况下它是一个字符串或日期)

+1

当你试图用双引号括住整个查询,而其他字符串在单个引号中时,是否在$ CONDITIONS之前添加了反斜杠?就像这样:--query“SELECT a。*(...)and a.date <'7/22/2016'AND \ $ CONDITIONS”我读过你试图逃避$条件,但它只是为了确定你尝试过的不同组合。 –

+0

这个查询在RDBMS客​​户端上工作:'SELECT a。* from table1 a,table2 b where b.run_group = a.run_group and a.date <“7/22/2016”' –

+0

如果它正在工作,那么请尝试'“SELECT a。* from table1 a,table2 b其中b.run_group = a.run_group和a.date <'7/22/2016'AND \ $ CONDITIONS“'由Jaime建议 –

回答

0

在您的命令--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 
+0

仍然没有运气。 $ CONDITIONS似乎适用于基于整数的条件。例如:where子句中的id <1000,但日期字段没有。即使字符串比较也不适用于这个问题。 (那些是char和varchar字段,有和没有应用转换函数) – Outflanker

+0

你可以'AND(1 = 1)'而不是'AND $ CONDITIONS'? –

+0

如果这不起作用 - 尝试在sqoop中查找有关'$ CONDITIONS'的任何现有问题 - 如果您没有发现类似于您的问题的任何内容 - 您可以提交JIRA票证 ​​- https://issues.apache.org/jira/browse/SQOOP-1061?jql = project%20%3D%20SQOOP%20AND%20text%20〜%20%22%24CONDITIONS%22 –

0

可以使用一种解决方法:-options文件

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

选项文件可能为:

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

注:不知道,如果它是一个特定版本的问题或没有,但--query直接在命令只是拒绝与$的条件下工作。 (是的,我尝试用\和其他几个引用组合来转义它)

相关问题