【发布时间】:2019-12-25 00:54:19
【问题描述】:
假设我创建了一个 ORC 格式的 hive 表并将 1M 记录插入到表中,这会创建一个具有 17 个条带的文件。最后一个条带未满。
然后我在这个表中插入了另外 100 条记录,新的 100 条记录是追加到最后一个条带还是创建一个新条带?
我曾尝试在 HDFS 集群上对其进行测试,似乎每次我们插入新记录时,都会创建一个新文件(当然,也会创建新的条带)。想知道为什么?
【问题讨论】:
假设我创建了一个 ORC 格式的 hive 表并将 1M 记录插入到表中,这会创建一个具有 17 个条带的文件。最后一个条带未满。
然后我在这个表中插入了另外 100 条记录,新的 100 条记录是追加到最后一个条带还是创建一个新条带?
我曾尝试在 HDFS 集群上对其进行测试,似乎每次我们插入新记录时,都会创建一个新文件(当然,也会创建新的条带)。想知道为什么?
【问题讨论】:
原因可能是 HDFS 不支持编辑文件。
所以when we insert data 会一直在 Hive 表中创建新文件。
如果你想merge这些文件,你可以使用concatenate
Alter table <table_name> CONCATENATE;
(或)
您可以插入覆盖您选择的同一个表以将所有小文件合并到大文件中。
insert overwrite <db_table>.<table1> select * from <db_table>.<table1>
您还可以使用sort by distribute by 来控制在HDFS 目录中创建的文件数。
【讨论】: