Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Presto CBO统计元数据

Presto CBO统计元数据

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

背景

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
AI代码解释
复制
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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hive CBO优化剖析
Hive是较早的SQL on Hadoop系统,对大数据SQL执行有广泛和深远的影响。它最初由Facebook开发,后来成为Apache软件基金会的一个开源项目。用户可以通过SQL来读取、写入和管理存储在分布式存储系统中的大规模数据集。
Yiwenwu
2024/04/26
6140
Hive CBO优化剖析
Spark CBO统计元数据
Statistics 统计信息,参考:org.apache.spark.sql.catalyst.plans.logical.Statistics
Yiwenwu
2024/04/27
4131
大数据Presto(一):Presto介绍
Presto是Facebook在2012年开发的,是专为Hadoop打造的一款数据仓库工具。在早期Facebook依赖Hive做数据分析,Hive底层依赖MapReduce,随着数据量越来越大,使用Hive进行数据分析,时间可能需要分钟级到小时级别,不能满足交互式查询的数据分析场景。2012年秋季,Facebook开发Presto,目前该项目在Facebook中运行超过30000个查询,每日处理数据PB以上。Presto的查询速度是Hive的5-10倍。
Lansonli
2022/10/07
2.3K0
大数据Presto(一):Presto介绍
从 0 到 1 学习 Presto,这一篇就够了
Presto 作为现在在企业中流行使用的即席查询框架,已经在不同的领域得到了越来越多的应用。本期内容,我会从一个初学者的角度,带着大家从 0 到 1 学习 Presto,希望大家能够有所收获!
大数据梦想家
2021/10/22
8.5K1
Presto在滴滴的探索与实践
桔妹导读:Presto在滴滴内部发展三年,已经成为滴滴内部Ad-Hoc和Hive SQL加速的首选引擎。目前服务6K+用户,每天读取2PB ~ 3PB HDFS数据,处理30万亿~35万亿条记录,为了承接业务及丰富使用场景,滴滴Presto需要解决稳定性、易用性、性能、成本等诸多问题。我们在3年多的时间里,做了大量优化和二次开发,积攒了非常丰富的经验。本文分享了滴滴对Presto引擎的改进和优化,同时也提供了大量稳定性建设经验。
用户6543014
2020/10/27
1.6K0
Presto在滴滴的探索与实践
Presto系列 | Presto基本介绍
Presto是一款Facebook开源的MPP架构的OLAP查询引擎,可针对不同数据源执行大容量数据集的一款分布式SQL执行引擎。因为工作中接触到Presto,研究它对理解SQL Parser、常见算子的实现(如SQL中table scan,join,aggregation)、资源管理与调度、查询优化(如向量化执行、动态代码生成)、大数据下各个组件为何适用不同场景等等都有帮助。我希望通过这个系列可以了解一条SQL在大数据场景下该如何高效执行。233酱准备不定时持续更新这个系列,本文主要从Presto的使用举例,Presto的应用场景、Presto的基本概念三个部分来初步介绍Presto。
Monica2333
2020/09/24
4.5K0
Presto系列 | Presto基本介绍
Presto原理&调优&面试&实战全面升级版
很久之前,曾经写过一篇 《Presto在大数据领域的实践和探索》 。文中详细讲解了Presto的原理和应用。
王知无-import_bigdata
2021/07/12
2.3K0
Presto原理&调优&面试&实战全面升级版
大数据查询引擎Presto
Presto设计精巧,可以处理海量数据,最大化地利用硬件性能,计算全部在内存中完成,很好的利用高速网络来进行数据调度。性能基本上是Hive的10倍。
凹谷
2020/04/11
1.5K0
Presto 安装与部署
Presto 在访问 Hive 中的数据时需要得到 Hive 中的所有元数据信息,因此需要部署一个 HiveMetaStore 服务提供 Hive 的元数据信息。
smartsi
2020/02/25
3.1K1
Presto实战
Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。
全栈程序员站长
2022/09/20
2.1K0
计算引擎之下、数据存储之上 | 数据湖Iceberg快速入门
目前市面上流行的三大开源数据湖方案分别为:Delta、Iceberg 和 Hudi,但是 Iceberg是一个野心勃勃的项目,因为它具有高度抽象和非常优雅的设计,为成为一个通用的数据湖方案奠定了良好基础。目前 Flink+Iceberg 构建全场景实时数仓已经有了非常良好的实践,本文带大家简单了解下Iceberg。后面五分钟学大数据会有一期专门介绍基于Flink+Iceberg打造T+0实时数仓,本文算是这篇文章的前置铺垫。
五分钟学大数据
2021/07/06
2.1K0
计算引擎之下、数据存储之上 | 数据湖Iceberg快速入门
由浅入深了解Presto技术内幕
Presto是专为大数据实时查询计算而设计开发的产品,拥有如下特点: – 多数据源:通过自定义Connector能支持Mysql,Hive,Kafka等多种数据源 – 支持SQL:完全支持ANSI SQL – 扩展性:支持自定义开发Connector和UDF – 混合计算:可以根据需要将开源于不同数据源的多个Catalog进行混合join计算 – 高性能:10倍于Hive的查询性能 – 流水线:基于Pipeline设计,在数据处理过程当中不用等到所有数据都处理完成后再查看结果
大数据真好玩
2020/06/03
3.5K0
使用presto查询同步到hive的hudi数据
上述配置项为presto-server配置信息,同时将coordinator以及worker都集中在同一台主机。
从大数据到人工智能
2022/01/19
1.2K0
使用presto查询同步到hive的hudi数据
Presto介绍及常用查询优化方法总结
Presto是Facebook开源的MPP(Massive Parallel Processing)SQL引擎,其理念来源于一个叫Volcano的并行数据库,该数据库提出了一个并行执行SQL的模型,它被设计为用来专门进行高速、实时的数据分析。
硬核林川
2021/05/09
2.8K0
Presto介绍及常用查询优化方法总结
Presto 分布式SQL查询引擎及原理分析
Presto是由 Facebook 推出的一个基于Java开发的开源分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。Presto本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。
yuanyi928
2020/05/20
4.9K0
Presto介绍与常用查询优化方法
Hive使用MapReduce作为底层计算框架,是专为批处理设计的。但随着数据越来越多,使用Hive进行一个简单的数据查询可能要花费几分到几小时,显然不能满足交互式查询的需求。
高广超
2018/12/12
3.6K0
Hive优化器原理与源码解析—统计信息Parallelism并行度计算
Parallelism是有关RelNode关系表达式的并行度以及如何将其Opeartor运算符分配给具有独立资源池的进程的元数据。同一个Operator操作符,并行执行和串性执行相比,在成本优化器CBO看来,并行执行的成本更低。
用户7600169
2022/04/25
9570
Hive优化器原理与源码解析—统计信息Parallelism并行度计算
Presto集群部署
  随着大数据的普及,大部分企业的大数据查询与统计渐渐出现瓶颈。虽说存储方面有分布式的HDFS,HBSE,MongoDB等可以应对,但是面对千万级别(1x10^7)界别的数据量查询时,以上组件也不免显得力不从心。正因此,分布式查询引擎应运而生。而基于内存查询的分布式查询引擎--Presto正是其中之一。很多人都说现代计算机技术的发展都是拼开源,拼社区。而Presto的社区也不小,国际化的Facebook,也有国内电商大头京东。正因此,在经过实际尝试与测验之后决定简要地介绍一下presto的部署方式,希望能给有需要的朋友提供一些参考。
