TL;DR

  • CrowDB의 crowdb-iceberg:latest 컨테이너는 Iceberg 카탈로그, 테이블 저장소, 로컬 웹 콘솔을 단일 컨테이너로 실행하며, pandas와 PyIceberg로 주문을 저장하고 도시별 결제 매출을 집계하는 예제를 제공함.
  • 실행 조건은 Linux amd64, Docker, Python 3.10–3.12이며, 평가용 데이터만 사용하고 로컬 9092 포트가 비어 있어야 함.
  • 컨테이너는 9092 포트에서 카탈로그와 파일 서비스를, 9090 포트에서 로컬 콘솔을 제공하며 접속 정보는 컨테이너 안에서 생성됨.
  • 예제는 pandas_demo.orders에 주문 6건을 기록하고 다시 읽으며, 취소 주문 1건을 제외한 유료 주문 5건의 도시별 매출을 집계함.
  • 동일한 컨테이너에서 스크립트를 다시 실행하면 테이블이 이미 존재하므로, 반복하려면 새 테이블 이름이나 새 임시 컨테이너를 사용해야 함.

컨테이너 시작

  • Docker가 설치된 Linux amd64 호스트에서 로컬 9090 포트를 콘솔에, 9092 포트를 카탈로그와 파일 서비스에 연결해 crowdb/crowdb-iceberg:latest 컨테이너를 실행함.
  • 브라우저에서 http://127.0.0.1:9090/에 접속해 Iceberg를 선택함. 예제 스크립트가 pandas_demo.orders를 생성하기 전까지 테이블 트리는 비어 있음.

접속 정보와 클라이언트 설치

  • 컨테이너에서 crowdb-monitor credentials show --format env를 실행해 접속 값을 crowdb-iceberg.env 파일에 저장하고, umask 077로 파일 접근 권한을 제한함.
  • 환경 파일에는 ICEBERG_URI와 ICEBERG_TOKEN이 포함되며, 셸에 값을 불러온 뒤 Python 가상 환경을 만들고 활성화함.
  • pyiceberg[pyarrow]==0.11.1과 pandas를 설치하며, 아래 작업은 해당 컨테이너에서 생성한 접속 값을 사용함.

주문 6건 기록 및 다시 읽기

  • orders.py에서 환경 변수의 URI와 토큰으로 REST 유형의 crowdb 카탈로그를 불러옴.
  • 주문 데이터는 다음 6건이며, 각 행의 필드는 주문 ID, 도시, 상태, 미국 달러 금액 순서임.
  • 1, Beijing, paid, 120; 2, Shanghai, paid, 80; 3, Beijing, cancelled, 200
  • 4, Shanghai, paid, 60; 5, Shenzhen, paid, 50; 6, Beijing, paid, 30
  • pandas 데이터프레임을 인덱스 없이 Apache Arrow 테이블로 변환하고, pandas_demo 네임스페이스가 없으면 생성한 뒤 pandas_demo.orders 테이블을 만들고 데이터를 추가함.
  • 저장된 테이블을 Iceberg 카탈로그에서 다시 불러와 스캔하고, pandas 데이터프레임으로 변환함.
  • status가 paid인 행만 남겨 도시별 주문 수와 매출 합계를 계산하고, 매출 내림차순으로 정렬해 출력함.
  • 스크립트 실행 명령은 python orders.py임.

콘솔에서 테이블 확인

  • 콘솔을 새로고침하고 Iceberg → pandas_demo → orders를 선택해 테이블, 스냅샷, 스크립트가 기록한 Parquet 파일을 확인함.
  • 로컬 콘솔은 컨테이너를 점검하는 화면이며, 클라이언트와 쿼리 예제는 계속해서 9092 포트의 Iceberg 엔드포인트를 사용함.
  • 같은 로컬 컨테이너에서 Cluster 화면으로 서비스 상태를 확인할 수 있으며, 콘솔 헤더에는 Healthy가 표시됨.
  • Iceberg 화면은 실제 pandas_demo.orders 테이블의 스냅샷에서 매니페스트와 Parquet 파일까지 이어지는 구성을 표시함. 생성되는 파일 이름은 실행마다 달라짐.

결과와 반복 실행

  • 컨테이너에 저장된 행을 새로 스캔한 결과, 주문 1건이 취소 상태이므로 유료 주문 5건의 집계는 다음과 같음.
  • Beijing: 주문 2건, 매출 150달러
  • Shanghai: 주문 2건, 매출 140달러
  • Shenzhen: 주문 1건, 매출 50달러
  • 스크립트는 pandas_demo.orders를 생성하며, 같은 컨테이너에서 다시 실행하면 해당 테이블이 이미 존재함. 예제를 반복하려면 새 테이블 이름이나 새 임시 컨테이너를 사용함.

컨테이너와 접속 정보 정리

  • 작업을 마치면 최대 120초 대기 후 임시 컨테이너를 중지하고 삭제하며, crowdb-iceberg.env 파일을 제거함.
  • 영구 볼륨 사용이나 기타 클라이언트 작업은 빠른 시작 안내와 Iceberg 매뉴얼을 참조함.