Ejemplo: Usaremos un conjunto de datos ficticio con el número de visitas por hora para un grupo de nombres de dominio. Nuestro objetivo
- Necesitamos los datos agregados por mes para cada nombre de dominio,
- También necesitamos los datos agregados por año para cada nombre de dominio.
- Escribir consultas que lean y agreguen los datos durante la consulta SELECT
- Preparar los datos durante la ingesta en un nuevo formato
- Preparar los datos durante la ingesta para una agregación específica.
Tabla de origen para las vistas materializadas
Null.
Puedes crear una vista materializada sobre una tabla Null. Así, los datos escritos en la tabla se reflejarán en la vista, pero los datos originales en bruto seguirán descartándose.
Tabla agregada mensual y vista materializada
Target; en este ejemplo, será analytics.monthly_aggregated_data y almacenará la suma de las vistas por mes y por nombre de dominio.
Tabla anual agregada y vista materializada
monthly_aggregated_data.
Primero, crearemos una nueva tabla de destino que almacenará la suma de las visualizaciones agregadas por año para cada nombre de dominio.
FROM usará la tabla monthly_aggregated_data, lo que significa que el flujo de datos será el siguiente:
- Los datos llegan a la tabla
hourly_data. - ClickHouse reenviará los datos recibidos a la tabla de la primera vista materializada,
monthly_aggregated_data, - Por último, los datos recibidos en el paso 2 se reenviarán a
year_aggregated_data.
Un malentendido común al trabajar con vistas materializadas es pensar que los datos se leen de la tabla. No es así como funcionan las
vistas materializadas; los datos que se propagan son el bloque insertado, no el resultado final de la tabla.Imaginemos, en este ejemplo, que el motor usado en monthly_aggregated_data es CollapsingMergeTree; los datos que se reenvían a nuestra segunda vista materializada, year_aggregated_data_mv, no serán el resultado final de la tabla colapsada, sino el bloque de datos con los campos definidos como en SELECT ... GROUP BY.Si usas CollapsingMergeTree, ReplacingMergeTree o incluso SummingMergeTree y planeas crear una vista materializada en cascada, debes comprender las limitaciones que se describen aquí.Datos de ejemplo
analytics.hourly_data, verás lo siguiente, porque el motor de tabla es Null, pero los datos se procesaron.
Resultados
sumCountViews, verás la representación binaria (en algunos terminales), ya que el valor no se almacena como un número, sino como un tipo AggregateFunction.
Para obtener el resultado final de la agregación, debes usar el sufijo -Merge.
Puedes ver los caracteres especiales almacenados en AggregateFunction con esta consulta:
Merge para obtener el valor sumCountViews:
AggregatingMergeTree hemos definido AggregateFunction como sum, por lo que podemos usar sumMerge. Si usamos la función avg en AggregateFunction, utilizaremos avgMerge, y así sucesivamente.
monthly_aggregated_data, podemos obtener los datos agregados por mes para cada nombre de dominio:
Combinar varias tablas de origen en una sola tabla de destino
UNION ALL.
Primero, cree dos tablas de origen que representen distintos conjuntos de métricas:
Target con el conjunto combinado de métricas:
Target. No es necesario incluir explícitamente las columnas que faltan:
Target:
Target: