我有n(large)
个小型orc文件,我想将它们合并到k(small)
个大型orc文件中。
这是使用alter table table_name concatenate
命令完成的在Hive中。
我想了解Hive是如何实现这一点的。 如果需要,我希望使用Spark实现这一点。
任何指针都会很棒。
答案 0 :(得分:1)
根据AlterTable/PartitionConcatenate:
如果表或分区包含许多小RCFiles或ORC文件,则上述命令会将它们合并为更大的文件。在RCFile的情况下,合并发生在块级别,而对于ORC文件,合并发生在条带级别,从而避免了解压缩和解码数据的开销。
另外ORC Stripes:
ORC文件的主体由一系列条纹组成。条纹是 大(通常约200MB)并且彼此独立且经常 由不同的任务处理。柱状的定义特征 存储格式是每列的数据分开存储 并且从文件中读取数据应该与...成比例 读取的列数。 在ORC文件中,每列存储在多个存储的流中 在文件中彼此相邻。例如,整数列是 表示为两个流PRESENT,它使用一个每比特一个 如果值为非空值,则记录值;以及记录该值的DATA 非空值。如果条带中的所有列值都为非null, 条带中省略了PRESENT流。对于二进制数据,ORC 使用三个流PRESENT,DATA和LENGTH,它们存储长度 每个值。每种类型的详细信息将在 以下小节。
要在Spark中实现,您可以在Spark Context:
的帮助下使用SparkSQLscala> 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 的那一天,并且即便如此,这也可能会被弃用。