当前位置: 首页 > 知识库问答 >
问题:

数据未加载到配置单元中的分区表中

盖高畅
2023-03-14

我试图为我的表创建分区,以便更新一个值。

这是我的样本数据

1,Anne,Admin,50000,A
2,Gokul,Admin,50000,B
3,Janet,Sales,60000,A

我想把珍妮特的部门更新到B。

为此,我创建了一个以Department为分区的表。

创建外部表trail(EmployeeID Int、FirstName String、Designation String、Salary Int),按(Department String)行格式分隔字段进行分区,以“,”location'/user/sreeveni/HIVE'结尾;

但在执行上述命令时。没有数据被插入到跟踪表中。

hive>select * from trail;                               
OK
Time taken: 0.193 seconds

hive>desc trail;                                        
OK
employeeid              int                     None                
firstname               string                  None                
designation             string                  None                
salary                  int                     None                
department              string                  None                

# Partition Information      
# col_name              data_type               comment             

department              string                  None   

我做错什么了吗?

更新

正如我建议的那样,我试图将数据插入我的表中

将路径“/user/aibladmin/HIVE”覆盖中的数据加载到表跟踪分区(部门);

但它正在显现

失败:SemanticException[错误10096]:动态分区严格模式至少需要一个静态分区列。要关闭这个蜂箱。执行官。动态隔断模式=不严格

设置后设置蜂巢。执行官。动态隔断mode=nonstrict也不能正常工作。

还有别的事吗。

共有3个答案

齐嘉庆
2023-03-14

尝试以下方法:

从创建表开始:

create external table test23 (EmployeeID Int,FirstName String,Designation String,Salary Int) PARTITIONED BY (Department String) row format delimited fields terminated by "," location '/user/rocky/HIVE';

用分区名在hdfs中创建一个目录:

$ hadoop fs -mkdir /user/rocky/HIVE/department=50000

创建一个本地文件abc。txt通过过滤部门等于50000的记录:

$ cat abc.txt 
1,Anne,Admin,50000,A
2,Gokul,Admin,50000,B

将其放入HDFS:

$ hadoop fs -put /home/yarn/abc.txt /user/rocky/HIVE/department=50000

现在改变表格:

ALTER TABLE test23 ADD PARTITION(department=50000);

并检查结果:

select * from test23 ;
裴弘
2023-03-14

不能直接将数据(Hdfs文件)插入到分区的配置单元表中。首先需要创建一个普通表,然后将该表数据插入到分区表中。

设置蜂箱。执行官。动态隔断mode=strict意味着在填充配置单元表时,它必须至少有一个静态分区列。

设置蜂箱。执行官。动态隔断mode=nonstrict在这种模式下,您不需要任何静态分区列。

燕璞
2023-03-14

尝试以下两种属性

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

在为分区表编写insert语句时,请确保在select子句的最后一个指定分区列。

 类似资料: