pg_lake_table
数据湖表和 Iceberg 表
仓库
main/pg_lake_table
https://github.com/Snowflake-Labs/pg_lake/tree/main/pg_lake_table
源码
pg_lake-3.4.0.tar.gz
pg_lake-3.4.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_lake | 3.4 | OLAP | Apache-2.0 | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2560 | pg_lake | 是 | 是 | 是 | 是 | 否 | 否 | lake |
| 2561 | pg_extension_base | 否 | 是 | 是 | 是 | 否 | 否 | extension_base |
| 2562 | pg_extension_updater | 否 | 是 | 是 | 是 | 否 | 否 | extension_updater |
| 2563 | pg_map | 否 | 是 | 否 | 是 | 否 | 否 | map_type |
| 2564 | pg_lake_engine | 否 | 是 | 是 | 是 | 否 | 否 | __lake__internal__nsp__ |
| 2565 | pg_lake_iceberg | 否 | 是 | 否 | 是 | 否 | 否 | lake_iceberg |
| 2566 | pg_lake_table | 否 | 是 | 是 | 是 | 否 | 否 | __pg_lake_table_writes |
| 2567 | pg_lake_copy | 否 | 是 | 是 | 是 | 否 | 否 | pg_catalog |
| 相关扩展 | btree_gist pg_lake_engine pg_lake_iceberg |
|---|---|
| 下游依赖 | pg_lake pg_lake_copy |
pg_extension_base auto-loads pg_lake_engine, pg_lake_iceberg, and pg_lake_table in dependency order. Extension SQL/control version is 3.4; source and DEB/RPM package version is 3.4.0.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 3.4 | 1817161514 | pg_lake | btree_gist, pg_lake_engine, pg_lake_iceberg |
| RPM | PIGSTY | 3.4.0 | 1817161514 | pg_lake_$v | - |
| DEB | PIGSTY | 3.4.0 | 1817161514 | postgresql-$v-pg-lake | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | N/A | N/A | N/A | N/A | N/A |
| el8.aarch64 | N/A | N/A | N/A | N/A | N/A |
| el9.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| el9.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| el10.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| el10.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d12.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d12.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d13.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d13.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u22.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u22.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u24.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u24.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u26.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u26.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
构建
您可以使用 pig build 命令构建 pg_lake 扩展的 RPM / DEB 包:
pig build pkg pg_lake # 构建 RPM / DEB 包
安装
您可以直接安装 pg_lake 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_lake; # 当前活跃 PG 版本安装
pig ext install -y pg_lake -v 18 # PG 18
pig ext install -y pg_lake -v 17 # PG 17
pig ext install -y pg_lake -v 16 # PG 16
dnf install -y pg_lake_18 # PG 18
dnf install -y pg_lake_17 # PG 17
dnf install -y pg_lake_16 # PG 16
apt install -y postgresql-18-pg-lake # PG 18
apt install -y postgresql-17-pg-lake # PG 17
apt install -y postgresql-16-pg-lake # PG 16
预加载配置:
shared_preload_libraries = 'pg_extension_base';
创建扩展:
CREATE EXTENSION pg_lake_table CASCADE; -- 依赖: btree_gist, pg_lake_engine, pg_lake_iceberg
用法
来源:
pg_lake_table 将对象存储文件作为 PostgreSQL 外部表暴露,并提供 USING iceberg 表语法。它拥有 pg_lake 和 pg_lake_iceberg 外部服务器、文件检查/缓存实用工具、表目录和事务挂钩;Iceberg 元数据编码委托给 pg_lake_iceberg。
查询外部文件
安装完整的堆栈,包括所需的 pg_lake_engine、pg_lake_iceberg 和 btree_gist 依赖项:
CREATE EXTENSION pg_lake CASCADE;
空列列表要求 pg_lake 推断文件模式:
CREATE FOREIGN TABLE external_events ()
SERVER pg_lake
OPTIONS (
path 's3://analytics-bucket/events/*.parquet',
filename 'true'
);
SELECT count(*) FROM external_events;
通过扩展提供的表访问方法创建可写的 Iceberg 表:
CREATE TABLE managed_events (
event_time timestamptz,
payload jsonb
) USING iceberg;
文件和表实用工具索引
lake_file.list(pattern): 列出匹配的对象路径、大小、修改时间和 ETags。lake_file.size(path)和lake_file.exists(path): 检查一个远程对象。lake_file.preview(url, format, compression): 返回推断的列名和类型。lake_file.delete(url): 删除一个远程对象;仅限允许删除数据的角色执行。lake_file_cache.add(path, refresh),remove(path)和list(): 管理lake_read成员的本地文件缓存。lake_iceberg.table_size(regclass): 计算 Iceberg 表当前数据文件的总大小。- 外部服务器
pg_lake和pg_lake_iceberg: 读取文件和可写的 Iceberg 入口点。 - 访问方法
iceberg和pg_lake_iceberg: 用于将CREATE TABLE ... USING转换为扩展的外部表表示形式的别名。
SELECT path, file_size
FROM lake_file.list('s3://analytics-bucket/events/**/*.parquet');
SELECT *
FROM lake_file.preview('s3://analytics-bucket/events/sample.parquet');
运营注意事项
- 必须预加载
pg_extension_base并在每个引用位置运行pgduck_server,并带有相应的凭据。 lake_read、lake_write和lake_read_write控制对外部服务器、模式和实用工具的访问。为每个应用程序授予最窄的角色权限。- 外部表是文件的引用,而不是导入的副本。文件替换、跨区域访问和缓存失效可以独立于 PostgreSQL 目录状态改变延迟或结果。
- Iceberg 插入优化批量插入而非单行插入。对于高频率逐行插入,使用暂存堆表,并定期刷新批次。
- 内部
lake_table.*目录跟踪文件、字段 ID、分区和恢复状态。不要直接修改它们。
文档结束