云海谷天
2022/08/09
1.4K0
Presto集群部署
即席查询引擎对比:我为什么选择Presto
即席查询AD-HOC :以单独的SQL语句的形式执行的查询就是即席查询,比如说:HUE里面输入SQL语句并获得结果或者使用dbeaver连接hiveserver2自己键入的SQL代码并获取结果,这样的操作就是即席查询。
deephub
2021/09/15
4.1K0
即席查询引擎对比:我为什么选择Presto
大数据实时查询-Presto集群部署搭建
Presto是一个分布式SQL查询引擎, 它被设计为用来专门进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window functions)。Presto的运行模型和Hive或MapReduce有着本质的区别。Hive将查询翻译成多阶段的MapReduce任务, 一个接着一个地运行。 每一个任务从磁盘上读取输入数据并且将中间结果输出到磁盘上。 然而Presto引擎没有使用MapReduce。它使用了一个定制的查询和执行引擎和响应的操作符来支持SQL的语法。除了改进的调度算法之外, 所有的数据处理都是在内存中进行的。 不同的处理端通过网络组成处理的流水线。 这样会避免不必要的磁盘读写和额外的延迟。 这种流水线式的执行模型会在同一时间运行多个数据处理段, 一旦数据可用的时候就会将数据从一个处理段传入到下一个处理段。 这样的方式会大大的减少各种查询的端到端响应时间。
高广超
2018/12/12
3.6K0
相关推荐
Hive CBO优化剖析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档