dremioframe & iceberg: Dremio와 Apache Iceberg를 위한 파이썬식 인터페이스

발행: (2025년 12월 5일 오후 11:30 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

개요

현대 데이터 팀은 Iceberg 테이블과 Dremio를 다루기 위한 간단한 도구가 필요합니다. 두 개의 새로운 Python 라이브러리—DremioFrameIceFrame—은 Dremio 카탈로그와 Iceberg 테이블을 관리하기 위한 간결하고 가독성 높은 API를 제공합니다. 두 라이브러리 모두 현재 알파 단계이므로, 지금이 사용해 보고 피드백을 공유하며 이슈를 보고하기에 최적의 시기입니다.

무료 30일 Dremio Cloud 체험판( $400 크레딧 포함)에서는 Apache Polaris 기반 Iceberg 카탈로그를 기본으로 제공하므로, 추가 설정 없이 두 라이브러리를 모두 실험해 볼 수 있습니다.

DremioFrame

DremioFrame은 Dremio Cloud와 Dremio Software REST API를 래핑한 Python 클라이언트입니다. 다음과 같은 고수준 메서드를 제공합니다:

  • 소스, 폴더, 뷰, 태그 및 보안 규칙 관리
  • SQL 쿼리 실행 및 결과를 Pandas/Polars DataFrame 형태로 반환
  • 사용자, 역할 및 리플렉션 관리

라이브러리 설계 덕분에 원시 요청 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 크레딧 포함) → 시작 페이지
  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 클라이언트
from dremioframe.client import DremioClient
client = DremioClient(
    token="YOUR_DREMIO_CLOUD_PAT",
    project_id="YOUR_PROJECT_ID"
)

# IceFrame 클라이언트
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년 겨울, 홍콩의 작은 아파트에서, 14세 소년이 US Robotics Sportster 14,400 Fax Modem을 연결했다.