pg_lakehouse 与 datafusion

news2024/10/5 19:17:28

原理分析

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 实现和外部数据源的能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1711828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

就业班 第三阶段(ELK) 2401--5.22 day3 filebeat+elk云部署

kafka集群 Windterm同步输入,多台机子可以同时输入同步输入 启动kafka需要启动两个 第一个 [rootkafka1 ~]# cd /usr/local/kafka_2.11-2.0.0/ [rootkafka1 ~]# nohup bin/zookeeper-server-start.sh config/zookeeper.properties &第二个 [rootkafka1 ~]#…

一种基于单片机的智能饮水机设计

随着人们生活水平的提高,对美好生活质量的追求也越来越高。饮 水机是人们日常生活不可或缺的,实现饮水机的智能化控制不但方便, 而且更加安全。本文提出一种基于单片机的智能饮水控制系统,通过传 感器实现对水温的监测&#xff0c…

命令注入攻击及其防范措施

命令注入攻击及其防范措施 命令注入攻击是一种通过有漏洞的应用程序在主机操作系统上执行任意命令的攻击。 当应用程序将不安全的用户输入数据(如表单、cookie、HTTP 标头等)传递给系统命令执行时,可能会发生命令注入攻击。 命令注入攻击的…

《PNAS》和《Nature Communications》仿章鱼和蜗牛的粘液真空吸附,赋予了机器人吸盘新的“超能力”

想象一下,如果机器人能够像章鱼一样牢牢吸附在粗糙崎岖的岩石上,或者像蜗牛那样在墙面上悠然负重爬行,那会是多么神奇的一幕!近日,布里斯托大学机器人实验室的Jonathan Rossiter教授课题组就为我们带来了这样的“超能力…

什么是抗压能力?如何判断自己的抗压能力?

什么是抗压能力? 抗压能力,也叫心理承受能力,指的是面对外界的压力,逆境,困境和挑战,能够有效的调整自己的心态,有效的应对和解决问题的能力。 抗压能力涉及多个方面,比如&#xf…

C语言.顺序表.通讯录

基于顺序表示实现通讯录 1.通讯录项目的功能要求2.代码实现3.头文件处理4.通讯录的具体实现4.1通讯录的初始化与销毁4.1.1通讯录的初始化4.1.2通讯录的初始化销毁 4.2通讯录的添加与删除数据4.2.1通讯录的添加数据4.2.1通讯录的删除数据 4.3通讯录的修改4.4通讯录的查找4.5通讯…

C语言-02_变量与进制

文章目录 1.关键字2.标识符3.变量3.1 变量的声明与赋值3.2 变量的作用域3.3 变量按类型的分类 4.基本数据类型4.1 整数类型4.1.1 类型说明4.1.2 举例4.1.3 后缀4.1.4 整型的极限值 4.2 浮点类型4.2.1 类型说明4.2.2 举例 4.3 字符类型4.4 布尔类型 5.变量间的运算规则5.1 隐式类…

Linux 防火墙 firewalld 常用命令

1 防火墙 - firewalld 1.1 开启防火墙 # 临时性开启,服务器重启后会恢复为原来的状态 systemctl start firewalld # 永久性开启(即开机启动),重启服务器后生效 systemctl enable firewalld1.2 关闭防火墙 # 临时性关闭&#xf…

学习Uni-app开发小程序Day20

今天学习了:页面的渐变背景、使用deep修改子组件样式、全屏页面absolute定位布局和fit-content内容宽度、遮罩层状态转换及日期格式化、uni-popup弹窗层制作弹出信息 页面的渐变背景 需要设置页面背景,使用的是多个页面,这样就可以把背景做…

深度学习之CNN卷积神经网络

一.卷积神经网络 1. 导入资源包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import sklearn import tensorflow as tf from tensorflow import keras注:from tensorflow import keras:从TensorFlow库中导入Keras模块&am…

关于Linux软链你必须知道的实用知识点(非常详细)零基础入门到精通,收藏这一篇就够了

背景 Linux中的软链,是非常强大的工具,如果只是一知半解,在解决问题时一定会让你栽跟头或者浪费大量的时间。非常有必要提前掌握Linux软链的几个实用的知识点。 分析 软链是什么? 在Linux中,软链接(sym…

Echarts 实现线条绘制

文章目录 需求分析 需求 用 Echarts 实现如下效果 分析

PS Adobe Photoshop 2024 for Mac[破]图像处理软件[解]PS 2024安装教程[版]

Adobe Photoshop 2024 for Mac[破]图像处理软件[解]PS 2024安装教程[版] 原文地址:https://blog.csdn.net/weixin_48311847/article/details/139248839

mysql去除重复数据

需求描述 doc表有很多重复的title,想去除掉重复的记录 表结构 CREATE TABLE doc (id INT PRIMARY KEY,title VARCHAR(255),content TEXT );去重SQL -- 创建临时表 CREATE TEMPORARY TABLE temp_doc AS SELECT * FROM doc WHERE 10;-- 插入唯一的记录(每个title最…

【ARM+Codesys案例】基于全志T3+Codesys软PLC的3C点胶边缘控制解决方案:整合了运动控制、视觉、激光测高等技术

视觉精密点胶控制方案 针对直交型机构的平面点涂胶应用,基于CODESYS软件平台开发的一站式PC型控制器解决方案,包含运动控制器硬件和点胶应用软件。方案整合了运动控制、视觉、激光测高等技术,高效精密的控制胶水点涂于产品表面或内部&#x…

使用ETL读取文件数据并快速写入mysql中

本文介绍使用国产的ETL工具ETLCloud平台来读取文件文件中的数据到mysql数据库中,首先需要安装ETLCloud的社区版本,然后在示例应用中创建一个文件读取流程如下: 点击“流程设计”后打开流程图如下 打开文本文件读取节点配置要读取的文件目录和…

【数据结构(邓俊辉)学习笔记】二叉树04——Huffman树

文章目录 0. 概述1. 无前缀冲突编码2. 编码成本3. 带权编码成本4. 编码算法5. 算法实现流程6. 时间复杂度与改进方案 0. 概述 学习Huffman树。 1. 无前缀冲突编码 在加载到信道上之前,信息被转换为二进制形式的过程称作编码(encoding)&…

免费插件集-illustrator插件-Ai插件-文本对象分行

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件,加强illustrator使用人员工作效率,进行文本对象分行。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/87890501&…

python数据处理中的类型检查与转换技巧

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、类型检查的重要性 二、类型检查与转换技巧 1. 识别数据类型不一致 2. 使用astype()方…

CSS学习笔记:rem实现移动端适配的原理——媒体查询

移动端适配 移动端即手机端,也称M端 移动端适配:同一套移动端页面在不同屏幕尺寸的手机上可以实现宽度和高度的自适应,也就是页面中元素的宽度和高度可以根据屏幕尺寸的变化等比缩放 rem配合媒体查询可实现移动端适配 rem单位 媒体查询 …