dremioframe & iceberg: Dremio와 Apache Iceberg를 위한 파이썬식 인터페이스
Source: Dev.to
개요
현대 데이터 팀은 Iceberg 테이블과 Dremio를 다루기 위한 간단한 도구가 필요합니다. 두 개의 새로운 Python 라이브러리—DremioFrame과 IceFrame—은 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 체험판 시작하기
- 무료 30일 체험판에 가입( $400 크레딧 포함) → 시작 페이지
- 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 클라이언트
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의 미래를 만드는 데 큰 도움이 됩니다.