2016-05-02 57 views
0

這是我在shell腳本中的配置單元查詢。它所做的是從文本文件中一次讀取一個表名,然後運行hive查詢以將行插入到其中。Hive查詢傳遞字符串作爲參數

當我用一個整數值替換'I',比如說1,它工作正常。嘗試了幾種方法來通過'我',但它不起作用。任何幫助表示讚賞。

蜂巢查詢

for line in $(cat ../hive/ListofTableNames.txt); 

do 

eval "hive -e 'SET hive.exec.dynamic.partition.mode=nonstrict; 

FROM sourcedb.$line 

INSERT OVERWRITE TABLE targetdb.$line 

SELECT from_unixtime(unix_timestamp()),**'I'**,*;'" 

done 

回答

0

我會把蜂巢QL文件中的假設myRequest.ql:

SET hive.exec.dynamic.partition.mode=nonstrict; 
FROM sourcedb.${hiveconf:tableName} 
INSERT OVERWRITE TABLE targetdb.${hiveconf:tableName} 
SELECT from_unixtime(unix_timestamp()),**'I'**,*;'" 

,然後你的腳本就會像:

for line in $(cat ../hive/ListofTableNames.txt); 

do 
    eval "hive --hiveconf tableName=$line -f myRequest.ql" 
done 

希望這將有助於

+0

執行它我得到此錯誤 - 執行hive查詢時發生錯誤:編譯語句時出錯:FAILED:ParseException行2:40無法識別'*''附近的輸入'我'*'在選擇目標 – snate

+0

可以添加'(cat ../ hive/ListofTableNames.txt'的輸出嗎? – user1314742

+0

當我把查詢移動到一個單獨的文件,就像你剛纔提到的那樣,我用'I'**替換了'I'** '它工作了,感謝你的幫助。 – snate

0

我會嘗試

  1. SQL寫入一個文件,並使用--hivevar選項的變量傳遞給HQL 蜂巢--hivevar I = BB -f your.hql
  2. 從腳本寫入sql到tmp文件,運行hive -f
0

您需要在查詢中轉義單引號。

for line in $(cat ../hive/ListofTableNames.txt); 
do 
eval "hive -e 'SET hive.exec.dynamic.partition.mode=nonstrict; 
FROM sourcedb.$line 
INSERT OVERWRITE TABLE targetdb.$line 
SELECT from_unixtime(unix_timestamp()),**\'I\'**,*;'" 
done 

由於SET操作前有一個開盤報價,因此下一個報價爲結束報價。所以爲了避免這種情況,請始終使用轉義字符。

另一個很好的選擇是將查詢寫入一個單獨的文件並另存爲query.ql。並使用-f filename.ql如user1314742

相關問題