Sql into配置单元表-非分区表到具有多个分区的分区表-无法插入目标表,因为列数/类型

Sql into配置单元表-非分区表到具有多个分区的分区表-无法插入目标表,因为列数/类型,sql,hive,hiveql,hive-partitions,Sql,Hive,Hiveql,Hive Partitions,当我试图插入一个分区表时,出现以下错误: SemanticException[错误10044]:第1:23行无法插入目标表,因为列数/类型不同:table insclause-0有6列,3列已分区,我们不需要从非分区表转储/存储到分区表的任何筛选器 我的桌子: 资料来源: id name salary dep 1 sai 1000 sales 2 syam 2000 hr 3 sundar 3000 bank 目标: id name salary dep 1

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

SemanticException[错误10044]:第1:23行无法插入目标表,因为列数/类型不同:table insclause-0有6列,3列已分区,我们不需要从非分区表转储/存储到分区表的任何筛选器

我的桌子:

资料来源:

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
分区(名称字符串、dep字符串)

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

在下面尝试

insert into target_partitioned_table partition(name,dep) select id from source_table;

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

检查表DDL。如果按名称和Dep进行分区,则分区列应为最后一列:
id、salary、Name、Dep
。如果列的顺序与问题中的顺序相同,则表看起来不像是按(Name,Dep)分区的,或者文件或数据示例中的列顺序错误。按描述命令返回的相同顺序插入列

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

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

insert into table target_partitioned_table partition(name='Some Name',dep='Sales')
select id, salary from source_table;
对于动态分区加载(分区取自数据集,并且应以相同的顺序在select中):

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

insert into table target_partitioned_table partition(name,dep)
select id, salary, name, dep from source_table;