orc与parquet格式的选择

对于orc与parquet这两种列式存储格式,网上能找到大量的介绍以及对比,此处简单总结一下:

orc VS parquet:
orc存储压缩率比parquet要高;
一般来说,orc读取效率比parquet要高;
parquet支持嵌套数据格式,orc原生不支持嵌套数据类型(但可通过复杂数据类型如map<k,v>间接实现,此处情况即对应第二条中的“特例”,影响性能);
parquet支持字段扩展,orc原生不支持字段扩展(但可手动重写读取方法实现,此处也对应第二条中的“特例”);
应用场景:
原始数据层:数据量大,统一通用化模型结构(无须嵌套数据格式,以一个String类型或map<string, string>的扩展字段进行存储业务新增字段,程序读取时自行解析),读取方式多为中间数据处理程序;——  orc
数据应用层:数据模型直接关联到业务场景逻辑,需要字段可扩展性,需要嵌套数据结构(尽量以扁平式数据结构设计模型,少使用嵌套数据结构,可以更好的利用列式存储性能),数据量较小或不考虑数据量存储问题(已经是具体业务场景,相比原始数据,数据量应该是很小的,设计时保证“高内聚低耦合”)。—— parquet
总结:
使用扁平式数据结构设计模型(表),尽量避免嵌套数据结构,可以更好的利用列式存储性能;模型设计适用于退化维度,牺牲空间设计全维度的模型来提高数据查询效率(无须再进行join关联维度表)。
*注:orc格式数据读取时,兼容历史数据字段(原生不支持字段扩展性),可先读取数据,转为json,再合并数据,即可实现数据字段的兼容;

当hive加载orc格式数据源时:

ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
此时自定义读取方法(兼容字段扩展性)OrcInputFormatNew()方法,提交jar至集群,add jar 至class path,注册udf函数。(未实践)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值