Hive 如何在配置单元中连接小拼花文件

Hive 如何在配置单元中连接小拼花文件,hive,concatenation,parquet,partition,Hive,Concatenation,Parquet,Partition,当下面的文件就位时,如何在蜂巢中连接小拼花文件 分区是在配置单元表上动态创建的 表是外部的 到目前为止,已尝试解决方案,但用于存在错误的ORC文件: 对于ORC文件,我在循环中对所有分区值使用了下面的命令,它运行良好。但数据在连接完成后丢失,这是配置单元中的错误 我正在使用Hive2.3.3的EMR集群上运行HiveQuery,直到Hive3.0.0才修复 用于实现此目的的命令,但使用ORC文件。我需要这样做的拼花文件 ALTER TABLE HIVE_DB.HIVE_TABLE_NM P

当下面的文件就位时,如何在蜂巢中连接小拼花文件

  • 分区是在配置单元表上动态创建的
  • 表是外部的
到目前为止,已尝试解决方案,但用于存在错误的ORC文件: 对于ORC文件,我在循环中对所有分区值使用了下面的命令,它运行良好。但数据在连接完成后丢失,这是配置单元中的错误

我正在使用Hive2.3.3的EMR集群上运行HiveQuery,直到Hive3.0.0才修复

用于实现此目的的命令,但使用ORC文件。我需要这样做的拼花文件

ALTER TABLE HIVE_DB.HIVE_TABLE_NM PARTITION(partition_field_nm ='${partition_value}') CONCATENATE;
这用于ORC文件


需要将小拼花文件连接成更大的文件。

据我所知,目前无法通过配置单元合并拼花文件。此外,不建议使用“拼花工具合并”,因为它可能会导致数据/模式出现问题

然而,这可以在黑斑羚的帮助下实现

如果要按分区合并表中的文件,则可以创建一个新表,其中只包含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拼花文件的中间表

我每周安排一次类似的内容,用于由于频繁添加小数据而变得支离破碎的表

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
代替。

尝试按此处描述的解决方案合并和分发:作为解决方案提供的链接主要说明作业是否在基于MAP-R和ORC文件上运行。我正在寻找连接分区中存在的小拼花文件。在我的例子中,执行引擎是TEZ。也描述了TEZ的解决方案。使用这些设置进行插入覆盖选择,它应该可以工作。感谢您在这方面的帮助。我曾考虑使用拼花工具合并,但不会继续进行,因为有缺点。我将了解如何在动态分区中使用第二种合并方式。