Agréger des données sur Databricks
Cet article présente la sémantique générale pour l'agrégation et discute des différences entre les résultats calculés à l'aide de requêtes batch, de vues matérialisées et de streaming.
Agrégats de batch
L'agrégation par batch est le comportement par default observé lors de l'exécution d'une query ad hoc en SQL ou du traitement des données avec les DataFrames Apache Spark.
Une requête d'agrégation écrite sur une table ou une source de données calcule les statistiques d'agrégation pour tous les enregistrements de la source de données. Databricks tire parti des optimisations et des métadonnées chaque fois que possible pour optimiser ces queries, et peut compute efficacement de nombreux agrégats pour de grands datasets.
La latence d'agrégation par batch et les coûts de compute peuvent augmenter à mesure que la taille des données augmente, et les valeurs agrégées fréquemment référencées pré-calculées peuvent faire économiser beaucoup de temps et d'argent aux utilisateurs. Databricks recommande d'utiliser des vues matérialisées pour mettre à jour de manière incrémentielle les valeurs agrégées. Consultez les agrégats incrémentiels.
Agrégats avec état
Les agrégats définis dans les charges de travail en streaming sont avec état. Les agrégats avec état suivent les enregistrements observés au fil du temps et recalculent les résultats lors du traitement de nouvelles données.
Vous devez utiliser des filigranes lors du calcul des agrégats avec état. L'omission d'un filigrane d'une query d'agrégation avec état entraîne une accumulation infinie des informations d'état au fil du temps. Cela entraîne des ralentissements de traitement et peut conduire à des erreurs de mémoire insuffisante.
Vous ne devez pas utiliser un agrégat avec état pour calculer des statistiques sur un dataset entier. Databricks recommande d'utiliser des vues matérialisées pour le calcul d'agrégats incrémentiels sur un dataset entier. Consultez les agrégats incrémentiels.
La configuration de charges de travail qui calculent des agrégats avec état de manière efficace et correcte nécessite de comprendre comment les données proviennent des systèmes sources et comment Databricks utilise les filigranes, les modes de sortie et les intervalles de trigger pour contrôler l'état des query et le calcul des résultats.
Agrégats incrémentiels
Vous pouvez utiliser les vues matérialisées pour calculer de nombreuses valeurs agrégées de manière incrémentielle. Les vues matérialisées suivent automatiquement les changements dans la source de données et appliquent les mises à jour appropriées aux valeurs agrégées lors du refresh. Les résultats renvoyés par une vue matérialisée sont équivalents à ceux renvoyés par le recalcul des résultats agrégés sur les données source avec un job par batch ou une query ad hoc.
Agrégats approximatifs
Bien que Databricks excelle dans le calcul sur des datasets extrêmement volumineux, l’utilisation de l’approximation pour les agrégats peut accélérer le traitement des query et réduire les coûts lorsque vous n’avez pas besoin de résultats précis.
L’utilisation d’instructions LIMIT est parfois suffisante pour obtenir un aperçu rapide des données, mais n’introduit pas d’aléatoire ni ne garantit que l’échantillonnage est distribué dans le dataset.
Spark SQL propose les méthodes natives suivantes pour approximer les agrégations sur les données numériques ou catégorielles :
approx_count_distinctfonction d'agrégationapprox_percentilefonction d'agrégationapprox_top_kfonction d'agrégation
Vous pouvez également spécifier un pourcentage d'échantillon avec TABLESAMPLE pour générer un échantillon aléatoire à partir d'un dataset et calculer des agrégats approximatifs. Voir clause TABLESAMPLE.
Surveiller les datasets à l'aide de statistiques agrégées
Le profilage des données utilise des statistiques agrégées et des distributions de données pour suivre la qualité des données au fil du temps. Vous pouvez générer des rapports pour visualiser les tendances et planifier des alertes afin de signaler les changements inattendus dans les données. See profilage des données.