- Schémas :
Vue COLUMN_QUERY_PRUNING_HISTORY¶
Utilisez cette vue Utilisation du compte pour mieux comprendre les modèles d’accès aux données lors de l’exécution d’une requête, notamment certains détails au niveau des colonnes, tels que le « type d’accès » et les expressions d’optimisation de recherche candidates qui pourraient s’avérer utiles.
Vous pouvez utiliser cette vue en combinaison avec Vue TABLE_QUERY_PRUNING_HISTORY. Par exemple, vous pouvez identifier l’accès aux tables cibles en utilisant la vue TABLE_QUERY_PRUNING_HISTORY, puis identifier les colonnes fréquemment utilisées dans ces tables à l’aide de la vue COLUMN_QUERY_PRUNING_HISTORY.
Chaque ligne de cette vue représente l’historique des requêtes éliminées pour une colonne spécifique au cours d’un intervalle de temps donné. Les données sont agrégées par colonne, par table, par intervalle et comprennent des métriques telles que le nombre de requêtes exécutées, les partitions analysées, les partitions supprimées, les lignes analysées, les lignes supprimées et les lignes correspondantes.
Voir aussi Vue TABLE_PRUNING_HISTORY et Élagage de requête.
Colonnes¶
Nom de la colonne |
Type de données |
Description |
---|---|---|
INTERVAL_START_TIME |
TIMESTAMP_LTZ |
Début de l’intervalle de temps (sur le repère horaire) pendant lequel les requêtes ont été exécutées et complétées. |
INTERVAL_END_TIME |
TIMESTAMP_LTZ |
Fin de l’intervalle de temps (sur le repère horaire) pendant lequel les requêtes ont été exécutées et terminées. |
TABLE_ID |
NUMBER |
Identificateur interne/généré par le système pour la table qui a été interrogée. |
TABLE_NAME |
VARCHAR |
Nom de la table interrogée. |
SCHEMA_ID |
NUMBER |
Identificateur interne/généré par le système pour le schéma contenant la table interrogée. |
SCHEMA_NAME |
VARCHAR |
Nom du schéma contenant la tâche de la table interrogée. |
DATABASE_ID |
NUMBER |
Identificateur interne/généré par le système pour la base de données contenant la table interrogée. |
DATABASE_NAME |
VARCHAR |
Nom de la base de données contenant la table interrogée. |
WAREHOUSE_ID |
NUMBER |
Identificateur interne / généré par le système pour l’entrepôt utilisé pour exécuter des requêtes. |
WAREHOUSE_NAME |
VARCHAR |
Nom de l’entrepôt qui a exécuté les requêtes. |
QUERY_HASH |
VARCHAR |
La valeur de hachage calculée sur la base du texte SQL canonisé. |
QUERY_PARAMETERIZED_HASH |
VARCHAR |
La valeur de hachage calculée à partir de la requête paramétrée. |
COLUMN_ID |
NUMBER |
Identificateur interne/généré par le système pour la colonne accessible à partir de la table interrogée. |
COLUMN_NAME |
VARCHAR |
Nom de la colonne consultée à partir de la table qui a fait l’objet de la requête. |
VARIANT_PATH |
VARCHAR |
Chemin d’accès aux données semi-structurées consultées (le cas échéant). NULL si la colonne consultée ne possède pas de type de données semi-structurées. |
ACCESS_TYPE |
VARCHAR |
Type d’accès effectué sur la colonne (condition |
NUM_QUERIES |
NUMBER |
Nombre de requêtes exécutées dans cet intervalle de temps avec cette valeur QUERY_HASH spécifique, en utilisant cet entrepôt, en accédant à cette colonne (et au chemin de variante, le cas échéant) sur cette table avec ce type d’accès. |
AGGREGATE_QUERY_ELAPSED_TIME |
NUMBER |
Temps total écoulé (en millisecondes) pour les requêtes définies par NUM_QUERIES. Ce total comprend le temps d’attente et tout autre temps non lié à la compilation et à l’exécution. |
AGGREGATE_QUERY_COMPILATION_TIME |
NUMBER |
Temps total de compilation (en millisecondes) pour les requêtes définies par NUM_QUERIES. |
AGGREGATE_QUERY_EXECUTION_TIME |
NUMBER |
Temps d’exécution total (en millisecondes) pour les requêtes définies par NUM_QUERIES. |
PARTITIONS_SCANNED |
NUMBER |
Nombre de partitions analysées sur cette table pour les requêtes définies par NUM_QUERIES. |
PARTITIONS_PRUNED |
NUMBER |
Nombre de partitions supprimées dans cette table pour les requêtes définies par NUM_QUERIES. Ces partitions ont été supprimées lors du traitement de la requête et non analysées, ce qui améliore l’efficacité de la requête. |
ROWS_SCANNED |
NUMBER |
Nombre de lignes analysées dans cette table pour les requêtes définies par NUM_QUERIES. |
ROWS_PRUNED |
NUMBER |
Nombre de lignes supprimées dans cette table pour les requêtes définies par NUM_QUERIES. Ces lignes ont été supprimées lors du traitement de la requête et non analysées, ce qui améliore l’efficacité de la requête. |
ROWS_MATCHED |
NUMBER |
Nombre de lignes correspondant aux filtres de la clause WHERE lors de l’analyse de cette table pour les requêtes définies par NUM_QUERIES. |
SEARCH_OPTIMIZATION_SUPPORTED_EXPRESSIONS |
ARRAY |
Liste des expressions d’optimisation de recherche prises en charge dans cette colonne qui pourraient potentiellement accélérer l’analyse de cette table pour les requêtes définies par NUM_QUERIES. |
Notes sur l’utilisation¶
La latence pour la vue peut atteindre 4 heures.
Les données sont conservées pendant 1 an.
Cette vue n’inclut pas les informations d’élagage pour les tables hybrides.
Les utilisateurs et les rôles auxquels le rôle de base de données USAGE_VIEWER a été attribué peuvent accéder à cette vue. Pour plus d’informations, voir Rôles des bases de données SNOWFLAKE.
La colonne ACCESS_TYPE contient l’une des valeurs suivantes :
Le comportement d’accès affiché dans cette vue reflète le plan de requête réel qui a été exécuté, lequel peut différer du texte de requête d’origine. Par exemple, si une clause HAVING ne fait pas référence aux résultats agrégés produits par la clause GROUP BY, elle peut être optimisée et réécrite sous la forme d’une clause WHERE, et la valeur ACCESS_TYPE sera
WHERE
.Pour les conditions de filtrage complexes qui ne peuvent pas bénéficier d’une optimisation pushdown, les lignes peuvent ne pas être filtrées lors de l’opération d’analyse de la table, même si elles ne répondent pas à la condition de filtrage. Par conséquent, ces lignes sont comptées dans la valeur ROWS_MATCHED.
Actuellement, la colonne SEARCH_OPTIMIZATION_SUPPORTED_EXPRESSIONS suggère uniquement les méthodes de recherche EQUALITY et SUBSTRING.
Cette vue conserve les données des 1 000 analyses de table les plus longues par requête. Seules les requêtes extrêmement complexes dépassent ce nombre d’analyses, de sorte que les données sont rarement omises.
Exemple¶
Pour un jour donné, renvoie l’historique des suppressions au niveau des colonnes pour les requêtes effectuées sur une table spécifique :
SELECT interval_start_time, table_name, column_name, access_type, num_queries,
rows_scanned, rows_pruned, rows_matched,
search_optimization_supported_expressions::VARCHAR as search_optim
FROM SNOWFLAKE.ACCOUNT_USAGE.COLUMN_QUERY_PRUNING_HISTORY
WHERE interval_start_time like '2025-04-24%' AND table_name='SENSOR_DATA_TS'
ORDER BY 3, 1;
+-------------------------------+----------------+-------------+-------------+-------------+--------------+-------------+--------------+-----------------------------+
| INTERVAL_START_TIME | TABLE_NAME | COLUMN_NAME | ACCESS_TYPE | NUM_QUERIES | ROWS_SCANNED | ROWS_PRUNED | ROWS_MATCHED | SEARCH_OPTIM |
|-------------------------------+----------------+-------------+-------------+-------------+--------------+-------------+--------------+-----------------------------|
| 2025-04-24 14:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 5 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 14:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 5 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 15:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 15:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 15:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 5 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 15:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 19:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 19:00:00.000 -0700 | SENSOR_DATA_TS | DEVICE_ID | WHERE | 1 | 2678400 | 2678400 | 2678400 | ["EQUALITY(\"DEVICE_ID\")"] |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 3262387 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 2678400 | 2678400 | 394106 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 1227686 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 2678400 | 2678400 | 216642 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 2678400 | 2678400 | 216642 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 1227686 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 820272 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 3262387 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 3262387 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 5356800 | 0 | 1227686 | NULL |
| 2025-04-24 17:00:00.000 -0700 | SENSOR_DATA_TS | TEMPERATURE | WHERE | 1 | 2678400 | 2678400 | 216642 | NULL |
+-------------------------------+----------------+-------------+-------------+-------------+--------------+-------------+--------------+-----------------------------+
La table sensor_data_ts
de cette requête contient 5 356 800 lignes de données chronologiques synthétiques. Exactement la moitié des lignes de la table (2 678 400) ont été supprimées pour un certain nombre de requêtes qui ont filtré les colonnes device_id
et temperature
dans les conditions de la clause WHERE.
La colonne device_id
est suggérée comme cible pour une optimisation de recherche qui utilise la méthode de recherche EQUALITY. Les analyses de table pourraient bénéficier de l’ajout de cette optimisation de recherche.
Astuce
Vous pouvez utiliser la fonction ARRAY_TO_STRING pour convertir la colonne SEARCH_OPTIMIZATION_SUPPORTED_EXPRESSIONS en chaîne afin d’en faciliter la lecture. Par exemple :
ARRAY_TO_STRING(search_optimization_supported_expressions, ', ')