【问题标题】:Insert partitioned data into partitioned hive table将分区数据插入分区 hive 表
【发布时间】:2015-10-29 11:20:44
【问题描述】:
我已经使用带有列 id 的 Pig Multistorage 将数据存储在 hdfs 中。
所以数据存储为
/output/1/part-0000
/output/2/
/output/3/
现在我在 hive 中创建了一个分区表,我想将 /output 文件夹中的数据加载到这个分区表中。有什么方法可以实现吗?
【问题讨论】:
标签:
hadoop
hive
apache-pig
hadoop-partitioning
【解决方案1】:
首先,您创建一个临时配置单元表,您可以在其中加载来自 pig 输出的所有数据。
然后,您从临时表加载到您的实际分区配置单元表。
如下所示:
FROM emp_external temp INSERT OVERWRITE TABLE emp_partition PARTITION(country) SELECT temp.id,temp.name,temp.dept,temp.sal,temp.country;
否则,您可以针对此案例探索 Hcatlog。
【解决方案2】:
不确定您是要将输出文件夹中的数据(由 pig 创建)插入到现有表中,还是将输出文件夹中的数据加载到新的 hive 分区表中。
如果要将数据加载到新的配置单元表中,可以创建一个指向输出文件夹的新分区表
如果您希望将数据加载到现有的 hive 表中,那么您可以像@Aman 提到的那样创建一个临时表并插入到目标表中
或
您可以将 hdfs 中的文件从 output/ 移动/复制到 hive 表位置。
希望对你有帮助
【解决方案3】:
将 Hive 模式分配给以分区列(Alter table Add Partition)作为列 ID 的猪输出位置。现在两者都是 hive 表,您可以在分区列上使用 where 子句来移动数据。