Hive动态分区问题

时间:2017-11-05 15:31:55

标签: hadoop apache-spark hive

我有2张表格如下。

CREATE EXTERNAL TABLE IF NOT EXISTS TEMP_tab(id int,mytime STRING,age int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION 'hdfs://xxx';

CREATE TABLE IF NOT EXISTS main_TAB(id int,age int)
PARTITIONED BY (mytime STRING)
STORED AS ORC
tblproperties ("orc.compress"="ZLIB");

FROM TEMP_TAB INSERT OVERWRITE TABLE main_TAB 
PARTITION (mytime) 
SELECT *,substr(mytime,0,10) as mytime;

但奇怪的是插入不起作用。它有以下错误消息

  

错误:org.apache.spark.sql.AnalysisException:无法插入表m16main_TAB,因为列数不同:需要2列,但查询有3列。 (状态=,代码= 0)

我已经设置了这两个

SET hive.exec.dynamic.partition = true
SET hive.exec.dynamic.partition.mode = nonstrict

1 个答案:

答案 0 :(得分:1)

现在所有拼写错误都已修复,您可以更轻松地查看自己在做什么。

最后一行,您已选择mytime两次。我不确定为什么错误不认为你有4列,但无论如何,不​​要使用*,因为你有一个与源表中的列同名的分区列。

SELECT id, age, substr(mytime,0,10) as mytime;

当插入分区表时,我注意到总是需要最后选择分区列