我有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:无法插入表
m16
。main_TAB
,因为列数不同:需要2列,但查询有3列。 (状态=,代码= 0)
我已经设置了这两个
SET hive.exec.dynamic.partition = true
SET hive.exec.dynamic.partition.mode = nonstrict
答案 0 :(得分:1)
现在所有拼写错误都已修复,您可以更轻松地查看自己在做什么。
最后一行,您已选择mytime
两次。我不确定为什么错误不认为你有4列,但无论如何,不要使用*
,因为你有一个与源表中的列同名的分区列。
SELECT id, age, substr(mytime,0,10) as mytime;
当插入分区表时,我注意到总是需要最后选择分区列