在以下位置放置后,如何在HIVE中连接小的拼花地板文件。
解决方案到目前为止,已尝试过但存在错误的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文件。
需要将小型实木复合地板文件转换成较大的文件。
答案 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
。