Bae*_*mla 11 hadoop hive hiveql
我正在尝试使用动态分区创建分区表,但我遇到了一个问题.我在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;
Run Code Online (Sandbox Code Playgroud)
但它不起作用..我得到一个错误.
这是创建表demo_stg的Query :
create table demo_stg
(
country STRING,
stadt STRING,
geograph_breite FLOAT,
id INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\073";
Run Code Online (Sandbox Code Playgroud)
和demo_tab:
CREATE TABLE demo_tab
(
stadt STRING,
geograph_breite FLOAT,
id INT
)
PARTITIONED BY (land STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\073";
Run Code Online (Sandbox Code Playgroud)
感谢帮助 :)
Tan*_*eer 17
您需要修改您的选择:
set hive.exec.dynamic.partition=true;
INSERT OVERWRITE TABLE demo_tab PARTITION (land)
SELECT stadt, geograph_breite, id, t.country
FROM demo_stg t;
Run Code Online (Sandbox Code Playgroud)
我不确定您的演示阶段中哪个列要执行分区,或者哪个列在demo中对应于land.但无论列是什么,它都应该作为select中的最后一列出现,说你的演示表列名是id,所以你的select应该写成:
INSERT OVERWRITE TABLE demo_tab PARTITION (land)
SELECT stadt, geograph_breite, id, t.country,t.id as land
FROM demo_stg t;
Run Code Online (Sandbox Code Playgroud)
我认为这应该有效.
小智 8
分区列必须是select查询中的最后一列.
除了将分区设置为true之外,还需要将模式设置为nonstrict:
set hive.exec.dynamic.partition.mode=nonstrict
Run Code Online (Sandbox Code Playgroud)