Analítica en tiempo realAlmacén de datosObservabilidadIA/MLCloudOss
Requisitos previos
- A running ClickHouse Cloud service. If you don’t have one yet, complete the Create your first Cloud service quickstart first.
Lo que crearás
ORDER BY y un PARTITION BY apropiados, cargarás datos directamente desde S3 y luego consultarás system.parts para ver cómo ClickHouse organiza físicamente los datos en disco.
Al final, entenderás por qué el motor MergeTree es la base de casi todas las tablas de ClickHouse y cómo sus decisiones de ordenación y particionamiento influyen directamente en el rendimiento de las consultas.
Comprende cómo funciona MergeTree
Antes de escribir cualquier SQL, conviene entender qué hace que MergeTree sea diferente de una tabla de base de datos tradicional.Cuando insertas datos en una tabla MergeTree, ClickHouse no escribe las filas una por una. En su lugar, escribe una parte de datos -un pequeño fragmento de filas ordenado y comprimido- directamente en disco. Después, ClickHouse fusiona estas partes gradualmente en segundo plano. De ahí viene el nombre: merge + tree.Cada parte de datos se ordena según la expresiónORDER BY de la tabla. Este orden se convierte en el índice de clave primaria, lo que permite a ClickHouse omitir grandes bloques de datos que no necesita leer durante una consulta (a esto lo llamamos poda de datos). Cuanto más selectivas sean las columnas de ORDER BY para tus consultas más habituales, menos datos leerá ClickHouse.Tres cláusulas controlan cómo MergeTree organiza tus datos:| Cláusula | Qué hace |
|---|---|
ORDER BY | Ordena físicamente los datos dentro de cada parte. Determina la clave primaria. Es obligatorio. |
PARTITION BY | Divide los datos en particiones independientes, normalmente por un intervalo de fechas. Las partes de distintas particiones nunca se fusionan entre sí, lo que permite una poda de particiones rápida. |
PRIMARY KEY | De forma predeterminada, usa ORDER BY, a menos que establezcas explícitamente un prefijo más corto. A partir de esto se construye el índice disperso. |
Vista previa de los datos de origen
Antes de crear su tabla, inspeccione el archivo de origen con la función de tablas3. Esto le permite consultar S3 directamente sin tener que escribir antes ningún dato en ClickHouse.Ejecute lo siguiente en su consola SQL:Nullable(String). ClickHouse está leyendo un CSV sin procesar, por lo que no conoce los tipos de datos reales; eso es algo que corregirás cuando diseñes el esquema de tu tabla en el siguiente paso.Previsualiza unas cuantas filas:id de la transacción, el price de venta, la date, el type de propiedad, campos de dirección e identificadores geográficos. También observarás dos columnas finales (column15, column16) vacías; pueden ignorarse.Verifica esto confirmando que puedes ver filas con columnas que incluyen id, price, date, postcode, type, town y county.Diseña y crea tu tabla MergeTree
Ahora crea una tabla permanente con un esquema adecuado. Los siguientes tipos de columna se han elegido deliberadamente:LowCardinality(String)se usa para columnas con un número limitado de valores únicos (códigos postales, nombres de localidades, nombres de condados). Utiliza codificación por diccionario internamente y reduce drásticamente el espacio de almacenamiento, además de mejorar el rendimiento de la agrupación y el filtrado en estas columnas.Enum8codifica las columnastypeydurationcomo enteros pequeños en disco, al tiempo que mantiene etiquetas de texto legibles en las consultas. El CSV de origen usa códigos de una sola letra, así que los asignaremos durante la inserción.PARTITION BY toYYYYMM(date)crea una partición por mes natural, lo que permite a ClickHouse omitir meses completos cuando la cláusulaWHEREfiltra pordate.ORDER BY (postcode, addr1, addr2)ordena los datos para permitir búsquedas rápidas por dirección de la propiedad, el patrón de acceso más natural para este conjunto de datos.
ENGINE = MergeTree, ClickHouse Cloud ha creado la tabla con SharedMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}'). Esto es normal: Cloud convierte automáticamente MergeTree en SharedMergeTree, lo que añade compatibilidad con la replicación y el almacenamiento compartido. El comportamiento y la interfaz de consulta siguen siendo los mismos.Cargar datos desde S3
Inserte el conjunto de datos completo seleccionándolo directamente desde la función de tablas3(). ClickHouse transmite el archivo comprimido desde S3 y lo escribe en su tabla como partes ordenadas.T para vivienda adosada, F para plena propiedad, Y/N para obra nueva), usamos transform para asignarles etiquetas legibles y toUInt32/if para convertir las columnas numéricas. Las columnas id, column15 y column16 se excluyen porque no las necesitamos.Esto tardará uno o dos minutos, según el tamaño de tu servicio. Cuando termine, confirma el recuento de filas:Inspeccionar las partes con system.parts
Aquí es donde se hacen visibles los componentes internos de MergeTree. La tablasystem.parts realiza un seguimiento de cada parte de datos almacenada en disco de cada tabla MergeTree de su servicio.partition- el valorYYYYMMderivado de tu expresiónPARTITION BY. Los datos de cada mes quedan aislados.name- el nombre de la parte codifica la partición, el rango de números de bloque y el nivel de fusión (p. ej.,199501_1_4_2significaría la partición199501, los bloques 1–4, fusionados dos veces).marks- el número de gránulos de índice. Cada gránulo cubre 8.192 filas de forma predeterminada, y el índice de clave primaria almacena una entrada por gránulo. Este índice disperso es el que permanece en memoria y permite descartar datos rápidamente.bytes_on_disk- ClickHouse comprime cada parte columna por columna usando LZ4 de forma predeterminada. Compáralo con el tamaño sin comprimir para apreciar la relación de compresión.
active = true garantiza que solo vea las partes actuales, ya fusionadas, en lugar de partes antiguas pendientes de limpieza.Consulta los datos y observa el comportamiento de la clave primaria
Ahora ejecuta algunas consultas analíticas reales. Primero, identifica las ventas de mayor importe jamás registradas:price no forma parte de la clave ORDER BY, ClickHouse no puede usar el índice primario para omitir datos y debe recorrer toda la tabla.A continuación, busca el precio medio de venta por condado:county no está en el ORDER BY ni en el PARTITION BY, por lo que ClickHouse escanea toda la tabla.Ahora ejecuta una consulta que combine la agregación con tu ORDER BY. Como los datos están ordenados por (postcode, addr1, addr2), filtrar por un prefijo de código postal permite a ClickHouse omitir gran parte de la tabla. Aquí calculamos el precio medio de venta por año de las propiedades de la zona del código postal SW1A:postcode debería leer solo una fracción de las filas de la tabla, lo que demuestra cómo funciona el índice de clave primaria. Compárala con las consultas anteriores, que escanean la tabla de forma más amplia; la diferencia muestra por qué es importante elegir el ORDER BY adecuado.