2016-07-25 17 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直接在命令只是拒絕與$的條件下工作。 (是的,我嘗試用\和其他幾個引用組合來轉義它)

相關問題