如何在HIVE中合并小型实木复合地板文件

时间:2019-06-24 07:26:09

标签: hive concatenation parquet partition

在以下位置放置后,如何在HIVE中连接小的拼花地板文件。

  • 在HIVE表上动态创建分区。
  • 表是EXTERNAL。

解决方案到目前为止,已尝试过但存在错误的ORC文件: 对于ORC文件,我在循环中使用以下命令获取所有分区值,并且工作正常。但是,连接后数据会丢失,这是HIVE中的错误 https://issues.apache.org/jira/browse/HIVE-17280

我正在使用配置单元2.3.3的EMR集群上运行HIVE查询,直到配置单元3.0.0才解决此问题

命令用于完成此操作,但使用ORC文件。我需要对镶木地板文件进行此操作。

ALTER TABLE HIVE_DB.HIVE_TABLE_NM PARTITION(partition_field_nm ='${partition_value}') CONCATENATE;

这用于ORC文件。

需要将小型实木复合地板文件转换成较大的文件。

2 个答案:

答案 0 :(得分:1)

据我所知,目前无法通过Hive合并实木复合地板文件。另外,不建议使用“ parquet-tools merge”,因为它可能会导致数据/架构出现问题。

但是,这可以在Impala的帮助下实现。

如果要按分区合并表中的文件,则可以创建一个仅包含现有表中分区数据的新表,并在HDFS中添加更多文件,然后从中删除分区。步骤如下,

例如,

CREATE TABLE tabA LIKE tabB;

INSERT INTO tabB SELECT * FROM tabA WHERE partition_key=1;

ALTER TABLE tabA DROP PARTITION (partition_key=1);

INSERT INTO tabA PARTITION(partition_key=1) select * from tabB;

DROP TABLE tabB; 

在哪里, tabA-HDFS中包含更多实木复合地板文件的原始表, tabB-中间表,用于合并tabA的实木复合地板文件

答案 1 :(得分:0)

对于由于频繁添加小数据而变得碎片化的表,我每周安排一次类似的工作。

CREATE TABLE tabB LIKE tabA;
INSERT INTO tabB PARTITION (colX = tabA.colX) SELECT col1, col2, colX FROM tabA;
ALTER TABLE tabA RENAME TO tabA_tmp;
ALTER TABLE tabB RENAME TO tabA;
DROP TABLE tabA_tmp;

请注意,当您对碎片整理脚本建立信心时,tabA_tmp 操作可以替换为单个 DROP TABLE tabA