Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

كتالوج Nessie

ميزة تجريبية

يدعم ClickHouse التكامل مع عدة كتالوجات ‏(Unity وGlue وREST وPolaris وغيرها). يوضح لك هذا الدليل خطوات الاستعلام عن بياناتك باستخدام ClickHouse وكتالوج Nessie.

Nessie هو كتالوج معاملاتي مفتوح المصدر لبحيرات البيانات، ويوفر ما يلي:

  • تحكم في إصدارات البيانات مستوحى من Git باستخدام الفروع وعمليات commit
  • معاملات عابرة للجداول وضمانات الرؤية
  • الامتثال لواجهة برمجة تطبيقات REST وفق مواصفة كتالوج REST الخاصة بـ Iceberg
  • نهج بحيرة بيانات مفتوحة يدعم Hive وSpark وDremio وTrino وغير ذلك
  • جاهز للإنتاج للنشر على Docker أو Kubernetes

إعداد بيئة التطوير المحلية

للتطوير والاختبار محليًا، يمكنك استخدام إعداد Nessie قائم على الحاويات. يُعد هذا النهج مثاليًا للتعلّم، وإنشاء النماذج الأولية، وبيئات التطوير.

المتطلبات المسبقة

  1. Docker وDocker Compose: تأكد من أن Docker مُثبّت ويعمل.
  2. إعداد نموذجي: يمكنك استخدام إعداد docker-compose الرسمي لـ Nessie

إعداد كتالوج Nessie المحلي

يمكنك استخدام إعداد docker-compose الرسمي لـ Nessie الذي يوفّر بيئة متكاملة تضم Nessie، ومستودع إصدارات داخل الذاكرة، وMinIO لتخزين الكائنات.

الخطوة 1: أنشئ مجلدًا جديدًا لتشغيل المثال فيه، ثم أنشئ ملفًا باسم docker-compose.yml بالتكوين التالي:

version: '3.8'

services:
  nessie:
    image: ghcr.io/projectnessie/nessie:latest
    ports:
      - "19120:19120"
    environment:
      - nessie.version.store.type=IN_MEMORY
      - nessie.catalog.default-warehouse=warehouse
      - nessie.catalog.warehouses.warehouse.location=s3://my-bucket/
      - nessie.catalog.service.s3.default-options.endpoint=http://minio:9000/
      - nessie.catalog.service.s3.default-options.access-key=urn:nessie-secret:quarkus:nessie.catalog.secrets.access-key
      - nessie.catalog.service.s3.default-options.path-style-access=true
      - nessie.catalog.service.s3.default-options.auth-type=STATIC
      - nessie.catalog.secrets.access-key.name=admin
      - nessie.catalog.secrets.access-key.secret=password
      - nessie.catalog.service.s3.default-options.region=us-east-1
      - nessie.server.authentication.enabled=false
    depends_on:
      minio:
        condition: service_healthy
    networks:
      - iceberg_net

  minio:
    image: quay.io/minio/minio
    ports:
      - "9002:9000"
      - "9003:9001"
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=password
      - MINIO_REGION=us-east-1
    healthcheck:
      test: ["CMD", "mc", "ready", "local"]
      interval: 5s
      timeout: 10s
      retries: 5
      start_period: 30s
    entrypoint: >
      /bin/sh -c "
      minio server /data --console-address ':9001' &
      sleep 10;
      mc alias set myminio http://localhost:9000 admin password;
      mc mb myminio/my-bucket --ignore-existing;
      tail -f /dev/null"
    networks:
      - iceberg_net

  clickhouse:
    image: clickhouse/clickhouse-server:head
    container_name: nessie-clickhouse
    user: '0:0'  # Ensures root permissions
    ports:
      - "8123:8123"
      - "9000:9000"
    volumes:
      - clickhouse_data:/var/lib/clickhouse
      - ./clickhouse/data_import:/var/lib/clickhouse/data_import  # Mount dataset folder
    networks:
      - iceberg_net
    environment:
      - CLICKHOUSE_DB=default
      - CLICKHOUSE_USER=default
      - CLICKHOUSE_DO_NOT_CHOWN=1
      - CLICKHOUSE_PASSWORD=
    depends_on:
      nessie:
        condition: service_started
      minio:
        condition: service_healthy

volumes:
  clickhouse_data:

networks:
  iceberg_net:
    driver: bridge

الخطوة 2: شغّل الأمر التالي لتشغيل الخدمات:

