首页 新闻中心 柏睿一体化流湖仓基于Iceberg的查询优化实践

柏睿一体化流湖仓基于Iceberg的查询优化实践

发布时间:2023-06-20  |  阅读:

导语


本文将介绍柏睿数据基于Iceberg实现一体化流湖仓平台的查询优化实践。主要包括以下内容:

  • 背景

  • 柏睿一体化流湖仓架构及优势特性

  • 柏睿一体化流湖仓湖内查询的优化

  • 未来展望





背景




近年来,随着各行业数字化转型的深入,企业海量数据的实时性分析处理、多模数据智能化处理需求快速增长,以期通过数据驱动实现业务增长、业务创新。


柏睿数据在现有全内存分布式计算引擎RapidsDB的基础上,通过Iceberg打造柏睿一体化流湖仓产品Rapids Lakehouse将数据仓库、数据湖和实时流数据处理集成起来,并基于Iceberg进行湖内查询优化,实现每秒百万级的湖内数据查询性能,助力企业解决海量多模数据实时分析能力不足的问题。




柏睿一体化流湖仓架构及优势特性




Apache Iceberg是一种开放的数据湖表格式,可简单理解为基于计算层和存储层的一个中间层。它将存储和计算解耦,构建了存储格式之上的数据组织方式。在此基础上,Iceberg提供基于快照的读写分离和回溯能力,支持流批统一的写入和读取,支持表schema的拓展和分区演进,并支持ACID,用户彼此之间读写没有影响。


1.png

Apache Iceberg架构图


基于Iceberg的重要特性,柏睿数据构建了一站式多模数据管理与服务平台——柏睿一体化流湖仓。它集成了数据仓库、数据湖和实时流数据处理,支持20+多源异构的大数据流批采集、实时数据处理、统一存储与分析,结合AI/ML技术,提供即时数据洞察,助力企业全面发掘数据价值,提升业务能力和行业领导力。


柏睿一体化流湖仓架构如下。


2_副本.jpg

在数据入湖方面,柏睿一体化流湖仓Transformer 提供实时(Stream)和批量离线(Batch)两种方式入湖,并给用户提供对数据进行加载、转换、整合的能力。


在数据湖内,基于Iceberg 做到存储管理上统一,包括两个方面:


1) 提供格式、位置明确的多模数据支持, 包括HDFS、S3,对象存储在内的多种存储位置和Parque、Avro、Orc等多种存储格式。


2)提供统一的湖内数据管理,包含过期快照删除、小文件合并、数据组织的优化等。


在湖内交互式分析方面,以RapidsDB作为统一的分析处理引擎RapidsDB Iceberg 连接器融合了RapidsDB特有的自下而上(Bottom-up)、数据驱动的推送执行模型(push-based model),并利用即时编译技术进行特殊代码生成(code specializtion) , 使Rapids Lakehouse实现每秒百万级的湖内数据查询速度




柏睿一体化流湖仓湖内查询的优化




基于Iceberg,Rapids Lakehouse 提供了多种湖内数据查询优化策略,以实现极致的湖内数据查询性能。具体可分为RapidsDB Iceberg连接器查询的优化和Iceberg数据治理和组织的优化两大类,用户可以根据不同的数据场景和查询需求进行选择,从而实现更高效的数据管理和查询。



01
RapidsDB Iceberg连接器查询的优化 


1)RapidsDB MPP架构与Iceberg TableScan 的结合


RapidsDB使用MPP架构(大规模并行处理架构),在计算时可以将一个查询任务拆分成多个并行执行的小任务,并分发给MPP集群中的多个节点来执行,从而有效提升任务、算子执行的并行度,提高RapidsDB的查询性能。


而在RapidsDB Iceberg连接器中,我们将MPP架构与Iceberg API中的TableScan结合起来。Iceberg TableScan 即为Iceberg读取一个表之前所生成的执行计划,它通过读取snapshots和其相关联的清单文件形成一个最终的CombinedScanTask集合。每个CombinedScanTask包含所需读取的文件地址,文件读取的开始和结束位置等信息,每个CombinedScanTask都是相对独立的。


RapidsDB Iceberg连接器从Iceberg拿到List<CombinedScanTask>后,将每个CombinedScanTask 对应成RapidsDB内部的小任务,并分发给集群中的多个节点并行执行。这样极大提升了Scan的并行度,提升查询性能。


2) RapidsDB Lambda Flow与Iceberg查询结合


RapidsDB的Lambda Flow利用即时编译技术(JIT Compiler),在查询时将频繁执行的方法进行特殊代码生成,再编译为机器代码,提升执行效率。例如,针对WHERE条件判断、聚合运算等场景,RapidsDB计算引擎实时地将表达式的路径编译为具体代码执行,在原过程中产生的大量不必要的调用和分支跳转则都会被优化掉。


在查询Iceberg表时,针对Iceberg的表结构,RapidsDB Iceberg连接器定制了读取和解析元组的代码。在解析元组的流程中,根据表结构动态生成的代码,无需做数据类型的重复判断,只需按照顺序解析数据。另外,在获取部分列时,实现直接根据对应偏移量提取数据,跳过不需要提取的列,从而降低计算及I/O开销。随着处理的数据量增加,节省的计算及I/O量是惊人的。