Hive'alter table concatenate'是如何工作的?

时间:2017-01-24 05:53:54

标签: hadoop hive hiveql orc

我有n(large)个小型orc文件,我想将它们合并到k(small)个大型orc文件中。

这是使用alter table table_name concatenate命令完成的在Hive中。

我想了解Hive是如何实现这一点的。 如果需要,我希望使用Spark实现这一点。

任何指针都会很棒。

2 个答案:

答案 0 :(得分:1)

根据AlterTable/PartitionConcatenate

如果表或分区包含许多小RCFiles或ORC文件,则上述命令会将它们合并为更大的文件。在RCFile的情况下,合并发生在块级别,而对于ORC文件,合并发生在条带级别,从而避免了解压缩和解码数据的开销。

另外ORC Stripes

ORC文件的主体由一系列条纹组成。条纹是 大(通常约200MB)并且彼此独立且经常 由不同的任务处理。柱状的定义特征 存储格式是每列的数据分开存储 并且从文件中读取数据应该与...成比例 读取的列数。 在ORC文件中,每列存储在多个存储的流中 在文件中彼此相邻。例如,整数列是 表示为两个流PRESENT,它使用一个每比特一个 如果值为非空值,则记录值;以及记录该值的DATA 非空值。如果条带中的所有列值都为非null, 条带中省略了PRESENT流。对于二进制数据,ORC 使用三个流PRESENT,DATA和LENGTH,它们存储长度 每个值。每种类型的详细信息将在 以下小节。

要在Spark中实现,您可以在Spark Context:

的帮助下使用SparkSQL
scala> val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)

scala> sqlContext.sql("Your_hive_query_here")

答案 1 :(得分:0)

请注意 SparkSQL 有许多 Hive SQL commands which are not supported

ALTER TABLE <tableIdentifier> [partitionSpec] CONCATENATE 在该列表中,并且从 Spark 1、2 到 3。它可能会继续不受 Spark 支持,直到 Hadoop 生态系统以 Spark 作为其默认引擎发布 Hive 的那一天,并且即便如此,这也可能会被弃用。