docker compose up -d

الخطوة 3: انتظر حتى تصبح جميع الخدمات جاهزة. يمكنك التحقق من السجلات:

docker-compose logs -f

الاتصال بـ كتالوج Nessie المحلي

اتصل بحاوية ClickHouse الخاصة بك:

docker exec -it nessie-clickhouse clickhouse-client

ثم أنشئ اتصال قاعدة البيانات إلى كتالوج Nessie:

SET allow_experimental_database_iceberg = 1;

CREATE DATABASE demo
ENGINE = DataLakeCatalog('http://nessie:19120/iceberg', 'admin', 'password')
SETTINGS catalog_type = 'rest', storage_endpoint = 'http://minio:9002/my-bucket', warehouse = 'warehouse'

الاستعلام عن جداول كتالوج Nessie باستخدام ClickHouse

الآن بعد إعداد الاتصال، يمكنك البدء في الاستعلام من خلال كتالوج Nessie. على سبيل المثال:

USE demo;

SHOW TABLES;

إذا كان إعدادك يتضمن بيانات نموذجية (مثل مجموعة بيانات سيارات الأجرة)، فمن المفترض أن ترى جداول مثل:

┌─name──────────┐
│ default.taxis │
└───────────────┘

لاستعلام أحد الجداول (إذا كان متاحًا):

SELECT count(*) FROM `default.taxis`;
┌─count()─┐
│ 2171187 │
└─────────┘

لفحص عبارة DDL الخاصة بالجدول:

SHOW CREATE TABLE `default.taxis`;
┌─statement─────────────────────────────────────────────────────────────────────────────────────┐
│ CREATE TABLE demo.`default.taxis`                                                             │
│ (                                                                                             │
│     `VendorID` Nullable(Int64),                                                               │
│     `tpep_pickup_datetime` Nullable(DateTime64(6)),                                           │
│     `tpep_dropoff_datetime` Nullable(DateTime64(6)),                                          │
│     `passenger_count` Nullable(Float64),                                                      │
│     `trip_distance` Nullable(Float64),                                                        │
│     `RatecodeID` Nullable(Float64),                                                           │
│     `store_and_fwd_flag` Nullable(String),                                                    │
│     `PULocationID` Nullable(Int64),                                                           │
│     `DOLocationID` Nullable(Int64),                                                           │
│     `payment_type` Nullable(Int64),                                                           │
│     `fare_amount` Nullable(Float64),                                                          │
│     `extra` Nullable(Float64),                                                                │
│     `mta_tax` Nullable(Float64),                                                              │
│     `tip_amount` Nullable(Float64),                                                           │
│     `tolls_amount` Nullable(Float64),                                                         │
│     `improvement_surcharge` Nullable(Float64),                                                │
│     `total_amount` Nullable(Float64),                                                         │
│     `congestion_surcharge` Nullable(Float64),                                                 │
│     `airport_fee` Nullable(Float64)                                                           │
│ )                                                                                             │
│ ENGINE = Iceberg('http://localhost:9002/my-bucket/default/taxis/', 'admin', '[HIDDEN]')      │
└───────────────────────────────────────────────────────────────────────────────────────────────┘

تحميل البيانات من بحيرة البيانات لديك إلى ClickHouse

إذا كنت بحاجة إلى تحميل بيانات من كتالوج Nessie إلى ClickHouse، فابدأ بإنشاء جدول ClickHouse محلي:

CREATE TABLE taxis
(
    `VendorID` Int64,
    `tpep_pickup_datetime` DateTime64(6),
    `tpep_dropoff_datetime` DateTime64(6),
    `passenger_count` Float64,
    `trip_distance` Float64,
    `RatecodeID` Float64,
    `store_and_fwd_flag` String,
    `PULocationID` Int64,
    `DOLocationID` Int64,
    `payment_type` Int64,
    `fare_amount` Float64,
    `extra` Float64,
    `mta_tax` Float64,
    `tip_amount` Float64,
    `tolls_amount` Float64,
    `improvement_surcharge` Float64,
    `total_amount` Float64,
    `congestion_surcharge` Float64,
    `airport_fee` Float64
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(tpep_pickup_datetime)
ORDER BY (VendorID, tpep_pickup_datetime, PULocationID, DOLocationID);

ثم حمِّل البيانات من جدول كتالوج Nessie عبر INSERT INTO SELECT:

INSERT INTO taxis 
SELECT * FROM demo.`default.taxis`;
Navigation