presto parquet文件的schema演进

一.概述

schema演进一般用于表的列变换(如增加/删除/调整列位置)和修改列类型的场景下查询能正常使用。本文主要介绍Presto中是如何支持Parquet文件的Schema演进的。

要在presto中支持schema演进,需要开启parquet_use_column_names。

在presto中,存在着三种shcema:分别是:

表schema:表的schema指的就是create table时候指定的schema结构。

partition schema:partition schema指的是创建分区时候的表schema接口,partition schema创建后不随着表的schema变化而变换。

parquet文件schema:parquet文件本身也有一个schema,在parquet文件内部,按照parquet的标准组织着,不随查询引擎变换而变换。

二. presto支持schema演进的整体方案

      

三. 代码走读

      

  1. 创建table schema到partition schema映射关系:

      HiveSplitManager::getPartitionMetadata

         getTableToPartitionMapping

              getTableToPartitionMappingByColumnNames

                   columnCoercions.put

  2.  使用parition schema读parquet文件:

       ParquetPageSourceFactory ::createPageSource

           trinoTypes.add(column.getBaseType()); //这里的column类型是上边Mapping过后的column,也就是说partition类型

              new ParquetPageSource(..., trinoTypes.build(),...)

new ParquetReader

                 columnReaders[columnIO.getId()] = PrimitiveColumnReader.createReader(column, timeZone); //根据partition类型创建reader

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值