SeaweedFS 目录集成仅适用于 Iceberg 表。
- 单一服务 - 目录元数据和 Parquet 数据均由同一进程提供,无需单独的元数据数据库
- REST API - 符合 Iceberg REST 目录规范
- 服务端维护 - 自动执行 Parquet 合并整理和快照过期处理,无需外部维护服务
由于此功能仍处于实验阶段,您需要使用以下命令启用它:
SET allow_experimental_database_iceberg = 1;本地开发环境搭建
前置条件
- Docker 和 Docker Compose:确保已安装并运行 Docker
- 版本:SeaweedFS 4.42 或更高版本;ClickHouse 26.8 或更高版本 (25.8 及之后的版本可以读取和插入数据,但通过目录创建表需要 26.8)
- 安装了 PyIceberg 的 Python (可选) :用于在下文中填充样本数据
设置本地 SeaweedFS 目录
s3config.json 文件:
docker-compose.yml 文件,并添加以下配置:
mini 命令会在单个容器中启动完整的 SeaweedFS 技术栈。-tableBucket=analytics 标志会预先创建一个名为 analytics 的 S3 Tables 存储桶,作为 Iceberg 仓库。
**第 3 步:**运行以下命令启动服务:
写入样本数据
pip install pyiceberg pyarrow) 创建一个表,并追加几行数据:
连接到本地 SeaweedFS 目录
catalog_credential 和 oauth_server_uri 则通过 OAuth2 客户端凭据流程对目录本身进行身份验证。SeaweedFS 对两者均可使用相同的访问密钥和密钥。
使用 ClickHouse 查询 SeaweedFS 目录中的表
必须使用反引号必须使用反引号,因为 ClickHouse 不支持多个命名空间。
从 ClickHouse 创建表并写入数据
IcebergS3 引擎子句指定新表的存储路径,write_full_path_in_iceberg_metadata 使 ClickHouse 将完整的表位置注册到目录中。
通过目录创建表需要 ClickHouse 26.8 或更高版本。26.4 至 26.7 版本会先写入表文件,再注册命名空间;除非该命名空间已存在于目录中,否则 SeaweedFS 会拒绝此操作。早于 26.4 的版本看似成功,但表文件会写入对象存储,而不会注册到目录中。
将数据从数据湖加载到 ClickHouse
INSERT INTO SELECT 将 SeaweedFS 目录表中的数据加载到 ClickHouse: