当前位置: 首页 > news >正文

pg_lakehouse 与 datafusion

原理分析

pg_lakehouse 是 ParadeDB 推出的一个开源插件,支持对多种数据湖里的数据做分析计算。它的出现,使得 Postgres 能够像访问本地数据一样轻松访问 S3 等对象存储,轻松访问 Delta Lake 上的表格,具备数据湖分析能力。

pg_lakehouse 的查询计算能力是通过 Apache DataFusion 来支持的。DataFusion 是一个纯计算引擎,它不负责存储,内置了几种数据格式支持,并且可以通过 TableProvider 接口支持更多的数据输入方式[ref]。
DataFusion

从原来上看, pg_lakehouse 提供了一组访问数据湖的方法,并将这些方法和 DataFusion 的计算能力结合起来,帮助 Postgres 获得分析数据湖数据的能力。

也就是说,Postgres 基于 pg_lakehouse 做数据湖分析时,计算能力主要靠 pg_lakehouse 提供,而不是依赖 Postgres 自身的计算引擎。Postgres 的价值在于给用户提供一个一致的操作界面,如 SQL dialect、schema view、生态工具等。

用户访问数据湖的整体交互流程如下:
SQL -(pgsql)-> Postgres --> pg_lakehouse -(FDW, DF understandable SQL Dialect)-> DataFusion

pg_lakehouse 对数据湖的访问,是基于 postgres 外表界面实现的。有几点需要注意:

  • 集成湖的 catalog 不是必须的。Doris 等湖仓一体的数据库为了简化用户使用,会做 Multi External Catalog 集成,自动导入外表 schema。pg_lakehouse 依然要求用户在 Postgres 中创建外表。
  • pg_lakehouse 支持通过 arrow_schema function 来自动获取湖中数据的 schema
  • Postgres 还支持类似这样的语法批量导入外部 schema(但对于 lakehouse 的支持程度如何暂未调研):import foreign schema public from server duckdb into public;

Thinking in MyDB

对于 MyDB 来说,计算引擎部分依然是使用 MyDB 自身的计算引擎,无需依赖第三方(如 DataFusion、Volex)。

MyDB 重点是实现可扩展的数据湖接入策略,降低接入新存储、新格式的成本。我们要区分好 Object Stores、File Format 和 Table Format 三方面的需求,各自做好扩展。

Object Stores:

  • Amazon S3
  • Aliyun OSS
  • Tencent Cloud COS
  • Huawei Cloud OBS
  • S3-compatible object stores (e.g. MinIO)
  • Azure Blob Storage
  • Azure Data Lake Storage Gen2
  • Google Cloud Storage
  • Local file system
  • potentially any service supported by Apache OpenDAL.

File Formats

  • Parquet
  • CSV
  • JSON
  • Avro
  • ORC

Table Formats

  • Delta Lake
  • Apache Iceberg
  • MaxCompute

Schema 的集成,要做一些聪明的事情。External Catalog 固然美好,但增加了对外部系统的依赖,压力大的情况下,外部系统可能先挂。如果能提供一套快速创建、刷新 External Table 的方法,也不失为一种好的解决方案。

参考

组件说明:

ParadeDB is an Elasticsearch alternative built on Postgres. We’re modernizing the features of Elasticsearch’s product suite, starting with real-time search and analytics.

pg_lakehouse is an extension that transforms Postgres into an analytical query engine over object stores like S3 and table formats like Delta Lake. Queries are pushed down to Apache DataFusion, which delivers excellent analytical performance. Combinations of the following object stores, table formats, and file formats are supported.

DataFusion includes several built in data sources for common use cases, and can be extended by implementing the TableProvider trait. A TableProvider provides information for planning and an ExecutionPlans for execution.

DataFusion Motivation
Today, a vast amount of non-operational data — events, metrics, historical snapshots, vendor data, etc. — is ingested into data lakes like S3. Querying this data by moving it into a cloud data warehouse or operating a new query engine is expensive and time consuming. The goal of pg_lakehouse is to enable this data to be queried directly from Postgres. This eliminates the need for new infrastructure, loss of data freshness, data movement, and non-Postgres dialects of other query engines.
.
pg_lakehouse uses the foreign data wrapper (FDW) API to connect to any object store or table format and the executor hook API to push queries to DataFusion. While other FDWs like aws_s3 have existed in the Postgres extension ecosystem, these FDWs suffer from two limitations:
.
Lack of support for most object stores, file, and table formats
Too slow over large datasets to be a viable analytical engine
pg_lakehouse differentiates itself by supporting a wide breadth of stores and formats (thanks to OpenDAL) and by being very fast (thanks to DataFusion).

FDW 工作原理:

在 PostgreSQL 中,外部数据包装器(Foreign Data Wrapper,FDW)允许一个 PostgreSQL 服务器访问外部数据源,如另一个 SQL 或 NoSQL 数据库。FDW 的工作机制基于 SQL/MED ("SQL Management of External Data") 标准,这提供了一个框架来访问和管理存储在不同数据源中的数据。PostgreSQL FDW 如何工作主要包括以下步骤:1. 加载和创建 FDW 扩展:
第一步是在 PostgreSQL 数据库中加载和创建相应的 FDW 扩展。例如,postgres_fdw 用于连接远程 PostgreSQL 服务器,其他 FDW 如 mysql_fdw 用于 MySQL 数据库连接等。2. 定义外部服务器和用户映射:
在 PostgreSQL 中,指定外部数据源的详细信息,比如服务器地址、端口、登录凭证等,并为本地用户创建映射以授权远程数据访问。3. 创建外部表:
定义外部表,这些表代表远程数据源中的表。这个步骤将远程表的模式映射到 PostgreSQL 中,来决定哪些列和数据类型将被访问。4. 查询外部表:
当本地 PostgreSQL 服务器上的用户查询外部表时,查询将被转发到 FDW。SQL 转化过程:
当一个 SQL 查询是对一个外部表的操作时,FDW 会接管这个查询,并进行以下转换过程:解析:FDW 分析本地查询的结构,这通常涉及解析 SQL 语句并理解所请求的目标数据、过滤条件、聚合操作和排序需求。转换:然后,FDW 会把本地 SQL 查询翻译(或重写)成远程数据库系统理解的"方言"。例如,如果远程数据源是 MySQL 数据库,postgres_fdw 会将 PostgreSQL SQL 查询转换为 MySQL 可以理解的 SQL 查询。执行:转换过的查询被发送到远程数据库,由远程数据库执行。结果获取:查询结果从远程数据库返回到 PostgreSQL 服务器,并在必要时进行进一步的处理(例如,如果一些请求在远程数据库上不能完成,如某些类型的JOIN操作,那么这些操作需要在返回结果之后由 PostgreSQL 本身完成)。结果返回:经处理的数据最终返回给客户端。这个过程的某些环节可能依赖特定的 FDW 实现。比如,并非所有的查询条件和聚合操作都可以推送到所有类型的远程数据源进行处理。可能某些操作必须在本地 PostgreSQL 端完成,这取决于 FDW 的功能和远程数据源的限制。FDW 的优势之一是它提供了一种透明的机制来访问外部数据,使得外部数据源的表现形式与本地表非常相似,使开发者能以统一的方式查询和操作数据。然而,性能和功能上的限制要依赖于具体的 FDW 实现和外部数据源的能力。

相关文章:

pg_lakehouse 与 datafusion

原理分析 pg_lakehouse 是 ParadeDB 推出的一个开源插件,支持对多种数据湖里的数据做分析计算。它的出现,使得 Postgres 能够像访问本地数据一样轻松访问 S3 等对象存储,轻松访问 Delta Lake 上的表格,具备数据湖分析能力。 pg_…...

基于51单片机的酒精浓度检测仪的设计

一.硬件方案 硬件部分为利用MQ3气敏传感器测量空气中酒精浓度,并转换为电压信号,经A/D转换器转换成数字信号后传给单片机系统,由单片机及其相应外围电路进行信号的处理,显示酒精浓度值以及超阈值声光报警。电路主要由51单片机最小…...

重生之 SpringBoot3 入门保姆级学习(02、打包部署)

重生之 SpringBoot3 入门保姆级学习(02、打包部署) 1.6 打包插件1.7 测试 jar 包1.8 application.properties 的相关配置 1.6 打包插件 官网链接 https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-starte…...

Java-常用模块

文章目录 日期时间stream流 日期时间 jdk8新的日期时间类 解析和格式化DateTimeFormatter类(线程安全) LocalDateTime类 Instant类 Duration类String time "2013-02-11 11:00:00";DateTimeFormatter dateTimeFormatter DateTimeFormatter.o…...

c++大作业 调整字幕的时间

作业及其需求 有时候人们能够下载一些感兴趣的视频但是发现并没有字幕,到字幕网站上查找到字幕文件,但是发现时间进度上不能完美配合,一个视频数据的例子来源于链接: BBC.巴塔哥尼亚:地球秘密乐园 https://www.aliyundrive.com/s/LmF2sgrQzMu/folder/612af030c6fa4bf4b7c…...

Nmap使用方法

Nmap 介绍 Nmap是一个免费开放的网络扫描和嗅探工具包,也叫网络映射器(Network Mapper)。该工具其基本功能有三个,一是探测一组主机是否在线;其次是扫描主机端口,嗅探所提供的网络服务;三是可…...

任务3.1:采用面向对象方式求三角形面积

面向对象编程(OOP)是一种将现实世界中的实体抽象为对象,并通过类和对象来模拟现实世界中的行为和属性的编程范式。在本实战任务中,我们通过创建一个Triangle类来模拟现实世界中的三角形,并使用面向对象的方法来求解三角…...

解读《互联网政务应用安全管理规定》网络和数据安全中的身份认证和审计合规建设

为保障互联网政务应用安全,由中央网络安全和信息化委员会办公室、中央机构编制委员会办公室、工业和信息化部、公安部制定的《互联网政务应用安全管理规定》近日印发,自2024年7月1日起施行。 规定共8章,包括总则、开办和建设、信息安全、网络…...

