En este tutorial, descubrirá cómo usar ClickHouse para ejecutar consultas analíticas sobre grandes volúmenes de datos.
También verá cómo utilizar un diccionario para enriquecer los datos y escribir consultas con JOIN.
Requisitos previos
Para este tutorial, necesitará:- Una cuenta de ClickHouse Cloud (300 USD en créditos gratuitos al registrarte)
- Un servicio de ClickHouse Cloud
Cree la tabla
El conjunto de datos que se utiliza en este tutorial es el de los taxis de la ciudad de Nueva York, que contiene información sobre millones de viajes en taxi, con columnas como el importe de la propina, los peajes, el tipo de pago, entre otras.
- Seleccione SQL console en el menú de la izquierda
- Haga clic en la pestaña + situada junto al icono de inicio para crear una nueva consulta
- En el editor SQL, escriba la siguiente consulta y, a continuación, haga clic en Run:
Expandable
Inserte los datos
Ahora que ha creado una tabla, añada los datos de taxis de la ciudad de Nueva York a partir de archivos CSV almacenados en S3.El siguiente comando inserta aproximadamente 2.000.000 de filas en su tabla trips a partir de dos archivos distintos en S3: Espere a que finalice la inserción de los datos. Se descargarán alrededor de 150 MB de datos.
Una vez finalizada la inserción, compruebe el número de filas de la tabla Deberías obtener como resultado 1,999,657 filas
trips_1.tsv.gz y trips_2.tsv.gz:Expandable
trips:Analice los datos
Con los datos ya cargados, puede ejecutar algunas consultas para analizarlos.
-
Calcule el importe medio de las propinas:
-
Calcule el coste medio en función del número de pasajeros:
-
Calcule el número diario de recogidas por barrio:
-
Calcule la duración de cada viaje en minutos y agrupe los resultados según esa duración:
-
Muestre el número de recogidas en cada barrio, desglosado por hora del día:
Cree un diccionario
A continuación, creará un diccionario (una correspondencia de pares clave-valor almacenada en memoria) llamado Compruebe que ha funcionado. La siguiente consulta debería devolver 265 filas, es decir, una por cada barrio:
taxi_zone_dictionary que asocia los ID de ubicación con los nombres de los distritos de NYC, a partir de un archivo CSV que contiene todos los barrios de la ciudad de Nueva York.
Estos ID corresponden a las columnas pickup_nyct2010_gid y dropoff_nyct2010_gid de la tabla trips.A continuación se muestra, en formato de tabla, un extracto del archivo CSV que va a utilizar. La columna LocationID del archivo se corresponde con las columnas pickup_nyct2010_gid y dropoff_nyct2010_gid de su tabla trips:Ejecute el siguiente comando SQL, que crea un diccionario llamado
taxi_zone_dictionary y lo puebla con los datos del archivo CSV almacenado en S3. La URL del archivo es https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/taxi_zone_lookup.csv.Si se establece
LIFETIME en 0, se desactivan las actualizaciones automáticas para evitar tráfico innecesario hacia nuestro bucket de S3. En otros casos, puede que le convenga configurarlo de otra forma. Para obtener más información, consulte Actualización de los datos del diccionario mediante LIFETIME.Ejecutar consultas con el diccionario
Puede usar la función JFK está en Queens. Observe que el tiempo necesario para obtener el valor es prácticamente 0:Use la función La siguiente consulta devuelve 0 porque 4567 no es un valor de Utilice la función Esta consulta suma el número de viajes en taxi por distrito que terminan en el aeropuerto de LaGuardia o en el de JFK. El resultado es el siguiente; observe que hay bastantes viajes cuyo barrio de recogida se desconoce:
dictGet (o sus variantes) para obtener un valor de un diccionario.
Basta con indicar el nombre del diccionario, el valor que desea y la clave (que en nuestro ejemplo es la columna LocationID de taxi_zone_dictionary) para obtener el valor correspondiente.
Por ejemplo, la siguiente consulta devuelve el Borough cuyo LocationID es 132 (que corresponde al aeropuerto JFK):dictHas para comprobar si una clave existe en el diccionario. Por ejemplo, la siguiente consulta devuelve 1 (que en ClickHouse equivale a “true”):LocationID del diccionario:dictGet para obtener el nombre de un distrito en una consulta. Por ejemplo:Realizar un JOIN
Por último, escriba algunas consultas que hagan un join de La respuesta es idéntica a la de la consulta con Esta consulta devuelve las filas de los 1000 viajes con el importe de propina más alto y, a continuación, realiza un inner join de cada fila con el diccionario:
taxi_zone_dictionary con su tabla trips.Comience con un JOIN sencillo que funcione de forma similar a la consulta anterior sobre aeropuertos:dictGet:Observe que el resultado de la consulta
JOIN anterior es el mismo que el de la consulta previa que usaba dictGetOrDefault (salvo que no se incluyen los valores Unknown).
Internamente, ClickHouse está llamando a la función dictGet sobre el diccionario taxi_zone_dictionary, pero la sintaxis JOIN resulta más familiar para los desarrolladores de SQL.Próximos pasos
Obtenga más información sobre ClickHouse en la siguiente documentación:- Introducción a los índices primarios en ClickHouse: Descubra cómo ClickHouse utiliza índices primarios dispersos para localizar de forma eficiente los datos relevantes durante las consultas.
- Integrar una fuente de datos externa: Consulte las opciones de integración de fuentes de datos, como archivos, Kafka, PostgreSQL, canalizaciones de datos y muchas más.
- Visualizar datos en ClickHouse: Conecte su herramienta de UI/BI favorita a ClickHouse.
- Referencia de SQL: Explore las funciones SQL disponibles en ClickHouse para transformar, procesar y analizar datos.