Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

catálogo REST

Funcionalidad beta

ClickHouse admite la integración con múltiples catálogos (Unity, Glue, REST, Polaris, etc.). En esta guía se explica cómo consultar sus datos con ClickHouse y la especificación catálogo REST.

El catálogo REST es una especificación de API estandarizada para catálogos Iceberg, compatible con varias plataformas, entre ellas:

  • Entornos de desarrollo local (con configuraciones de docker-compose)
  • Servicios gestionados como Tabular.io
  • Implementaciones self-hosted de catálogo REST

Configuración para desarrollo local

Para el desarrollo y las pruebas locales, puedes usar una configuración de catálogo REST basada en contenedores. Este enfoque es ideal para el aprendizaje, la creación de prototipos y los entornos de desarrollo.

Requisitos previos

  1. Docker and Docker Compose: Asegúrate de que Docker esté instalado y en funcionamiento
  2. Configuración de ejemplo: Puedes usar varias configuraciones de docker-compose (consulta las imágenes de Docker alternativas más abajo)

Configuración de un catálogo REST local

Puede usar varias implementaciones de catálogo REST en contenedores, como Databricks docker-spark-iceberg, que proporciona un entorno completo de Spark + Iceberg + catálogo REST con docker-compose, por lo que resulta ideal para probar integraciones con Iceberg.

Paso 1: Cree una carpeta nueva en la que ejecutar el ejemplo y, a continuación, cree un archivo docker-compose.yml con la configuración de Databricks docker-spark-iceberg.

Paso 2: A continuación, cree un archivo docker-compose.override.yml y añada en él la siguiente configuración del contenedor de ClickHouse:

version: '3.8'

services:
  clickhouse:
    image: clickhouse/clickhouse-server:25.5.6
    container_name: clickhouse
    user: '0:0'  # Garantiza permisos de root
    ports:
      - "8123:8123"
      - "9002:9000"
    volumes:
      - ./clickhouse:/var/lib/clickhouse
      - ./clickhouse/data_import:/var/lib/clickhouse/data_import  # Montar carpeta del dataset
    networks:
      - iceberg_net
    environment:
      - CLICKHOUSE_DB=default
      - CLICKHOUSE_USER=default
      - CLICKHOUSE_DO_NOT_CHOWN=1
      - CLICKHOUSE_PASSWORD=

Paso 3: Ejecuta el siguiente comando para iniciar los servicios:

docker compose up

Paso 4: Espera a que todos los servicios estén listos. Puedes revisar los logs:

docker-compose logs -f

Conectarse al REST Catalog local

Conéctese al contenedor de ClickHouse:

docker exec -it clickhouse clickhouse-client

Luego, cree la conexión de base de datos al catálogo REST:

SET allow_database_iceberg = 1;

CREATE DATABASE demo
ENGINE = DataLakeCatalog('http://rest:8181/v1', 'admin', 'password')
SETTINGS 
    catalog_type = 'rest', 
    storage_endpoint = 'http://minio:9000/lakehouse', 
    warehouse = 'demo'

Consultar tablas del catálogo REST con ClickHouse

Ahora que la conexión está lista, puedes empezar a hacer consultas a través del catálogo REST. Por ejemplo:

USE demo;

SHOW TABLES;

Si su configuración incluye datos de ejemplo (como el conjunto de datos de taxis), debería ver tablas como:

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

Para consultar una tabla (si está disponible):

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

Para inspeccionar el DDL de la tabla:

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://minio:9000/lakehouse/warehouse/default/taxis/', 'admin', '[HIDDEN]') │
└───────────────────────────────────────────────────────────────────────────────────────────────┘

Cargar datos desde tu lago de datos a ClickHouse

Si necesitas cargar datos desde el catálogo REST a ClickHouse, empieza por crear una tabla local en 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);

A continuación, carga los datos desde la tabla de tu catálogo REST mediante un INSERT INTO SELECT:

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