Saltar al contenido principal

Descripción general

Este tutorial sigue el [tutorial de ClickHouse], pero ejecuta todas las consultas a través de pg_clickhouse.

Iniciar ClickHouse

Primero, cree una base de datos en ClickHouse si aún no tiene una. Una forma rápida de empezar es usar la imagen de Docker:

Crear una tabla

Tomemos como referencia el [tutorial de ClickHouse] para crear una base de datos sencilla con el conjunto de datos de taxis de la ciudad de Nueva York:

Añade el conjunto de datos

Y luego importa los datos:
Asegúrate de poder consultarlo y luego sal del cliente:

Instalar pg_clickhouse

Compila e instala pg_clickhouse desde PGXN o GitHub. O bien, inicia un contenedor de Docker con la [imagen de pg_clickhouse], que simplemente añade pg_clickhouse a la [imagen de Postgres] de Docker:

Conectar pg_clickhouse

Ahora, conéctese a Postgres:
Y cree pg_clickhouse:
Cree un servidor externo usando el nombre de host, el puerto y la base de datos para su base de datos de ClickHouse.
Aquí hemos optado por usar el controlador binario, que utiliza el protocolo binario de ClickHouse. También puede usar el controlador “http”, que utiliza la interfaz HTTP. A continuación, asigne un usuario de PostgreSQL a uno de ClickHouse. La forma más sencilla de hacerlo es asignar el usuario actual de PostgreSQL a un usuario remoto para el servidor externo:
También puedes especificar la opción password. Ahora, agrega la tabla taxi; simplemente importa todas las tablas de la base de datos remota de ClickHouse a un esquema de Postgres:
Y ahora la tabla debería haberse importado: en psql, usa \det+ para verla:
¡Listo! Usa \d para mostrar todas las columnas:
Ahora, consulta la tabla:
Observa con qué rapidez se ejecutó la consulta. pg_clickhouse delega toda la consulta, incluida la agregación COUNT(), por lo que se ejecuta en ClickHouse y solo devuelve una única fila a Postgres. Usa EXPLAIN para verlo:
Ten en cuenta que “Foreign Scan” aparece en la raíz del plan, lo que significa que la consulta completa se ejecutó en ClickHouse.

Analiza los datos

Ejecuta algunas consultas para analizar los datos. Revisa los siguientes ejemplos o prueba tu propia consulta SQL.
  • Calcula el importe medio de la propina:
  • Calcule el coste medio en función del número de pasajeros:
  • Calcula el número diario de recogidas por barrio:
  • Calcula la duración de cada viaje en minutos y luego agrupa los resultados según la duración del viaje:
  • Muestra el número de recogidas en cada barrio, desglosado por hora del día:
  • Configura la zona horaria de visualización para Nueva York y consulta los viajes a los aeropuertos LaGuardia o JFK:

Crear un diccionario

Crea un diccionario asociado a una tabla de tu servicio de ClickHouse. La tabla y el diccionario se basan en un archivo CSV que contiene una fila por cada barrio de la ciudad de Nueva York. Los barrios se corresponden con los nombres de los cinco distritos de la ciudad de Nueva York (Bronx, Brooklyn, Manhattan, Queens y Staten Island), así como con el Aeropuerto de Newark (EWR). Aquí tienes un fragmento del archivo CSV que estás usando, en formato de tabla. La columna LocationID del archivo se corresponde con las columnas pickup_nyct2010_gid y dropoff_nyct2010_gid de tu tabla de viajes:
  1. Aún en Postgres, usa la función clickhouse_raw_query para crear un [Diccionario] de ClickHouse llamado taxi_zone_dictionary y rellenarlo a partir del archivo CSV en S3:
Establecer LIFETIME en 0 desactiva las actualizaciones automáticas para evitar tráfico innecesario hacia nuestro bucket de S3. En otros casos, puede que quieras configurarlo de otra forma. Para obtener más información, consulta Actualización de datos de diccionario con LIFETIME.
  1. Ahora impórtalo:
  1. Confirma que se puede consultar:
  1. Excelente. Ahora utiliza la función dictGet para obtener el nombre de un distrito en una consulta. Esta consulta suma el número de viajes en taxi por distrito que terminan en el aeropuerto de LaGuardia o en el JFK:
Esta consulta suma el número de viajes en taxi por distrito que terminan en los aeropuertos LaGuardia o JFK. Fíjate en que hay bastantes viajes en los que se desconoce el barrio de recogida.

Realiza un JOIN

Escribe algunas consultas que hagan un JOIN entre taxi_zone_dictionary y tu tabla trips.
  1. Empieza con un JOIN simple que funcione de forma similar a la consulta anterior sobre aeropuertos:
Observa que la salida de la consulta JOIN anterior es la misma que la de la consulta dictGet anterior (excepto que no se incluyen los valores Unknown). Internamente, ClickHouse está llamando a la función dictGet para el diccionario taxi_zone_dictionary, pero la sintaxis JOIN resulta más familiar para los desarrolladores de SQL.
  1. Esta consulta devuelve las filas correspondientes a los 1000 viajes con la propina más alta y luego realiza un INNER JOIN de cada fila con el diccionario:
Por lo general, evitamos usar SELECT * en PostgreSQL y ClickHouse. Solo debes recuperar las columnas que realmente necesitas.
Última modificación el 10 de junio de 2026