【问题标题】:How does Hive 'alter table <table name> concatenate' work?Hive 'alter table <table name> concatenate' 是如何工作的?
【发布时间】:2017-06-08 19:45:25
【问题描述】:

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

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

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

任何指针都会很棒。

【问题讨论】:

    标签: hadoop hive hiveql orc


    【解决方案1】:

    根据AlterTable/PartitionConcatenate

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

    还有ORC Stripes:

    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")
    

    【讨论】:

    • 仅供参考,即使在 HiveContext 中,Spark SQL 也不支持 ALTER TABLE &lt;table-spec&gt; &lt;partition-spec&gt; CONCATENATE; Hive SQL 命令。
    【解决方案2】:

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

    ALTER TABLE &lt;tableIdentifier&gt; [partitionSpec] CONCATENATE 在该列表中,并且从 Spark 1、2 到 3。它可能会继续不受 Spark 支持,直到 Hadoop 生态系统以 Spark 作为其默认引擎提供 Hive 的那一天,甚至到那时, 这可能会被弃用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多