进入 Hive 表 - 非分区表到具有多个分区的分区表 - 无法插入目标表,因为列号/类型

当我尝试插入分区表时,出现以下错误:

SemanticException [错误 10044]:第 1:23 行无法插入目标表,因为列号/类型不同:表 insclause-0 有 6 列,并且 3 列已分区,我们不需要任何必须转储的过滤器/store 从非分区表到分区表。

我的桌子:

来源:

id name   salary dep
1  sai    1000   sales
2  syam   2000   hr
3  sundar 3000   bank

目标:

id name   salary dep
1  sai    1000   sales
2  syam   2000   hr
3  sundar 3000   bank

partition (name string,dep string)

请告诉我如何从源复制到目标

尝试了以下方法。

insert into target_partitioned_table partition(name,dep) select id from source_table;
ssd88 回答:进入 Hive 表 - 非分区表到具有多个分区的分区表 - 无法插入目标表,因为列号/类型

您应该列出选择中的所有列,分区列应该是最后一个并且顺序相同。列的顺序很重要。

检查表 DDL。如果按Name和Dep进行分区,那么分区列应该是最后一个:id,salary,name,dep。如果列按照您的问题进行排序,则该表看起来不像是按 (Name,Dep) 进行分区的,或者文件或数据示例中的列顺序是错误的。按照 DESCRIBE 命令返回的相同顺序插入列。

查询应以完全相同的顺序包含所有列。

对于静态分区加载,您不需要选择中的分区列,分区规范中的值是静态的:

insert into table target_partitioned_table partition(name='Some Name',dep='Sales')
select id,salary from source_table;

对于动态分区加载(分区取自数据集并且应该以相同的顺序在选择中):

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

insert into table target_partitioned_table partition(name,dep)
select id,dep from source_table;
本文链接:https://www.f2er.com/1143051.html

大家都在问