HTML-JavaWeb

目录 1.标题排版 2.标题样式 ​编辑 ​编辑 小结 3.超链接 4.正文排版 ​编辑​编辑​编辑5.正文布局 6.表格标签 7.表单标签 8.表单项标签 1.标题排版 ● 图片标签 :< img> src:指定图像的ur1(绝对路径/相对路径) width:图像的宽度(像素/相对于父元素的百…...

数组-检查数组内是否存在和为7的倍数的子序列

一、题目描述 二、解题思路 这里首先要分辨清楚是子序列还是子数组 原数组&#xff1a;[1,2,3,4,5] 子序列&#xff1a;元素和元素之间相对位置保持不变&#xff0c;但是在原数组中不一定连续&#xff0c;如&#xff1a;[1,3,4]&#xff1b; 子数组&#xff1a;元素元素之间保…...

【图像处理与机器视觉】图像处理概述与像素

什么是数字图像处理 改善图像信息&#xff0c;便于作出解释 方便对图像传输&#xff0c;储存&#xff0c;方便机器理解 什么是数字图像 &#xff08;1&#xff09;模拟图像&#xff1a;连续二维函数 f&#xff08;x&#xff0c;y&#xff09;表示&#xff0c;其中 x&#xf…...

虚函数的性能消耗到底在哪?

虚函数的性能消耗 聊到虚函数的性能开销&#xff0c;大家的第一反应肯定是间接调用上&#xff0c;何为间接调用&#xff1f; 当调用一个虚函数时&#xff0c;实际执行的函数版本是在运行时通过虚函数表&#xff08;virtualtable&#xff09;查找确定的。这个查找过程是一个间接…...

Visual Studio 的使用

目录 1. 引言 2. 安装和配置 2.1 系统要求 2.2 安装步骤 2.3 初次配置 3. 界面介绍 3.1 菜单栏和工具栏 3.2 解决方案资源管理器 3.3 编辑器窗口 3.4 输出窗口 3.5 错误列表 3.6 属性窗口 4. 项目管理 4.1 创建新项目 4.2 导入现有项目 4.3 项目属性配置 5. 代…...

Web前端与App前端:深入剖析两者的异同

Web前端与App前端&#xff1a;深入剖析两者的异同 在数字化时代&#xff0c;前端技术已成为连接用户与数字世界的桥梁。然而&#xff0c;当我们谈及前端时&#xff0c;往往会遇到两个相似的概念&#xff1a;Web前端和App前端。这两者是否完全相同&#xff0c;还是各有千秋&…...

初学者必读:Midjourney AI创作工具的简易使用手册!

在数字化时代&#xff0c;AI的应用不断推动着各个领域的发展。在这些领域中&#xff0c;AI在艺术和设计方面的应用引起了广泛的关注。AI绘画软件作为今年的热门&#xff0c;Midjourney 通过其独特的原理和方便的使用方法&#xff0c;为创作者提供了一个全新的创作逼真绘画的平台…...

使用python绘制一个五颜六色的爱心

使用python绘制一个五颜六色的爱心 介绍效果代码 介绍 使用numpy与matplotlib绘制一个七彩爱心&#xff01; 效果 代码 import numpy as np import matplotlib.pyplot as plt# Heart shape function def heart_shape(t):x 16 * np.sin(t)**3y 13 * np.cos(t) - 5 * np.cos…...

关于锂电池短路测试

了解锂电池短路测试 电池短路试验测试标准有哪些&#xff1f;宏展告诉你 - 哔哩哔哩 (bilibili.com) 电池电芯上架亚马逊美国站认证标准和要求UL1642测试 - 知乎 (zhihu.com) CR123A电池的短路试验: CR123A电池为例_锂锰电池所需通过的安全性能测试_纽扣电池_锂锰电池_松下电…...

排序(前篇)

1.排序的概念及其运用 2.插入排序的概念及实现 3.希尔排序的概念及实现 4.选择排序概念及实现 总代码&#xff08;对比各个排序在大量的数据情况排序所化的时间&#xff09;&#xff1a; 1.排序的概念及其运用 1.1排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使…...

Linux学习笔记(二)

一、Linux文件目录 1.命令&#xff1a;tree -L 1 2.挂载命令&#xff08;例如U盘&#xff0c;需要挂载之后才能访问&#xff09;&#xff1a; mount /dev/cdrom /mnt ls /mnt 3.查看登录信息&#xff1a; last / lastlog 4.修改/查看网络信息 vi /etc/sysconfig/netw…...

Git——pull request详细教程

当我们需要协助其他仓库完成更改时&#xff0c;往往会用到git中的Pull Request操作&#xff0c;从而方便团队的协作管理和代码持续集成。 下面是详细的教程步骤。 一. Fork目标项目 比如说我现在要fork以下Qwen-VL的项目&#xff0c;如图所示&#xff1a; 随后点击Create即可…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...