hive第一列在分区表中考虑

时间:2016-05-10 11:45:43

标签: hadoop hive

在配置单元中创建分区表,是否必须始终选择分区列的最后一列。 如果我选择第一列作为分区,我不能过滤数据,有没有办法选择第一列进行分区?

2 个答案:

答案 0 :(得分:0)

在配置单元中,如果要对表进行分区,则必须在表创建期间首先定义分区列。 &安培;在将数据填充到表中时,您需要指定如下:

“INSERT INTO partitioned_table PARTITION(status)SELECT id,name,status from temp_tbl”

以这种方式使用你只能基于最后一列进行分区。如果你想在第一列的基础上进行分区。你必须为此编写一个Mapreduce作业。这是唯一可用的选择。

答案 1 :(得分:0)

我猜您遇到的问题是您的本地系统或hdfs中已经有表“source”,并且您希望将其上传到分区表。并且您希望源表中的第一列在配置单元中进行分区。由于源表没有标题,我想如果我们尝试直接在hive目标文件夹中上传文件,我们就无法做任何事情。我知道的唯一替代方法是在hive中创建一个非分区表,其结构与源文件完全相同。然后首先将源数据上载到非分区表,然后将数据从非分区表复制到分区表。 假设源文件是这样的 create table source(eid int, ename int, esal int) partitioned by (dept string) 您上传数据的非分区表格就像这样create table nopart(dept string, esal int,ename string, eid int) 然后通过命令insert overwrite table source partition(dept) select eid,ename,esal,dept from nopart;使用动态分区 参数的顺序是这里唯一的一点。

相关问题