我试图为我的表创建分区,以便更新一个值。
这是我的样本数据
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
也不能正常工作。
还有别的事吗。
尝试以下方法:
从创建表开始:
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 ;
不能直接将数据(Hdfs文件)插入到分区的配置单元表中。首先需要创建一个普通表,然后将该表数据插入到分区表中。
设置蜂箱。执行官。动态隔断mode=strict
意味着在填充配置单元表时,它必须至少有一个静态分区列。
设置蜂箱。执行官。动态隔断mode=nonstrict
在这种模式下,您不需要任何静态分区列。
尝试以下两种属性
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
在为分区表编写insert语句时,请确保在select子句的最后一个指定分区列。
我使用的是版本。我正试图将一个分区的配置单元表加载到一个数据表中,在这个数据表中,配置单元表是按号进行分区的,在一个场景中,我可能有104个分区。 如果你对我有什么建议,请告诉我。 谢了。
查询示例: 典型错误消息: 处理语句时出错:失败:执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapredTask返回代码2 问题2:当我运行命令?我是否只运行相同的命令,但使用STRING而不是bigint?**完整错误消息:**
插入覆盖表myTable分区(字段)从myTable中选择*,其中机器='xxxxx' 但是SELECT中的数据不会替换MyTable中的数据。
先声明一下,这不是Hadoop的生产环境。这是一个我们测试工作流的单节点环境