前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Presto CBO统计元数据

Presto CBO统计元数据

原创
作者头像
Yiwenwu
修改2024-05-12 16:42:22
1910
修改2024-05-12 16:42:22
举报
文章被收录于专栏:大数据&分布式大数据&分布式

背景

Presto:2012年秋季Facebook内部开始研发,2013年正式对外开源。Presto是Facebook用于补充和替代Hive的产品,主要用于实时场景的交互式数据分析。相比于Hive的SQL on Hadoop,Presto不与Hadoop(MapReduce计算/HDFS存储)的框架模型绑定,其设计目标是SQL on Everything

Presto是典型Master-Slave架构:主要由Coordinator和Worker两个进程组件构建。客户端将SQL提交到Coordinator(协调器),Coordinator进行SQL语法检查、语义分析以及并行查询计划生成(拆分Stages),Scheduler(调度器)将查询计划分配到保存表数据的各个Worker(工作进程),并调度及监督SQL语句的执行过程。

整体架构
整体架构

统计信息

TableStatistics 统计信息,参考:com.facebook.presto.spi.statistics.TableStatistics

字段

字段名称

rowCount

行数量

totalSize

数据文件大小

columnStatistics

字段统计信息,Map<String,ColumnStatistics>

ColumnStatistics 字段统计信息

字段

字段名称

nullsFraction

null字段值的比例

distinctValuesCount

不同字段值的个数统计

dataSize

字段读取的数据文件大小

range

字段的区间范围:最大值和最小值

Presto基于ConnectorMetadata#getTableStatistics获取元数据信息,目前仅Hive Connector、Iceberg Connector支持获取元数据的统计信息,统计信息用于树节点Visitor遍历时进行CBO优化。

  • Hive统计元数据:调用HiveStatisticsProvider#getTableStatistics方法,底层调用对应Metastore Client RPC接口,包括 getTableStatistics、getPartitionStatistics;
  • Iceberg统计元数据:基于TableScan#planFiles 列出元数据文件,对元数据文件遍历操作,获取统计信息。

ANALYZE执行

代码语言:sql
复制
ANALYZE table_name [ WITH ( property_name = expression [, ...] ) ]

统计元数据执行:调用LogicalPlanner#createAnalyzePlan,执行StatisticsAggregationPlanner#createStatisticsAggregation,基于Presto?Operator算子实现,扩展StatisticsWriterOperator算子执行元数据统计,通过StatisticsWriterOperator#getComputedStatistics计算统计元数据,统计操作对应逻辑算子StatisticsWriterNode

  • 表统计信息:调用RowExpression执行countFunction 统计表记录数,并基于AggregationNode.Aggregation汇总;
  • 字段统计信息:分别调用ColumnStatisticsAggregation 执行聚合操作;

统计元数据获取:Presto基于ConnectorMetadata#getTableStatistics获取元数据信息,目前仅Hive Connector、Iceberg Connector支持获取元数据的统计信息,统计信息用于树节点Visitor遍历的CBO优化:

  • Hive统计元数据:调用HiveStatisticsProvider#getTableStatistics方法,底层调用对应Metastore Client RPC接口,包括 getTableStatistics、getPartitionStatistics;
  • Iceberg统计元数据:基于TableScan#planFiles 列出元数据文件,对元数据文件遍历操作,获取统计信息;

统计元数据更新:MetadataManager#finishStatisticsCollection 控制元数据统计更新操作,仅Hive Connector实现元数据统计执行,调用HiveMetadata#finishStatisticsCollection实现。底层调用Hive Metastore RPC接口:updateTableStatistics、updatePartitionStatistics。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 统计信息
  • ANALYZE执行
相关产品与服务
大数据处理套件 TBDS
腾讯大数据处理套件(Tencent Big Data Suite,TBDS)依托腾讯多年海量数据处理经验,基于云原生技术和泛 Hadoop 生态开源技术提供的可靠、安全、易用的大数据处理平台。 TBDS可在公有云、私有云、非云化环境,根据不同数据处理需求组合合适的存算分析组件,包括 Hive、Spark、HBase、Flink、Presto、Iceberg、Elasticsearch、StarRocks 等,以快速构建企业级数据湖仓。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档


http://www.vxiaotou.com