在执行查询时,hive如何知道数据文件是如何压缩的

ff29svar  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(477)

我创建了一个配置单元表 create table t(name string, age int) stored as parquet . 然后我插入一些数据,一些使用gzip压缩,一些使用snappy压缩,也就是说,在相应的hdfs目录中有gzip文件和snappy文件。当我进行查询时,我看到 gzip 以及 snappy 我的问题是,在处理文件时,hive如何检测使用了哪个压缩编解码器?

bfrts1fy

bfrts1fy1#

hive检测它的方式与您描述表的方式相同:
描述[扩展|格式化]表格|名称(详细信息https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl)
上面的命令将显示所有的表属性,不管它是压缩的还是使用的压缩类型,以及与配置单元表相关的其他属性。
因此,在读取查询时,“hql引擎”首先读取表的元数据,因为配置单元遵循“读取时模式”现象(更多详细信息)http://www.centurylink.com/business/enterprise/blog/thinkgig/data-lakes-schema-on-read-vs-schema-on-write/)

wfypjpf4

wfypjpf42#

在配置单元中创建表时,我们定义以下字段。
行格式serde
以文件格式存储
位置hdfs\U路径
文件格式列位置和分隔符。。
查看表定义。增加了压缩/解压

5jdjgkvh

5jdjgkvh3#

仅仅检查元数据并获取压缩信息是不够的。您可以很容易地在一个表目录中混合压缩和未压缩的文件,它将工作。所以压缩编解码器是为文件本身中的每个文件定义的。
关于编解码器的信息写在文件的哪个部分?
这取决于文件类型。
表元数据包含有关文件类型的信息(可以指定为 STORED AS ... 在表ddl中)
因此,首先,hive读取元数据以获取文件类型。
根据文件类型(文本、orc、Parquet等),编解码器信息存储在文件的页眉或页脚中。
每个文件类型都有相应的读取器。读者知道如何读取编解码器信息。例如,orc读取器读取文件的最后16k字节,希望它同时包含页脚和postscript部分。orc中的postscript部分包含编解码器信息。
文本文件在标题中包含编解码器信息,等等。。。因此,简单的回答是:相应的文件读取器知道从何处获取有关压缩编解码器的信息。

相关问题