Consultas en ClickHouse CloudLos datos de esta tabla del sistema se almacenan localmente en cada nodo de ClickHouse Cloud. Por lo tanto, para obtener una vista completa de todos los datos, es necesario usar la función
clusterAllReplicas. Consulta aquí para más detalles.Descripción
MergeTree. La tabla se rellena solo cuando predicate_statistics_sample_rate es mayor que 0.
Use esta tabla para examinar hasta qué punto son selectivos los predicados de usuario en cargas de trabajo reales y cuántos gránulos quedan después del filtrado por clave primaria o por índice de omisión. Los datos sirven de entrada para recomendaciones de índices y proyecciones basadas en la carga de trabajo.
Estructura de las filas
system.predicate_statistics_log:
- Filas de filtro, emitidas en cada paso de prewhere/filtro en
MergeTreeSelectProcessor. Completanpredicate_expression,input_rows,passed_rows,filter_selectivityy las columnas del predicado completototal_input_rows,total_passed_rows,total_selectivity. Las columnas relacionadas con índices quedan vacías. - Filas de índice, emitidas en cada paso de lectura en
ReadFromMergeTree. Completan los arraysindex_names,index_types,total_granules,granules_aftereindex_selectivities, con una entrada por cada etapa del índice (clave primaria, partición, índices de omisión). Las columnas relacionadas con predicados quedan vacías.
query_id y la misma table, por lo que se pueden unir cuando se necesiten ambas.
Muestreo y sobrecarga
predicate_statistics_sample_rate:
0desactiva la recopilación.1toma una muestra de cada consulta.N > 1toma muestras de aproximadamente1 / Nde las consultas, aplicando hash aquery_id.
SYSTEM FLUSH LOGS si necesitas que las filas aparezcan de inmediato.
Columnas
hostname(LowCardinality(String)) — Hostname del servidor que ejecuta la consulta.event_date(Date) — Fecha del evento.event_time(DateTime) — Marca temporal en la que se escribió esta entrada de log.database(LowCardinality(String)) — Nombre de la base de datos de la tabla de destino.table(LowCardinality(String)) — Nombre de la tabla de destino.query_id(String) — ID de la consulta para vincularla de nuevo con query_log.predicate_expression(String) — Expresión de filtro completa procesada en este paso de prewhere/filter (volcado de ActionsDAG).input_rows(UInt64) — Filas que entran en este paso de prewhere/filter.passed_rows(UInt64) — Filas que pasan este paso de prewhere/filter.filter_selectivity(Float64) — Selectividad de este paso: passed_rows / input_rows.total_input_rows(UInt64) — Filas que entran en el primer paso de prewhere (total de filas leídas de los gránulos).total_passed_rows(UInt64) — Filas que pasan todos los pasos de prewhere (filas entregadas a la consulta).total_selectivity(Float64) — Selectividad del predicado completo: total_passed_rows / total_input_rows.index_names(Array(LowCardinality(String))) — Nombres de los índices aplicados, por ejemplo [‘PrimaryKey’, ‘idx_bf_status’] (solo para filas de índice).index_types(Array(LowCardinality(String))) — Tipos de índices aplicados: PrimaryKey, Skip, MinMax, Partition (solo para filas de índice).total_granules(Array(UInt64)) — Gránulos que entran en cada etapa del índice (solo para filas de índice).granules_after(Array(UInt64)) — Gránulos restantes después de cada etapa del índice (solo para filas de índice).index_selectivities(Array(Float64)) — Selectividad por índice: granules_after / total_granules (solo para filas de índice).