linkis 结果集

linkis 结果集,第1张

linkis 结果集 一.简介

linkis面临将多种类型的数据存储到文件里面的需求,如:将Hive表数据存储到文件,并希望能保存字段的类型、列名和comment等元数据信息。

二.Storage存储多种文件系统

三.结果集-Parquet 3.1 Parquet 组成

Parquet仅仅是一种存储格式,它是语言、平台无关的,并且不需要和任何一种数据处理框架绑定,目前能够和Parquet适配的组件包括下面这些,可以看出基本上通常使用的查询引擎和计算框架都已适配,并且可以很方便的将其它序列化工具生成的数据转换成Parquet格式。

查询引擎: Hive, Impala, Pig, Presto, Drill, Tajo, HAWQ, IBM Big SQL计算框架: MapReduce, Spark, Cascading, Crunch, Scalding, Kite数据模型: Avro, Thrift, Protocol Buffers, POJOs

每一个数据模型的schema包含多个字段,每一个字段又可以包含多个字段,每一个字段有三个属性:重复数、数据类型和字段名,重复数可以是以下三种:required(出现1次),repeated(出现0次或多次),optional(出现0次或1次)。每一个字段的数据类型可以分成两种:group(复杂类型)和primitive(基本类型)。

数据类型
INT64, INT32, BOOLEAN, BINARY, FLOAT, DOUBLE, INT96, FIXED_LEN_BYTE_ARRAY

3.2 Parquet 设计

3.3 Parquet 实现

使用R表示repeated level,D表示definition level。repeated level:为了支持repeated类型的节点,在写入的时候该值等于它和前面的值在哪一层节点是不共享的。definition level的值仅仅对于空值是有效的,表示在该值的路径上第几层开始是未定义的,对于非空的值它是没有意义的,因为非空值在叶子节点是定义的,所有的父节点也肯定是定义的,因此它总是等于该列最大的definition levels。 四.结果集-ORC 4.1 ORC组成

和Parquet不同,ORC原生是不支持嵌套数据格式的,而是通过对复杂数据类型特殊处理的方式实现嵌套格式的支持。

CREATE TABLE `orcStructTable`(
  `name` string,
  `course` struct,
  `score` map,
  `work_locations` array)

和Parquet类似,ORC文件也是以二进制方式存储的,所以是不可以直接读取,ORC文件也是自解析的,它包含许多的元数据,这些元数据都是同构ProtoBuffer进行序列化的。

ORC文件:保存在文件系统上的普通二进制文件,一个ORC文件中可以包含多个stripe,每一个stripe包含多条记录,这些记录按照列进行独立存储,对应到Parquet中的row group的概念。文件级元数据:包括文件的描述信息Postscript、文件meta信息(包括整个文件的统计信息)、所有stripe的信息和文件schema信息。stripe:一组行形成一个stripe,每次读取文件是以行组为单位的,一般为HDFS的块大小,保存了每一列的索引和数据。stripe元数据:保存stripe的位置、每一个列的在该stripe的统计信息以及所有的stream类型和位置。row group:索引的最小单位,一个stripe中包含多个row group,默认为10000个值组成。stream:一个stream表示文件中一段有效的数据,包括索引和数据两类。索引stream保存每一个row group的位置和统计信息,数据stream包括多种类型的数据,具体需要哪几种是由该列类型和编码方式决定。 五.比较

hive

ORC 宽表数据比parquet数据性能好。ORC文件存储格式无论是在空间存储、导数据速度还是查询速度上表现的都较好一些,并且ORC可以一定程度上支持ACID *** 作,社区的发展目前也是Hive中比较提倡使用的一种列式存储格式。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5705978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存