Hive “alter table <表名称> 连接”如何工作?

Aaq*_*aja 5 hadoop hive hiveql orc

我有n(large)一些小尺寸的 orc 文件,我想将它们合并到k(small)一些大的 orc 文件中。

这是使用alter table table_name concatenateHive 中的命令完成的。

我想了解 Hive 是如何实现这一点的。我希望使用 Spark 来实现此功能,并根据需要进行任何更改。

任何指点都会很棒。

Rij*_*jul 3

根据AlterTable/PartitionConcatenate

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

还有兽人条纹

ORC 文件的主体由一系列条纹组成。条带很大(通常约为 200MB)并且彼此独立,并且通常由不同的任务处理。列式存储格式的定义特征是每列的数据单独存储,并且从文件中读取数据应与读取的列数成正比。在 ORC 文件中,每一列都存储在多个流中,这些流在文件中彼此相邻存储。例如,整数列表示为两个流:PRESENT(如果值非空)和 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")
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,即使在 HiveContext 中,Spark SQL 也不支持“ALTER TABLE <table-spec> <partition-spec> CONCATENATE;”Hive SQL 命令。 (3认同)