dremioframe & iceberg:面向 Dremio 和 Apache Iceberg 的 Pythonic 接口
Source: Dev.to
概览
现代数据团队需要简便的工具来使用 Iceberg 表和 Dremio。两个全新的 Python 库——DremioFrame 和 IceFrame——提供简洁、可读的 API,用于管理 Dremio 目录和 Iceberg 表。两者目前均处于 alpha 阶段,是尝试、反馈和报告问题的理想时机。
免费 30 天的 Dremio Cloud 试用(含 $400 额度)为你提供内置的基于 Apache Polaris 的 Iceberg 目录,因而可以在无需额外配置的情况下实验这两个库。
DremioFrame
DremioFrame 是一个封装了 Dremio Cloud 和 Dremio Software REST API 的 Python 客户端。它提供了以下高级方法:
- 管理数据源、文件夹、视图、标签和安全规则
- 运行 SQL 查询并将结果以 Pandas/Polars DataFrame 形式返回
- 管理用户、角色和反射(Reflections)
库的设计让你无需处理原始请求 URL 或版本标签。典型用法如下:
from dremioframe.client import DremioClient
client = DremioClient(
token="YOUR_DREMIO_CLOUD_PAT",
project_id="YOUR_PROJECT_ID"
)
# 运行一个简单查询
df = client.sql.run("SELECT 1 AS value")
print(df)
# 在目录中创建视图
client.catalog.create_view(
path=["Samples", "small_view"],
sql="SELECT * FROM Samples.samples.Employees"
)
关键特性
- 目录管理 – 创建/删除数据源、文件夹和视图。
- 安全 – 分配策略和基于角色的访问控制。
- 反射 – 管理查询加速对象。
- 自动化友好 – 适用于批处理操作或单脚本更新。
IceFrame
IceFrame 提供了一套专注于通过 PyIceberg 和 Polars 与 Iceberg 表交互的工具,并带有原生扩展以提升性能。核心功能包括:
- 合并小文件并重写数据
- 演进分区规格和排序数据
- 清理旧快照和孤立文件
- 管理 Iceberg 视图(当目录支持时)
示例用法:
from iceframe import IceFrame
from datetime import datetime
ice = IceFrame(
{
"uri": "https://catalog.dremio.cloud/api/iceberg/v1",
"token": "YOUR_DREMIO_CLOUD_PAT",
"project_id": "YOUR_PROJECT_ID"
}
)
# 创建一个简单的 Iceberg 表
data = [
{"id": 1, "name": "Ada", "created_at": datetime.utcnow()},
{"id": 2, "name": "Max", "created_at": datetime.utcnow()}
]
ice.create_table("my_table", data=data)
# 查询表
result = ice.query("my_table").limit(10).execute()
print(result)
AI 助手
IceFrame 包含一个 AI 驱动的助手,能够回答关于表模式的自然语言问题、生成示例代码,并建议过滤条件或连接方式,帮助新手快速探索数据。
开始使用 Dremio Cloud 试用
- 注册 免费 30 天试用(含 $400 额度) → Get started page。
- 在 Dremio Cloud 中创建 个人访问令牌。
- 安装库(见下文)并按照示例配置令牌和项目 ID。
试用提供了托管的 Iceberg 目录,你可以直接在 DremioFrame 和 IceFrame 中创建表并即时查看,无需自行配置外部存储。
同时使用两个库
典型工作流将 IceFrame 用于本地表的创建/维护,DremioFrame 用于目录注册和联合查询:
- 使用 IceFrame 创建/维护 Iceberg 表。
- 使用 DremioFrame 将这些表注册到 Dremio 目录。
- 构建视图 或在多个数据源上应用治理策略。
这种统一方法消除了在多个工具之间切换或编写冗长 REST 请求的需求。
安装
pip install dremioframe iceframe
两个包均已发布在 PyPI:
- DremioFrame:
- IceFrame:
如果想贡献代码,也可以查看源码仓库:
- DremioFrame repo:
- IceFrame repo:
完整示例
# DremioFrame client
from dremioframe.client import DremioClient
client = DremioClient(
token="YOUR_DREMIO_CLOUD_PAT",
project_id="YOUR_PROJECT_ID"
)
# IceFrame client
from iceframe import IceFrame
ice = IceFrame(
{
"uri": "https://catalog.dremio.cloud/api/iceberg/v1",
"token": "YOUR_DREMIO_CLOUD_PAT",
"project_id": "YOUR_PROJECT_ID"
}
)
# 使用 IceFrame 创建 Iceberg 表
from datetime import datetime
data = [
{"id": 1, "name": "Ada", "created_at": datetime.utcnow()},
{"id": 2, "name": "Max", "created_at": datetime.utcnow()}
]
ice.create_table("my_table", data=data)
# 在 Dremio 目录中注册该表(示例)
client.catalog.create_view(
path=["Iceberg", "my_table_view"],
sql="SELECT * FROM iceberg.my_table"
)
# 通过 DremioFrame 运行查询
df = client.sql.run("SELECT * FROM Iceberg.my_table_view LIMIT 5")
print(df)
该代码片段演示了两个库如何相互补充,提供从数据创建到查询执行的端到端路径。
欢迎在试用期间实验这些库,分享你的想法,并报告遇到的任何问题。你的反馈将帮助塑造 DremioFrame 和 IceFrame 的未来发展。