本篇内容主要讲解“什么是Parquet列存储模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是Parquet列存储模式”吧!
简介
Apache Parquet 是一种能够有效存储嵌套数据的列存储格式。(列式存储格式在文件大小和查询性能上表现优秀) Parquet 的突出贡献在于能够以真正的列式存储格式来保存具有深度嵌套结构的数据。 参考博客-简书
数据模型
类型 | 描述 |
---|
boolean | 二进制值 |
int32 | 32位有符号整数 |
int64 | 64位有符号整数 |
int96 | 96位有符号整数 |
float | (32位)IEEE754单精度浮点数 |
double | (64位)IEEE754单精度浮点数 |
binary | 8位无符号字节序列 |
fixed_len_byte_array | 固定数量的8位无符号字节 |
一个简单的Parquet模式:
message WeatherRecord{
required int32 year;
required int32 temperature;
required binary stationId (UTF-8);
}
parquet 的原子类型不包括字符串类型。required binary stationId (UTF-8); 表示字符串
<table> <tr> <th>逻辑类型注解</th> <th>描述</th> <th>模式示例</th> </tr> <tr> <td>UTF-8</td> <td> 由UTF-8字符组成的字符串,可用于<br/> 注解binary </td> <td> message m { <br/> required binary a (UTF-8);<br/> } </td> </tr> <tr> <td>ENUM</td> <td>命名值的集合,可用于binary</td> <td> message m { <br/> required binary a (ENUM);<br/> } </td> </tr> <tr> <td>DECIMAL<br/> (precision,scale)</td> <td> 任意精度的有符号小数,可用于注解<br/> int32、int64、binary或fixed_len_byte_array </td> <td> message m { <br/> required int32 a (DECIMAL(5,2));<br/> } </td> </tr> <tr> <td>DATE</td> <td> 不带时间的日期值,可用于注解int32.<br/> 用Unix元年(1970年1月1日)以来的天<br/>数表示 </td> <td> message m { <br/> required int32 a (DATE);<br/> } </td> </tr> <tr> <td>LIST</td> <td>一组有序的值,可用于注解group</td> <td> message m { <br/> required group a (LIST){</br> required group list{<br/> required int32 element;</br> } } } </td> </tr> <tr> <td>MAP</td> <td> 一组无序的键-值对,可用于注解group </td> <td> message m { <br/> required group a (MAP){</br> required group key_value{<br/> required binary key (UTF-8);</br> optional int32 value;<br/> } } } </td> </tr> </table>
Parquet文件格式
Paruet文件由一个文件头,一个或多个紧随其后的文件块,以及一个用于结尾的文件尾构成。文件头中仅包含一个称为PAR1的4个字节数字,它用来识别整个Parquet文件格式。文件的所有元数据都被保存在文件尾中。
Parquet的配置
在设置文件块的大小时需要折中考虑扫描率与内存的使用。较大的文件块包含较多的行,因此扫描效率更高。同时也可以提高顺序I/O操作的效率(因为在设置列块时的额外开销比较少)。但是,每个文件块在读/写操作时都需要缓存在内存中,这个限制使得文件块不能太大。默认的文件块为128MB.
到此,相信大家对“什么是Parquet列存储模式”有了更深的了解,不妨来实际操作一番吧!这里是天达云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!