2014-06-16 128 views
4

我想創建一個使用動態分區的分區表,但我面臨一個問題。我在Hortonworks Sandbox 2.0上運行Hive 0.12。蜂巢動態分區

set hive.exec.dynamic.partition=true; 
INSERT OVERWRITE TABLE demo_tab PARTITION (land) 
SELECT stadt, geograph_breite, id, t.country 
FROM demo_stg t; 

但是它不工作..我得到一個錯誤。

下面是創建該表demo_stg查詢:

create table demo_stg 
(
    country STRING, 
    stadt STRING, 
    geograph_breite FLOAT, 
    id INT 
    ) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\073"; 

而且DEMO_TAB

CREATE TABLE demo_tab 
(
    stadt STRING, 
    geograph_breite FLOAT, 
    id INT 
) 
PARTITIONED BY (land STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\073"; 
  • demo_stg也充滿了數據,所以它的不是空的。

感謝您的幫助:)

+0

什麼是你所得到的錯誤? – visakh

+0

也嘗試添加SET hive.exec.dynamic.partition.mode = nonstrict; –

+0

如果我嘗試運行「SET hive.exec.dynamic.partition.mode = nonstrict;」我收到一個錯誤。我得到的每個錯誤消息都是這樣的:「執行配置單元查詢時發生錯誤:未知異常。」 – Baeumla

回答

9

您需要修改您的選擇:

set hive.exec.dynamic.partition=true; 
INSERT OVERWRITE TABLE demo_tab PARTITION (land) 
SELECT stadt, geograph_breite, id, t.country 
FROM demo_stg t; 

我不知道在您的演示其列分期要執行分區或演示其列對應於土地。但無論是列應該是存在於選擇最後一欄說您的演示表的列名是id,這樣你的選擇應該寫成:

INSERT OVERWRITE TABLE demo_tab PARTITION (land) 
SELECT stadt, geograph_breite, id, t.country,t.id as land 
FROM demo_stg t; 

我認爲這應該工作。

+0

感謝您的幫助:) Select: 「INSERT OVERWRITE TABLE demo_tab PARTITION(land)SELECT stadt,geograph_breite,id,t.country,t.id as land FROM demo_stg t;」作品! – Baeumla

+0

我很高興它的工作。和你的歡迎。此外,如果您有多個要分區的列,則選擇應該包含多個,如您在插入語句後在PARTITION子句中指定的順序。幾天前,我已經寫了一篇關於同樣的博客http://exploredatascience.blogspot.in/2014/06/dynamic-partitioning-with-hive.html – Tanveer

2

分區列需要是選擇查詢中的最後一列。

還有一件事比設置您需要設置模式,不嚴格的分區爲true其他:

set hive.exec.dynamic.partition.mode=nonstrict