Tom lane被“报复”?雇主CrunchyData遇最强开源对手pg_duckdb
文中参考文档点击阅读原文打开, 同时推荐2个学习环境:
1、懒人Docker镜像, 已打包200+插件:《最好的PostgreSQL学习镜像》
2、有web浏览器就能用的云起实验室: 《免费体验PolarDB开源数据库》
3、PolarDB开源数据库内核、最佳实践等学习图谱: https://www.aliyun.com/database/openpolardb/activity
Tom lane被“报复”? CrunchyData遇最强开源对手pg_duckdb
背景
pg_duckdb是谁?
让PG的OLAP场景分析性能提示1个数量级的插件 让PG自由读写parquet列式存储的插件 让PG自由读写对象存储实现冷热存储分离的插件
pg_duckdb (https://github.com/duckdb/pg_duckdb) 是DuckDB官方的一个 Postgres 扩展,它将 DuckDB 的列向量化分析引擎和功能嵌入到 Postgres 中。我们建议使用 pg_duckdb 来构建高性能分析和数据密集型应用程序。
pg_duckdb 是DuckDB官方与合作伙伴Hydra和MotherDuck合作开发的。
为什么说tom lane被打击"报复"了? 看看这几篇文档就知道原因了.
《什么? PostgreSQL大佬tom lane公司crunchydata“模仿”DuckDB创意?》
《把PostgreSQL冷数据转储到OSS的插件: pg_tier + parquet_s3_fdw》
pg_duckdb使用举例
pg_duckdb特性
DuckDB 引擎执行的 SELECT查询可以直接读取 Postgres 表。能够读取 Postgres 和 DuckDB 中都存在的 数据类型 。受支持的数据类型包括:数字、字符、二进制、日期/时间、布尔值、UUID、JSON 和数组。 如果 DuckDB 无法支持查询的任何原因,执行将回退到 Postgres 引擎执行器进行执行。 从对象存储(AWS S3、Cloudflare R2 或 Google GCS)读取 parquet 和 CSV 文件。 SELECT n FROM read_parquet('s3://bucket/file.parquet') AS (n int)SELECT n FROM read_csv('s3://bucket/file.csv') AS (n int)就像在 DuckDB 中一样,您可以向这些函数传递通配符和数组。 使用 SELECT duckdb.enable_extension('iceberg')启用 DuckDB Iceberg 扩展并使用iceberg_scan读取 Iceberg 文件。将query的结果 或 整个表 写入对象存储中的 parquet。 COPY (SELECT foo, bar FROM baz) TO 's3://...'COPY table TO 's3://...'在单个查询中读取和写入 Parquet 格式
COPY (
SELECT count(*), name
FROM read_parquet('s3://bucket/file.parquet') AS (name text)
GROUP BY name
ORDER BY count DESC
) TO 's3://bucket/results.parquet';
查询并使用 JOINPostgres 表、视图和物化视图中的数据。在 Postgres 表上创建索引以加速您的 DuckDB 查询 使用 SELECT duckdb.install_extension('extension_name');安装 DuckDB 扩展插件。使用设置打开/关闭 DuckDB 执行器: SET duckdb.execution = true|false
使用pg_duckdb
最好的开始方式是使用 pg_duckdb 将 Postgres 连接到新的或现有的对象存储桶(AWS S3、Cloudflare R2 或 Google GCS)。您可以使用 read_parquet、read_csv 和 iceberg_scan 分别查询 Parquet、CSV 和 Iceberg 格式的数据。
1. 添加凭据以启用 DuckDB 的 httpfs 支持。
INSERT INTO duckdb.secrets
(cloud_type, cloud_id, cloud_secret, cloud_region)
VALUES ('S3', 'access_key_id', 'secret_accss_key', 'us-east-1');
2. 将数据直接复制到您的存储桶 - 不需要 ETL 管道!
COPY (SELECT user_id, item_id, price, purchased_at FROM purchases)
TO 's3://your-bucket/purchases.parquet;
3. 对您的数据执行分析。
SELECT SUM(price) AS total, item_id
FROM read_parquet('s3://your-bucket/purchases.parquet')
AS (price float, item_id int)
GROUP BY item_id
ORDER BY total DESC
LIMIT 100;
参考
更多DuckDB相关文档可在 https://github.com/digoal/blog 中进行搜索
《DuckDB官方推出"社区扩展插件市场", 未来可期》
《DuckDB高效内存管理: 流式执行 , 临时文件 , 缓冲区管理》
《PostgreSQL白嫖DuckDB实现湖仓一体功能》
《DuckDB-NSQL 自然语言TO SQL开源项目》
《DuckDB 宣布 v1.0.0 正式发布, "稳定性"是 DuckDB v1.0.0 的主要标签》
《PG被DuckDB碾压,该反省哪些方面? DuckDB v0.10.3 在Macmini 2023款上的tpch性能表现如何? PostgreSQL使用duckdb_fdw 的tpch加速性能表现如何?》
《什么? PostgreSQL大佬tom lane公司crunchydata“模仿”DuckDB创意?》
《DuckDB 发布vss 向量插件》
《DuckDB Positional Joins 语法糖》
《DuckDB semi join , anti join 语法糖》
《DuckDB unpivot 行列转换 internals》
《DuckDB unpivot 行列转换 太好用了》
《DuckDB pivot 行列转换 internals》
《DuckDB pivot 行列转换 太好用了》
《也太好用了, 让PG拥有DuckDB csv解析和copy的灵活性》
《使用DuckDB sniff_csv 解析csv文件元数据格式》
《DuckDB 语法糖macro,columns表达式,list lambda等结合例子: 动态聚合分析》
《pg_quack: PostgreSQL duckdb Table Access Method》
《DuckDB 新版本 0.10.0 介绍》
《DuckDB 支持超融合计算, 会给“大数据”产品带来什么冲击? 会给“大数据”应用开发者带来什么改变?》
《用chatgpt排查PG create extension duckdb_fdw异常: could not load library...undefined symbol...》
《在WEB浏览器中运行数据库: DuckDB-WASM 与 extension》
《DuckDB book:by MotheDuck》
《试用MotherDuck: DuckDB 的ServerLess/NoServer+Shareable data marketing版云服务》
《DuckDB 存储生态: lance(向量存储引擎)的安装使用》
《DuckDB Internals PDF》
《PostgreSQL, MySQL, DuckDB, DuckDB+mysqlscanner 1000万记录的简单分析SQL对比》
《DuckDB 0.9.2 TPC-DS 测试》
《期望未来DuckDB的架构演变方向》
《如何将PostgreSQL query/table 快速导出为parquet文件或导入DuckDB table?》
《体验DuckDB Iceberg(大型分析数据集的开源表格式) extension》
《DuckDB ASOF JOIN 用法介绍》
《DuckDB 语法糖: Union data type 支持不同类型存储在同一个字段内, 同时保留每个字段值类型》
《DuckDB 语法糖: Automatic struct creation 自动创建struct(select 表名)》
《DuckDB 语法糖: 解开struct.*》
《DuckDB 语法糖: List comprehensions 支持python语法, 过滤和转换同时支持》
《DuckDB 语法糖: List lambda functions》
《DuckDB 语法糖: Dynamic PIVOT and UNPIVOT 动态行列转换》
《DuckDB 语法糖: Insert by name , 自动留白未含字段》
《DuckDB 语法糖: Union by name , 自动补齐空缺字段, append数据》
《DuckDB 语法糖: Function chaining 函数调用链》
《DuckDB 语法糖: FROM first in SELECT statements》
《DuckDB 语法糖: Automatic JSON to nested types conversion》
《DuckDB 语法糖: Dynamic column selection 支持通配符,exclude,replace,lambda 等动态列选择|值替换|列选择》
《DuckDB 语法糖: Reusable column aliases》
《DuckDB 发布新版本 0.9.0》
《DuckDB ADBC - 通过 Arrow 数据库连接进行 零复制|零格式转换 数据传输 VS ODBC/JDBC》
《使用DuckDB分析高中生联考成绩excel(xlst)数据, 文理选课分析》
《老机器上安装ubuntu 11, 使用lvm, 测试postgresql 16 & duckdb 0.8.1》
《DuckDB 对比 PolarDB for PostgreSQL 全文检索功能》
《DuckDB 相关子查询query rewrite能力, 自动消除相关子查询大幅提升性能. PostgreSQL 优化器有待改进》
《DuckDB 0.8.0 发布, 支持pivot语法, ASOF JOIN, 并行导入导出性能提升, 递归通配符解析文件, arrow 连接器等》
《DuckDB 支持 GIS extension》
《DuckDB 存储生态: lance(向量存储引擎): Modern columnar data format for ML/超越parquet》
《记录下 在 debian 宿主机中部署和使用 docker (常用docker命令、debian容器常用配置; debian容器部署duckdb和PostgreSQL例子)》
《PolarDB-PG | PostgreSQL + duckdb_fdw + 阿里云OSS 实现高效低价的海量数据冷热存储分离》
《使用DuckDB 分解深度嵌套的 JSON,一次一个向量》
《DuckDB 内置 benchmark 的使用》
《DuckDB 发布 0.7.0 - 拉布拉多鸭》
《PolarDB 开源版通过 duckdb_fdw 支持 parquet 列存数据文件以及高效OLAP》
《DuckDB 轻量级压缩解读》
《DuckDB 0.6.0 CLI 支持新的结果集显示模式 duckbox, 展示头部和尾部的少量记录, 避免结果集占满屏幕》
《DuckDB 0.6.0 CLI 支持 tab键自动补齐》
《DuckDB 0.6.0 的SQL执行进度是个败笔? 速度太快了, 执行进度反而成了干扰.》
《DuckDB 0.6.0 支持并行 COUNT(DISTINCT)》
《DuckDB 0.6.0 支持并行创建索引, 提升create index性能》
《DuckDB 0.6.0 支持 csv 并行读取功能, 提升查询性能》
《DuckDB 0.6.0 压缩算法增加: FSST, Chimp, Patas 提升字符串和浮点数压缩能力》
《DuckDB 0.6.0 数据批量写入性能优化》
《为什么看好 DuckDB 的发展前景?》
《DuckDB 0.6.0 内存管理增强, 提升超出内存大小的大数据集hashjoin,sort,window function性能》
《DuckDB 0.6.0 语法糖: Add Python-style list-comprehension syntax support to SQL》
《DuckDB 0.6.0 语法糖: 支持columns 语法 - 兼容clickhouse columns 语法》
《DuckDB 0.6.0 新增UNION数据类型支持 - 单列支持多类型》
《DuckDB 0.6.0 发布》
《DuckDB extension(插件) - 扩展DuckDB功能》
《DuckDB 数值类型性能 : hugeint (16字节整型), decimal(内部整型存储)》
《DuckDB select 语法糖: sample 采样查询》
《DuckDB select 语法糖: exclude, replace columns》
《DuckDB 备份与恢复数据库》
《DuckDB 对比 PostgreSQL 48张表JOIN 的优化器》
《DuckDB 对比 PostgreSQL join 优化器推理优化又一例》
《DuckDB COPY 数据导入导出 - 支持csv, parquet格式, 支持CODEC设置压缩》
《DuckDB 虚拟列 - GENERATED ALWAYS AS () VIRTUAL》
《DuckDB DataLake 场景使用举例 - aliyun OSS对象存储parquet》
《DuckDB lambda 函数使用 - list/array数据处理 - 元素的转换与过滤 (list_filter, list_transform)》
《DuckDB 列位置别名 #n 的使用》
《DuckDB 宏(MACRO) 的使用》
《DuckDB update from,delete using - 采用JOIN 批量更新和批量删除》
《DuckDB rowid 的使用》
《DuckDB 对比 PostgreSQL left outer join 优化器推理优化一例》
《DuckDB insert query 数据导入场景 优化和使用注意》
《DuckDB 鸟瞰数据的方法: SUMMARIZE. 数据柱状图、统计信息》
《DuckDB explain analye 的结果解释 - Profile Queries》
《查看 DuckDB 优化器 物理和逻辑执行计划 - explain_output》
《duckdb postgres_scan 插件 - 不落地数据, 加速PostgreSQL数据分析》
《用duckdb_fdw加速PostgreSQL分析计算, 提速40倍, 真香.》
《德说-第140期, duckdb+容器+parquet+对象存储, 实现SaaS场景, 低代码拖拉拽多维度实时分析 降本提效》
《德说-第135期, duckdb的产品形态如何盈利? 未来数据库产品的商业形态》
《DuckDB parquet 分区表 / Delta Lake(数据湖) 应用》
《DuckDB 线性回归预测股价的例子》
《DuckDB 数据文件水位问题观察》
《DuckDB 采用外部 parquet 格式存储 - tpch 测试 - in_memory VS in_parquet》
《DuckDB 完整的PRAGMA, setting, 系统表, 系统视图, 内置函数, 内置类型 在哪里?》
《DuckDB 数据库的数据能不能超出内存限制? 以及推荐的使用方法 - parquet》
《编译安装 DuckDB 最新版本 in MacOS》
《DuckDB 读写 Parquet 文件 - 同时支持远程s3, oss, http等parquet文件读写》
《DuckDB 聚合函数用法举例》
《DuckDB的字符串 collate用法 - 大小写、口音(西方各国字符集)、地域属性、排序 - (icu, noCASE, noACCENT, noNFC)》
《DuckDB 快速生成海量数据的方法》
《DuckDB:list,struct,map 类型很强大(支持lambda计算) - PostgreSQL:数组、row|record、json字典》
《DuckDB 字符串相似性计算函数》
《DuckDB vs PostgreSQL TPC-H 测试》
《DuckDB TPC-H 测试》
《DuckDB Window 窗口函数语法糖 - QUALIFY - window filter》
《DuckDB 定位OLAP方向的SQLite, 适合嵌入式数据分析 - tpch测试与简单试用》
《PostgreSQL 牛逼的分析型功能 - 列存储、向量计算 FDW - DuckDB_fdw - 无数据库服务式本地lib库+本地存储》
本期彩蛋 - 开源Clup: PostgreSQL&PolarDB高可用与管理软件
官网: https://www.csudata.com/clup
开源项目地址: https://gitee.com/csudata
使用CLup可以轻松管理几十套至上百套PostgreSQL、PolarDB高可用的数据库集群,发生故障自动切换,不影响生产系统的运行。故障切换后有详细的故障日志,方便定位故障原因,还可以手工一键切换。CLup还提供了数据库的一些基本监控和TOP SQL的监控,CLup后续版本还会增加更多的功能。
管理基于PostgreSQL流复制的集群
管理基于共享存储的PolarDB集群
产品优势
文章中的参考文档请点击阅读原文获得.
欢迎关注我的github (https://github.com/digoal/blog) , 学习数据库不迷路.
近期正在写公开课材料, 未来将通过视频号推出, 欢迎关注视频号: