Hive 如何"更改表<表名称>连接"?



我有n(large)数量的小型orc文件,我想将其合并为k(small)数量的大型orc文件。

这是使用配置单元中的alter table table_name concatenate命令完成的。

我想了解Hive是如何实现这一点的。我希望使用Spark实现这一点,如果需要,可以进行任何更改。

任何指针都会很棒。

根据AlterTable/PartitionConcatenate:

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

还有ORC条纹:

ORC文件的主体由一系列条纹组成。条纹是大(通常约200MB)并且彼此独立,并且经常由不同的任务处理。柱状的定义特征存储格式是将每列的数据分别存储并且从文件中读取数据应该与读取的列数。在ORC文件中,每一列都存储在存储的几个流中在文件中彼此相邻。例如,整数列为表示为两个流PRESENT,其中使用一个流值记录(如果值为非null),以及DATA,记录非空值。如果条带中的所有列的值都是非空的,从条带中省略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")

请注意,SparkSQL有许多不受支持的配置单元SQL命令。

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

最新更新