💭

Apache Iceberg テーブルを可視化・管理できる Nimtable を作ってみた

に公開

Iceberg ベースのレイクハウスを監視、最適化、管理できる軽量で使いやすいプラットフォーム
Apache Iceberg テーブルを可視化・管理できる Nimtable を作ってみた.png

概要

Nimtable は Apache Iceberg カタログを簡単に操作・管理できる Web ベースのプラットフォームです。テーブルの構造を可視化したり、クエリを実行したり、ファイル配置を分析してストレージ構造を最適化することができます。

主な機能

  • 🌟 複数カタログのサポート

    REST Catalog、AWS Glue、S3 テーブル、PostgreSQL(JDBC 経由)に対応

  • 🗄️ オブジェクトストレージ統合

    Amazon S3 や Cloudflare R2、MinIO などの S3 互換ストレージに対応

  • 🔍 テーブルの構造分析

    スキーマ、パーティション、スナップショットの詳細を確認可能

  • インタラクティブなクエリ実行

    UI 上から SQL クエリを直接実行可能

  • 🤖 AI Copilot

    Iceberg テーブル探索を支援するインテリジェントな補助機能

  • 📄 AI によるサマリー生成

    Iceberg テーブルの要約を自動で生成

  • 📊 ファイル分布の可視化

    パーティションやスナップショットごとのデータ分布を視覚的に把握

  • 🔧 テーブルの最適化

    ファイルのコンパクションやスナップショットの期限管理を実行可能

  • 🔌 REST Catalog としての機能

    Nimtable 自体を Iceberg REST Catalog として動作させることができ、既存のカタログを REST API で提供可能

アーキテクチャ

Nimtable はユーザーとカタログサーバーの間に立ち、インタラクティブな Web UI と REST Catalog API レイヤーの両方を提供します。
image.png

クイックスタート

最速で始めるには Docker を使うのが便利です:

cd docker
docker compose up -d

ブラウザで http://localhost:3000 にアクセスしてください。

初期管理者アカウント

  • ユーザー名: admin
  • パスワード: admin

docker-compose.yml 内の環境変数で管理者アカウントを変更できます:

services:
  nimtable-web:
    environment:
      - ADMIN_USERNAME=your-admin-username
      - ADMIN_PASSWORD=your-secure-password

サービス管理(任意)

  • ログを確認:

    docker compose logs -f
    
  • サービス停止:

    docker compose down
    

開発

開発に関する詳細は HACKING.md を参照してください。

設定方法

Nimtable の設定は以下の 2 通りの方法で可能です:

  • Web UI: 「Create Catalog」ボタンをクリックするだけの簡単設定
  • YAML 設定ファイル: 上級者や自動化デプロイに最適

1. 設定ファイルの場所

  • デフォルトではカレントディレクトリの config.yaml を読み込みます
  • Docker 利用時: /app/config.yaml にマウントしてください
  • サンプルは docker/docker-compose.yml を参照

2. 最小設定ファイル例

server:
  port: 8182
  host: 0.0.0.0
database:
  url: jdbc:postgresql://localhost:5432/nimtable_db
  username: nimtable_user
  password: password

⚠️ 初回ログイン後、管理者パスワードを変更してください

3. カタログの設定方法

  • Web UI 経由:
    ログイン後「Create Catalog」から設定可能。データは内部 DB に保存され config.yaml には反映されません

  • YAML ファイル経由:
    あらかじめ config.yaml に設定を追加しておくことで自動認識されます

    詳細は backend/config.yaml を参照してください

対応カタログタイプ:

  • REST
  • AWS Glue
  • S3 Tables
  • PostgreSQL(JDBC)

カタログタイプに応じて必要な設定項目は異なります。必ずサンプルを参照してください。

4. AWS 認証情報の設定

AWS Glue や S3 を使用する場合、以下の 2 通りの方法があります:

  • 環境変数経由:

    services:
      nimtable:
        environment:
          - AWS_REGION=us-east-1
          - AWS_ACCESS_KEY_ID=your-access-key
          - AWS_SECRET_ACCESS_KEY=your-secret-key
    
  • AWS 認証ファイルをマウント:

    services:
      nimtable:
        volumes:
          - ~/.aws/credentials:/root/.aws/credentials:ro
    

ロードマップ

  • 🔧 最適化されたファイルコンパクションのスケジューリング対応
  • 📊 ダッシュボードや分析機能による包括的なモニタリング
  • 💾 メタデータキャッシュと DB 統合によるパフォーマンス向上
  • ⚡ 複数のクエリエンジンとの統合
  • 📋 スナップショット・スキーマ・パーティションの高度な管理
  • 🔐 RBAC 対応と細かなアクセス制御
  • 🔌 認証付き REST API の公開
  • 🔄 カラムレベルでのデータ系譜(データラインエージ)の追跡
  • 🤖 AI Copilot 機能のさらなる強化
  • 🏢 各種ストレージバックエンドとの統合(ウェアハウス対応)

詳細は Roadmap にて随時更新しています。

コントリビューションについて

コントリビューションは大歓迎です!詳細は Contributing Guide をご覧ください。

ライセンス

本プロジェクトは Apache License 2.0 の下で公開されています。詳しくは LICENSE をご確認ください。

Discussion