searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

使用 PostgreSQL 和 duckdb_fdw 实现轻量级 OLAP

2024-07-01 03:26:50
90
0

PostgreSQL 外部数据包装器(FDW)

PostgreSQL FDW 是一种允许 PostgreSQL 访问外部数据源的插件机制。通过 FDW,用户可以在 PostgreSQL 中创建外部表,并对这些表执行 SQL 查询,就像操作本地表一样。FDW 使得跨多个数据源的查询和集成变得简单和高效。

DuckDB 介绍

DuckDB 是一款开源的内存内列存储数据库管理系统,专为分析工作负载设计。它轻量级且嵌入式,能够在本地机器上高效运行。DuckDB 提供了对多种数据格式的支持,其中最引人注目的是对 Parquet 文件的支持。

对parquet 数据文件支持比较完善, 列存储, 支持filter, projection的pushdown. 数据的过滤性能也不错.

国内目前也推出了duckdb_fdw,pg可以通过插件的方式直接外挂duckdb,把ducdb优秀的分析能力,以及性能非常不错的 Parquet reader 

Parquet 格式具有许多适用于分析用例的属性:

  1. 列式表示意味着可以(有效地)读取各个列。无需总是读取整个文件!
  2. 该文件包含每个行组中的每列统计信息(最小值/最大值,以及值的数量NULL)。如果不需要,这些统计信息允许读者跳过行组。
  3. 列压缩显着减小了格式的文件大小,从而降低了数据集的存储需求。这通常可以将大数据转化为中型数据。

DuckDB 的零依赖 Parquet reader 能够直接对 Parquet 文件执行 SQL 查询,无需任何导入或分析步骤。由于 Parquet 的自然列式格式,这非常快!

DuckDB 将以流式方式读取 Parquet 文件,这意味着您可以对不适合常驻内存的大型 Parquet 文件执行查询。

DuckDB 能够自动检测任何给定查询需要哪些列和行。这允许用户分析更大、更复杂的 Parquet 文件,而无需执行手动优化或投入更多硬件。

整体架构如下:

pg -> duckdb_fdw -> oss

把Parquet文件储存到对象储存,可以降低储存成本以及储存无限扩展

环境搭建

-- 需要先从duckdb_fdw 官网下载源码,编译后install到pg扩展库
-- 创建扩展
create extension duckdb_fdw;


-- 创建server
CREATE SERVER duckdb_server
    FOREIGN DATA WRAPPER duckdb_fdw
    OPTIONS (database '/var/lib/postgresql/duckdb/database.duckdb');

-- 连接s3需要先安装httpfs模块
-- INSTALL httpfs;
SELECT duckdb_execute('duckdb_server','INSTALL httpfs;');
-- LOAD httpfs;
SELECT duckdb_execute('duckdb_server','LOAD httpfs;');

-- 配置s3相关信息
SELECT duckdb_execute('duckdb_server','CREATE SECRET (
                  TYPE S3,
                  KEY_ID ''admin'',
                  SECRET ''admin'',
                  REGION ''us-east-1'',
                  ENDPOINT ''119.119.204.194:9000''
              );');

-- 读取s3上的parquet
SELECT * FROM read_parquet('s3a://test/duckdb/new_table.parquet');

 

这里只是做了简单的测试,流程是已经可以实现了

parquet 存在对象储存上,如果是内网网络,parquet文件攒批合理,合理设置分区,利用好数据下推功能,这可以是一个非常轻量化的OLAP型数据库,迷你版greenplum

0条评论
0 / 1000
陈玉君
2文章数
0粉丝数
陈玉君
2 文章 | 0 粉丝
陈玉君
2文章数
0粉丝数
陈玉君
2 文章 | 0 粉丝
原创

使用 PostgreSQL 和 duckdb_fdw 实现轻量级 OLAP

2024-07-01 03:26:50
90
0

PostgreSQL 外部数据包装器(FDW)

PostgreSQL FDW 是一种允许 PostgreSQL 访问外部数据源的插件机制。通过 FDW,用户可以在 PostgreSQL 中创建外部表,并对这些表执行 SQL 查询,就像操作本地表一样。FDW 使得跨多个数据源的查询和集成变得简单和高效。

DuckDB 介绍

DuckDB 是一款开源的内存内列存储数据库管理系统,专为分析工作负载设计。它轻量级且嵌入式,能够在本地机器上高效运行。DuckDB 提供了对多种数据格式的支持,其中最引人注目的是对 Parquet 文件的支持。

对parquet 数据文件支持比较完善, 列存储, 支持filter, projection的pushdown. 数据的过滤性能也不错.

国内目前也推出了duckdb_fdw,pg可以通过插件的方式直接外挂duckdb,把ducdb优秀的分析能力,以及性能非常不错的 Parquet reader 

Parquet 格式具有许多适用于分析用例的属性:

  1. 列式表示意味着可以(有效地)读取各个列。无需总是读取整个文件!
  2. 该文件包含每个行组中的每列统计信息(最小值/最大值,以及值的数量NULL)。如果不需要,这些统计信息允许读者跳过行组。
  3. 列压缩显着减小了格式的文件大小,从而降低了数据集的存储需求。这通常可以将大数据转化为中型数据。

DuckDB 的零依赖 Parquet reader 能够直接对 Parquet 文件执行 SQL 查询,无需任何导入或分析步骤。由于 Parquet 的自然列式格式,这非常快!

DuckDB 将以流式方式读取 Parquet 文件,这意味着您可以对不适合常驻内存的大型 Parquet 文件执行查询。

DuckDB 能够自动检测任何给定查询需要哪些列和行。这允许用户分析更大、更复杂的 Parquet 文件,而无需执行手动优化或投入更多硬件。

整体架构如下:

pg -> duckdb_fdw -> oss

把Parquet文件储存到对象储存,可以降低储存成本以及储存无限扩展

环境搭建

-- 需要先从duckdb_fdw 官网下载源码,编译后install到pg扩展库
-- 创建扩展
create extension duckdb_fdw;


-- 创建server
CREATE SERVER duckdb_server
    FOREIGN DATA WRAPPER duckdb_fdw
    OPTIONS (database '/var/lib/postgresql/duckdb/database.duckdb');

-- 连接s3需要先安装httpfs模块
-- INSTALL httpfs;
SELECT duckdb_execute('duckdb_server','INSTALL httpfs;');
-- LOAD httpfs;
SELECT duckdb_execute('duckdb_server','LOAD httpfs;');

-- 配置s3相关信息
SELECT duckdb_execute('duckdb_server','CREATE SECRET (
                  TYPE S3,
                  KEY_ID ''admin'',
                  SECRET ''admin'',
                  REGION ''us-east-1'',
                  ENDPOINT ''119.119.204.194:9000''
              );');

-- 读取s3上的parquet
SELECT * FROM read_parquet('s3a://test/duckdb/new_table.parquet');

 

这里只是做了简单的测试,流程是已经可以实现了

parquet 存在对象储存上,如果是内网网络,parquet文件攒批合理,合理设置分区,利用好数据下推功能,这可以是一个非常轻量化的OLAP型数据库,迷你版greenplum

文章来自个人专栏
数据库管理
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0