Hive如何知道在进行查询时如何压缩数据文件

时间:2016-11-11 07:45:30

标签: hadoop hive

我创建了一个hive表,其中create table t(name string,age int)存储为镶木地板。 然后我插入一些数据,一些使用gzip压缩,一些使用snappy压缩。也就是说,相应的HDFS目录中有gzip文件和snappy文件。 当我进行查询时,我看到gzip和snappy中的数据都被查询了,我的问题是Hive如何检测处理文件时使用的压缩编解码器?

3 个答案:

答案 0 :(得分:2)

仅仅检查元数据并获取压缩信息是不够的。您可以轻松地将压缩文件和未压缩文件混合在一个表目录中,它将起作用。因此,为文件本身中的每个文件定义了压缩编解码器。

文件的哪一部分是关于编解码器的信息写的?

取决于文件类型。

表元数据包含有关文件类型的信息(可以在表DDL中指定为STORED AS ...

因此,首先Hive读取元数据以获取文件类型。

根据文件类型(文本,orc,镶木地板等),编解码器信息存储在文件页眉或页脚中。

每种文件类型都有相应的阅读器。 读者知道如何阅读编解码器信息。例如the ORC reader reads the last 16k bytes of the file with the hope that it will contain both the Footer and Postscript sections。 ORC中的PostScript部分包含编解码器信息。

文本文件在标题中包含编解码器信息,依此类推...... 因此,简短的回答是:相应的文件阅读器知道从何处获取有关压缩编解码器的信息。

答案 1 :(得分:0)

Hive以与描述表格相同的方式检测到它:

DESCRIBE [EXTENDED | FORMATTED] table_name(详情https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL

上面的命令将显示所有表属性,无论它是压缩的还是正在使用的压缩类型以及与您的hive表相关的大量其他属性。

所以在阅读你的查询" HQL引擎"首先读取表格的元数据,因为HIVE遵循关于读取现象的模式(更多细节http://www.centurylink.com/business/enterprise/blog/thinkgig/data-lakes-schema-on-read-vs-schema-on-write/

答案 2 :(得分:0)

在hive中创建表时,我们定义以下字段。

行格式SERDE

STORED AS file_format

LOCATION hdfs_path

File_format

列位置和分隔符..

查看表格定义。

compression / decompression