pg_lake_table

数据湖表和 Iceberg 表

概览

扩展包名版本分类许可证语言
pg_lake3.4OLAPApache-2.0C
ID扩展名BinLibLoadCreateTrustReloc模式
2560pg_lakelake
2561pg_extension_baseextension_base
2562pg_extension_updaterextension_updater
2563pg_mapmap_type
2564pg_lake_engine__lake__internal__nsp__
2565pg_lake_iceberglake_iceberg
2566pg_lake_table__pg_lake_table_writes
2567pg_lake_copypg_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 大版本包名依赖
EXTPIGSTY3.41817161514pg_lakebtree_gist, pg_lake_engine, pg_lake_iceberg
RPMPIGSTY3.4.01817161514pg_lake_$v-
DEBPIGSTY3.4.01817161514postgresql-$v-pg-lake-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64N/AN/AN/AN/AN/A
el8.aarch64N/AN/AN/AN/AN/A
el9.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
el9.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
el10.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
el10.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d12.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d12.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d13.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d13.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u22.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u22.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u24.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u24.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u26.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u26.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A

构建

您可以使用 pig build 命令构建 pg_lake 扩展的 RPM / DEB 包:

pig build pkg pg_lake         # 构建 RPM / DEB 包

安装

您可以直接安装 pg_lake 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

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_lakepg_lake_iceberg 外部服务器、文件检查/缓存实用工具、表目录和事务挂钩;Iceberg 元数据编码委托给 pg_lake_iceberg

查询外部文件

安装完整的堆栈,包括所需的 pg_lake_enginepg_lake_icebergbtree_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_lakepg_lake_iceberg: 读取文件和可写的 Iceberg 入口点。
  • 访问方法 icebergpg_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_readlake_writelake_read_write 控制对外部服务器、模式和实用工具的访问。为每个应用程序授予最窄的角色权限。
  • 外部表是文件的引用,而不是导入的副本。文件替换、跨区域访问和缓存失效可以独立于 PostgreSQL 目录状态改变延迟或结果。
  • Iceberg 插入优化批量插入而非单行插入。对于高频率逐行插入,使用暂存堆表,并定期刷新批次。
  • 内部 lake_table.* 目录跟踪文件、字段 ID、分区和恢复状态。不要直接修改它们。

文档结束