2017-10-09 33 views
0

我試圖添加分區蜂巢表(按日期分區)在蜂巢表基於一個子查詢

我的問題是,日期需要從另一個表獲取加分。

我的查詢是這樣的:

ALTER TABLE MY_TABLE ADD IF NOT EXISTS PARTITION(server_date =(SELECT MAX(server_date)FROM processed_table));

當我運行查詢蜂巢引發以下錯誤:

錯誤:錯誤在編譯聲明:失敗:ParseException的線1:84無法識別輸入附近「(」「選擇」在不斷的「最大」(狀態= 42000,代碼= 40000)

+0

https://issues.apache.org/jira/browse/HIVE-8182 –

回答

0

蜂房不允許使用功能/ UDF對分區列

方法1:

要做到這一點,你可以運行第一闕ry並將結果存儲在一個變量中,然後執行查詢。

server_date=$(hive -e "set hive.cli.print.header=false; select max(server_date) from processed_table;") hive -hiveconf "server_date"="$server_date" -f your_hive_script.hql

裏面你的腳本,你可以使用下面的語句:

ALTER TABLE my_table ADD IF NOT EXISTS PARTITION(server_date =${hiveconf:server_date});

欲瞭解更多信息,蜂箱變量替換,你可以參考link

方法2:

在這種方法中,如果需要分區數據,您將需要創建一個臨時表ing已經沒有加載到任何其他分區表中。

考慮到您的數據沒有server_date列。

  1. 將數據加載到臨時表
  2. 組hive.exec.dynamic.partition = TRUE;
  3. 執行下面的查詢:

INSERT OVERWRITE TABLE my_table PARTITION (server_date) SELECT b.column1, b.column2,........,a.server_date as server_date FROM (select max(server_date) as server_date from) a, my_table b;

+0

是否有上述辦法的工作了嗎? –

+0

我使用JDBC代碼,似乎工作... –