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.

Inicia ClickHouse

Primero, crea una base de datos en ClickHouse si aún no tienes 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ñadir el conjunto de datos

A continuación, importa los datos:
Comprueba que puedas hacer una consulta y luego sal del cliente:

Instalar pg_clickhouse

Compila e instala pg_clickhouse desde PGXN o GitHub. O bien, crea un contenedor Docker con la [imagen de pg_clickhouse], que no hace más que añadir pg_clickhouse a la [imagen de Postgres] de Docker:

Conectar pg_clickhouse

Ahora, conéctate a Postgres:
Y cree pg_clickhouse:
Cree un servidor externo con el nombre de host, el puerto y la base de datos de su instancia de ClickHouse.
Aquí hemos optado por usar el driver binario, que utiliza el protocolo binario de ClickHouse. También puede usar el driver “http”, que utiliza la interfaz HTTP. A continuación, asigne un usuario de PostgreSQL a un usuario de ClickHouse. La forma más sencilla de hacerlo es simplemente 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 de taxis; 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 envía la consulta completa, incluido el agregado COUNT(), a ClickHouse, por lo que se ejecuta allí 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 trasladó a ClickHouse.

Analizar los datos

Ejecuta algunas consultas para analizar los datos. Revisa los siguientes ejemplos o prueba tu propia consulta SQL.
  • Calcule el importe medio de la propina:
  • Calcula el costo promedio según el número de pasajeros:
  • Calcula cuántas recogidas diarias hay por barrio:
  • Calcula la duración de cada viaje en minutos y luego agrupa los resultados por la duración del viaje:
  • Muestra la cantidad de recogidas en cada barrio, desglosada por hora del día:
  • Establece la zona horaria de visualización en Nueva York y recupera los viajes a los aeropuertos LaGuardia o JFK:

Crear un diccionario

Cree un diccionario asociado a una tabla de su 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 asignan a los nombres de los cinco distritos de la ciudad de Nueva York (Bronx, Brooklyn, Manhattan, Queens y Staten Island), además de Newark Airport (EWR). A continuación se muestra un extracto del archivo CSV que está usando, en formato de tabla. La columna LocationID del archivo se asigna a las columnas pickup_nyct2010_gid y dropoff_nyct2010_gid de su tabla de viajes:
  1. Aún en Postgres, use la función clickhouse_raw_query para crear un [diccionario] de ClickHouse llamado taxi_zone_dictionary y cargar el diccionario desde el archivo CSV en S3:
Establecer LIFETIME en 0 desactiva las actualizaciones automáticas para evitar tráfico innecesario a nuestro bucket de S3. En otros casos, puede configurarlo de otra manera. Para obtener más información, consulte Actualizar los datos del diccionario mediante LIFETIME.
  1. Ahora impórtelo:
  1. Comprueba que se puede consultar:
  1. Excelente. Ahora usa 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 LaGuardia o JFK:
Esta consulta suma la cantidad de viajes en taxi por distrito que terminan en los aeropuertos LaGuardia o JFK. Observe que hay bastantes viajes en los que se desconoce el barrio de origen.

Realizar un JOIN

Escriba algunas consultas que hagan JOIN entre taxi_zone_dictionary y la tabla trips.
  1. Comience con un JOIN simple que funcione de forma similar a la consulta anterior sobre aeropuertos:
Tenga en cuenta 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). Entre bastidores, ClickHouse en realidad llama 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 de los 1000 viajes con el importe de propina más alto y, a continuación, realiza un JOIN interno entre cada fila y el diccionario:
En general, evitamos usar SELECT * en PostgreSQL y ClickHouse. Solo debes recuperar las columnas que realmente necesitas.
Última modificación el 19 de junio de 2026