dremioframe & iceberg:面向 Dremio 和 Apache Iceberg 的 Pythonic 接口

发布: (2025年12月5日 GMT+8 22:30)
5 min read
原文: Dev.to

Source: Dev.to

概览

现代数据团队需要简便的工具来使用 Iceberg 表和 Dremio。两个全新的 Python 库——DremioFrameIceFrame——提供简洁、可读的 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 试用

  1. 注册 免费 30 天试用(含 $400 额度) → Get started page
  2. 在 Dremio Cloud 中创建 个人访问令牌
  3. 安装库(见下文)并按照示例配置令牌和项目 ID。

试用提供了托管的 Iceberg 目录,你可以直接在 DremioFrame 和 IceFrame 中创建表并即时查看,无需自行配置外部存储。

同时使用两个库

典型工作流将 IceFrame 用于本地表的创建/维护,DremioFrame 用于目录注册和联合查询:

  1. 使用 IceFrame 创建/维护 Iceberg 表。
  2. 使用 DremioFrame 将这些表注册到 Dremio 目录。
  3. 构建视图 或在多个数据源上应用治理策略。

这种统一方法消除了在多个工具之间切换或编写冗长 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 的未来发展。

Back to Blog

相关文章

阅读更多 »

调制解调器的复仇

第一次连接 1994年冬天,在香港的一间小公寓里,一个十四岁的男孩把一台 US Robotics Sportster 14,400 Fax Modem 插入……