Reconnaissance d'agrégats

Présentation

Looker utilise la logique d'agrégat de notoriété pour trouver le tableau le plus petit et le plus efficace disponible dans votre base de données afin d'exécuter une requête tout en maintenant la précision.

Pour les très grandes tables de votre base de données, les développeurs Looker peuvent créer des tables de données agrégées plus petites, regroupées par différentes combinaisons d'attributs. Les tables agrégées agissent comme des tables de consolidation ou récapitulatives que Looker peut utiliser pour les requêtes dans la mesure du possible, au lieu de la grande table d'origine. Lorsqu'elle est implémentée de façon stratégique, la reconnaissance d'agrégats peut permettre d'accélérer considérablement une requête moyenne.

Par exemple, vous pouvez avoir un tableau de données à l'échelle du pétaoctet avec une ligne pour chaque commande passée sur votre site Web. À partir de cette base de données, vous pouvez créer un tableau cumulé avec vos totaux de ventes quotidiennes. Si votre site Web reçoit 1 000 commandes par jour,votre tableau cumulé par jour représente chaque jour, avec 999 lignes de moins que votre tableau d'origine. Vous pouvez créer un autre tableau cumulé avec les totaux des ventes mensuelles qui sera encore plus efficace. Ainsi, si un utilisateur exécute une requête pour les ventes quotidiennes ou hebdomadaires, Looker utilisera le tableau du total des ventes quotidiennes. Si un utilisateur exécute une requête concernant les ventes annuelles et que vous n'avez pas de table agrégée annuelle, Looker utilise la valeur la plus proche, à savoir le tableau cumulé des ventes mensuelles.

Looker répond aux questions de vos utilisateurs en utilisant les plus petites tables agrégées dans la mesure du possible. Exemple :

  • Pour une requête sur le total des ventes mensuelles, Looker utilise le tableau cumulé des ventes mensuelles (sales_monthly_aggregate_table).
  • Pour une requête sur le total de chaque vente par jour, il n'existe pas de table agrégée avec cette précision. Looker obtient donc les résultats de la requête à partir de la table de base de données d'origine (orders_database). Toutefois, si vos utilisateurs exécutent souvent ce type de requête, vous pouvez créer une table agrégée pour celle-ci.
  • Pour une requête sur les ventes hebdomadaires, il n'y a pas de table agrégée hebdomadaire. Looker utilise donc la meilleure chose qui soit juste en dessous, à savoir la table agrégée basée sur les ventes quotidiennes (sales_daily_aggregate_table).

À l'aide de la logique de prise de conscience globale, Looker interrogera la plus petite table agrégée possible pour répondre aux questions de vos utilisateurs. La table d'origine n'était utilisée que pour les requêtes nécessitant un niveau de précision plus fin que celui fourni par les tables agrégées.

Il n'est pas nécessaire de joindre des tables agrégées ni de les ajouter à une exploration distincte. Au lieu de cela, Looker ajuste dynamiquement la clause FROM de la requête d'exploration pour accéder à la meilleure table agrégée pour la requête. Cela signifie que vos exercices sont gérés et que les explorations peuvent être consolidées. Grâce à la détection globale, une exploration peut exploiter automatiquement les tables agrégées, tout en continuant à examiner en détail des données précises si nécessaire.

Vous pouvez également exploiter des tables agrégées pour améliorer considérablement les performances des tableaux de bord, en particulier pour les vignettes qui interrogent des ensembles de données volumineux. Pour en savoir plus, consultez la section Obtenir le code LookML d'une table agrégée à partir d'un tableau de bord sur la page de documentation du paramètre aggregate_table.

Ajouter des tables agrégées à votre projet

Les développeurs Looker peuvent créer des tables agrégées stratégiques qui réduiront le nombre de requêtes requises sur les grandes tables d'une base de données. Les tables agrégées doivent être persistées dans votre base de données pour qu'elles puissent être accessibles et consultables dans des données agrégées. Les tables agrégées sont donc un type de table dérivée persistante (PDT).

Une table agrégée est définie à l'aide du paramètre aggregate_table sous un paramètre explore dans votre projet LookML.

Voici un exemple de explore avec une table agrégée dans LookML:

explore: orders {
  label: "Sales Totals"
  join: order_items {
    sql_on: ${orders.id} = ${order_items.id} ;;
  }
  aggregate_table: sales_monthly {
    materialization: {
      datagroup_trigger: orders_datagroup
    }
    query: {
      dimensions: [created_month]
      measures: [order_items.total_sales]
    }
  }
  # other explore parameters
}

Pour créer une table agrégée, vous pouvez écrire le code LookML à partir de zéro ou obtenir le code LookML de la table agrégée à partir d'une exploration ou d'un tableau de bord. Consultez la page de documentation du paramètre aggregate_table pour connaître les spécificités du paramètre aggregate_table et de ses sous-paramètres.

Concevoir des tables agrégées

Pour qu'une requête d'exploration utilise une table agrégée, cette table doit pouvoir fournir des données précises pour la requête d'exploration. Looker peut utiliser une table agrégée pour une requête d'exploration si toutes les conditions suivantes sont remplies:

  • Les champs de la requête d'exploration constituent un sous-ensemble des champs de la table agrégée (voir la section Facteurs de champ sur cette page). Ou, pour les périodes, les périodes de la requête d'exploration peuvent être déduites des périodes du tableau cumulé (voir la section Facteurs de délai sur cette page).
  • La requête d'exploration contient des types de mesures compatibles avec la reconnaissance d'agrégats (voir la section Facteurs de type de mesure sur cette page), ou la requête d'exploration contient une table agrégée qui correspond exactement (voir la section Créer des tables agrégées qui correspondent exactement aux requêtes d'exploration de cette page).
  • Le fuseau horaire de la requête d'exploration correspond à celui utilisé par la table agrégée (voir la section Facteurs de fuseau horaire de cette page).
  • Les filtres de la requête d'exploration font référence à des champs disponibles en tant que dimensions dans le tableau cumulé, ou chacun des filtres de la requête d'exploration correspond à un filtre du tableau cumulé (voir la section Facteurs de filtrage sur cette page).

Pour vous assurer qu'une table agrégée peut fournir des données précises pour une requête d'exploration, vous pouvez créer une table agrégée qui correspond exactement à une requête d'exploration. Pour en savoir plus, consultez la section Créer des tables agrégées qui correspondent exactement aux requêtes d'exploration de cette page.

Facteurs de champ

Pour être utilisée pour une requête d'exploration, une table agrégée doit contenir toutes les dimensions et mesures nécessaires pour cette requête d'exploration, y compris les champs utilisés pour les filtres dans la requête d'exploration. Si une requête d'exploration contient une dimension ou une mesure qui ne figure pas dans une table agrégée, Looker ne peut pas utiliser la table agrégée et utilisera la table de base à la place.

Par exemple, si une requête regroupe les données en fonction des dimensions A et B, agrège les données par mesure C et filtre les données en fonction de la dimension D, le tableau cumulé doit contenir au minimum les dimensions A, B et D, et C comme mesure.

La table agrégée peut également comporter d'autres champs, mais elle doit au moins contenir les champs de requête d'exploration pour être viable pour l'optimisation. La seule exception concerne les dimensions de période, car les périodes plus précises peuvent être dérivées de celles dont le niveau de précision est plus fin.

En raison de ces considérations relatives aux champs, une table agrégée est spécifique à l'exploration sous laquelle elle est définie. Une table agrégée définie dans une exploration n'est pas utilisée pour les requêtes d'une autre exploration.

Facteurs de délai

La logique d'agrégation de Looker est capable de déduire une période à partir d'une autre. Une table agrégée peut être utilisée pour une requête à condition que la période de la table agrégée ait une précision plus précise (ou égale) que la requête d'exploration. Par exemple, une table agrégée basée sur des données quotidiennes peut être utilisée pour une requête d'exploration qui appelle d'autres périodes, telles que des requêtes portant sur des données quotidiennes, mensuelles et annuelles, ou même sur des jours du mois, des jours de l'année et des semaines de l'année. Toutefois, une table agrégée annuelle ne peut pas être utilisée pour une requête d'exploration qui appelle des données horaires, car les données de la table agrégée ne sont pas suffisamment précises pour la requête d'exploration.

Il en va de même pour les sous-ensembles de périodes. Par exemple, si vous avez une table agrégée filtrée pour les trois derniers mois et qu'un utilisateur interroge les données avec un filtre pour les deux derniers mois, Looker pourra utiliser la table agrégée pour cette requête.

En outre, la même logique s'applique aux requêtes comportant des filtres de période: une table agrégée peut être utilisée pour une requête avec un filtre de période, à condition que la période de la table agrégée ait une précision plus précise (ou égale) que le filtre de période utilisé dans la requête d'exploration. Par exemple, une table agrégée avec une dimension de période quotidienne peut être utilisée pour une requête d'exploration qui filtre le jour, la semaine ou le mois.

Mesurer les facteurs de type

Pour qu'une requête d'exploration utilise une table agrégée, les mesures de la table agrégée doivent pouvoir fournir des données précises pour la requête d'exploration.

Pour cette raison, seuls certains types de mesures sont acceptés, comme décrit dans les sections suivantes:

Si une requête d'exploration utilise un autre type de mesure, Looker utilisera la table d'origine, et non la table agrégée, pour renvoyer les résultats. La seule exception est si la requête d'exploration est une correspondance exacte d'une requête de table agrégée, comme décrit dans la section Créer des tables agrégées correspondant exactement aux requêtes d'exploration.

Sinon, Looker utilisera la table d'origine, et non la table agrégée, pour renvoyer les résultats.

Mesures avec des types de mesures compatibles

La reconnaissance d'agrégats peut être utilisée pour les requêtes d'exploration qui utilisent des mesures avec les types de mesures suivants:

Pour utiliser une table agrégée pour une requête d'exploration, Looker doit être en mesure d'effectuer des opérations sur les mesures de la table agrégée afin de fournir des données précises dans la requête d'exploration. Par exemple, une mesure avec type: sum peut être utilisée pour la détection globale, car vous pouvez additionner plusieurs sommes: un tableau cumulé de sommes hebdomadaires peut être additionné pour obtenir une somme mensuelle précise. De même, une mesure avec type: max peut être utilisée, car un tableau cumulé des maximums quotidiens peut être utilisé pour trouver le maximum hebdomadaire précis.

Pour les mesures avec type: average, la détection d'agrégats est prise en charge, car Looker utilise les données de somme et de nombre pour déduire avec précision les valeurs moyennes à partir des tables agrégées.

Mesures définies avec des expressions SQL

La reconnaissance d'agrégats peut également être utilisée avec des mesures définies avec des expressions dans le paramètre sql. Lorsqu'ils sont définis avec des expressions SQL, les types de mesures suivants sont également acceptés:

La reconnaissance d'agrégats est prise en charge pour les mesures définies comme des combinaisons d'autres mesures, comme dans cet exemple:

measure: total_revenue_in_dollars {
  type: number
  sql: ${total_revenue_in_dollars} - ${inventory_item.total_cost_in_dollars} ;;
}

La reconnaissance d'agrégats est également compatible avec les mesures pour lesquelles les calculs sont définis dans le paramètre sql, comme cette mesure:

measure: wholesale_value {
  type: number
    sql: (${order_items.total_sale_price} * 0.60) ;;
}

La reconnaissance d'agrégats est également compatible avec les mesures où les opérations MIN, MAX et COUNT sont définies dans le paramètre sql, comme la mesure suivante:

measure: most_recent_order_date {
  type: date
  sql: MAX(${users.created_at_raw})
}

Mesures faisant référence aux champs LookML

Lorsque des expressions sql sont utilisées dans des mesures, la détection d'agrégats accepte les types de références de champ suivants:

  • Références utilisant le format ${view_name.field_name}, qui indique les champs dans d'autres vues
  • Références utilisant le format ${field_name}, qui indique les champs dans la même vue

La reconnaissance d'agrégats n'est pas compatible avec les mesures définies à l'aide du format ${TABLE}.column_name, qui indique une colonne dans une table. Pour un aperçu de l'utilisation des références dans LookML, consultez la page de documentation Intégrer SQL et référence aux objets LookML.

Par exemple, une mesure définie avec ce paramètre sql ne serait pas acceptée dans un tableau cumulé, car elle utilise le format ${TABLE}.column_name:

measure: wholesale_value {
  type: number
  sql: (${TABLE}.total_sale_price * 0.60) ;;
}

Si vous souhaitez inclure cette mesure dans un tableau cumulé, vous pouvez créer une dimension définie avec le format ${TABLE}.column_name, puis créer une mesure qui y fait référence, comme ceci:


 dimension: total_sale_price {
    sql: (${TABLE}.total_sale_price) ;;
  }

  measure: wholesale_value {
    type: number
    sql: (${total_sale_price} * 0.60) ;;
}

Vous pouvez maintenant utiliser la mesure wholesale_value dans votre table agrégée.

Mesures approchant des décomptes distincts

En général, les décomptes distincts ne sont pas compatibles avec la détection globale, car vous ne pouvez pas obtenir de données précises si vous essayez d'agréger des nombres distincts. Par exemple, si vous comptez les utilisateurs distincts sur un site Web, il est possible qu'un utilisateur ait visité le site deux fois, à trois semaines d'intervalle. Si vous essayez d'appliquer un tableau cumulé hebdomadaire pour obtenir un nombre mensuel d'utilisateurs distincts sur votre site Web, cet utilisateur sera comptabilisé deux fois dans votre requête de décompte mensuel distinct, et les données seront incorrectes.

Une solution consiste à créer une table agrégée qui correspond exactement à une requête d'exploration, comme décrit dans la section Créer des tables agrégées qui correspondent exactement aux requêtes d'exploration de cette page. Lorsque la requête d'exploration et une requête de table agrégée sont identiques, des mesures de comptage distinctes fournissent des données précises, qui peuvent donc être utilisées pour la détection d'agrégats.

Une autre option consiste à utiliser des approximations pour des décomptes distincts. Pour les dialectes compatibles avec les croquis HyperLogLog, Looker peut exploiter l'algorithme HyperLogLog pour estimer les décomptes distincts pour les tables agrégées.

L'algorithme HyperLogLog est connu pour présenter une erreur d'environ 2 %. Le paramètre allow_approximate_optimization: yes exige que vos développeurs Looker reconnaissent qu'ils acceptent d'utiliser des données approximatives pour la mesure, afin qu'elle puisse être calculée de manière approximative à partir de tableaux cumulés.

Pour en savoir plus et obtenir la liste des dialectes compatibles avec HyperLogLog, consultez la page de documentation sur le paramètre allow_approximate_optimization.

Facteurs de fuseau horaire

Dans de nombreux cas, les administrateurs de bases de données utilisent UTC comme fuseau horaire pour les bases de données. Toutefois, de nombreux utilisateurs peuvent ne pas se trouver dans le fuseau horaire UTC. Looker propose plusieurs options de conversion des fuseaux horaires afin que vos utilisateurs obtiennent les résultats de la requête dans leur propre fuseau horaire:

  • Le paramètre Fuseau horaire de la requête, qui s'applique à toutes les requêtes envoyées à la connexion à la base de données Si tous vos utilisateurs se trouvent dans le même fuseau horaire, vous pouvez définir un fuseau horaire de requête unique. Toutes les requêtes seront ainsi converties du fuseau horaire de la base de données dans celui de la requête.
  • Les fuseaux horaires spécifiques à l'utilisateur : il est possible d'attribuer des fuseaux horaires aux utilisateurs et de les sélectionner individuellement. Dans ce cas, les requêtes sont converties du fuseau horaire de la base de données vers celui de l'utilisateur.

Pour en savoir plus sur ces options, consultez la page de documentation Utiliser les paramètres de fuseau horaire.

Ces concepts sont importants pour comprendre la détection globale, car pour qu'un tableau cumulé soit utilisé pour une requête avec des dimensions de date ou des filtres de date, le fuseau horaire du tableau cumulé doit correspondre au paramètre de fuseau horaire utilisé pour la requête d'origine.

Les tables agrégées utilisent le fuseau horaire de la base de données si aucune valeur timezone n'est spécifiée. Votre connexion à la base de données utilisera également son fuseau horaire si l'une des conditions suivantes est remplie:

  • Votre base de données n'est pas compatible avec les fuseaux horaires.
  • Le fuseau horaire de la requête de votre connexion de base de données est défini sur le même fuseau horaire que le fuseau horaire de la base de données.
  • Votre connexion à la base de données n'est associée à aucun fuseau horaire de requête ni de fuseau horaire spécifique à l'utilisateur. Dans ce cas, votre connexion à la base de données utilisera le fuseau horaire de la base de données.

Si l'une de ces conditions est vraie, vous pouvez omettre le paramètre timezone pour vos tableaux cumulés.

Sinon, le fuseau horaire du tableau cumulé doit être défini de façon à correspondre aux requêtes possibles afin que le tableau cumulé ait plus de chances d'être utilisé:

  • Si votre connexion à la base de données n'utilise qu'un seul fuseau horaire pour la requête, la valeur timezone de votre table agrégée doit correspondre à la valeur du fuseau horaire de la requête.
  • Si votre connexion à la base de données utilise des fuseaux horaires spécifiques à l'utilisateur, vous devez créer des tables agrégées identiques, chacune avec une valeur timezone différente pour correspondre aux fuseaux horaires possibles de vos utilisateurs.

Filtrer les facteurs

Soyez prudent lorsque vous incluez des filtres dans votre tableau cumulé. Les filtres appliqués à un tableau cumulé permettent de limiter les résultats au point où celui-ci est inutilisable. Par exemple, supposons que vous créiez une table agrégée pour le nombre de commandes quotidiennes et que la table agrégée filtre uniquement les commandes de lunettes de soleil provenant d'Australie. Si un utilisateur exécute une requête d'exploration pour obtenir le nombre de commandes quotidiennes de lunettes de soleil dans le monde entier, Looker ne peut pas utiliser la table agrégée pour cette requête d'exploration, car la table agrégée ne contient que les données pour l'Australie. La table agrégée filtre les données de manière trop précise pour être utilisées par la requête d'exploration.

Tenez également compte des filtres que vos développeurs Looker peuvent avoir intégrés à votre exploration, tels que:

  • access_filters: applique des restrictions de données spécifiques à l'utilisateur.
  • always_filter: demandez aux utilisateurs d'inclure un ensemble spécifique de filtres pour une requête d'exploration. Les utilisateurs peuvent modifier la valeur de filtre par défaut de leur requête, mais ils ne peuvent pas supprimer complètement le filtre.
  • conditionally_filter: définit un ensemble de filtres par défaut que les utilisateurs peuvent ignorer s'ils appliquent au moins un filtre d'une deuxième liste également définie dans l'exploration.

Ces types de filtres sont basés sur des champs spécifiques. Si votre exploration comporte ces filtres, vous devez inclure leurs champs dans le paramètre dimensions de aggregate_table.

Voici par exemple une exploration avec un filtre d'accès basé sur le champ orders.region:

explore: orders {
  access_filter: {
    field: orders.region
    user_attribute: region
  }
}

Pour créer une table agrégée qui serait utilisée pour cette exploration, la table agrégée doit inclure le champ sur lequel est basé le filtre d'accès. Dans l'exemple suivant, le filtre d'accès est basé sur le champ orders.region. Ce même champ est inclus en tant que dimension dans le tableau cumulé:

explore: orders {
  access_filter: {
    field: orders.region  # <-- orders.region field
    user_attribute: region
  }
  aggregate_table: sales_monthly {
    materialization: {
      datagroup_trigger: orders_datagroup
    }
    query: {
      dimensions: [orders.created_day, orders.region] # <-- orders.region field
      measures: [orders.total_sales]
      timezone: America/Los_Angeles
    }
  }
}

Étant donné que la requête de table agrégée inclut la dimension orders.region, Looker peut filtrer de façon dynamique les données de la table agrégée pour correspondre au filtre de la requête d'exploration. Par conséquent, Looker peut toujours utiliser la table agrégée pour les requêtes de l'exploration, même si l'exploration possède un filtre d'accès.

Cela s'applique également aux requêtes d'exploration qui utilisent une table dérivée native configurée avec bind_filters. Le paramètre bind_filters transmet les filtres spécifiés d'une requête d'exploration à la sous-requête de la table dérivée native. Dans le cas de la reconnaissance d'agrégats, si votre requête d'exploration nécessite une table dérivée native qui utilise bind_filters, la requête d'exploration ne peut utiliser une table agrégée que si tous les champs utilisés dans le paramètre bind_filters de la table dérivée native ont les mêmes valeurs de filtre dans la requête d'exploration que dans la table agrégée.

Créer des tables agrégées qui correspondent exactement aux requêtes d'exploration

Pour vous assurer qu'une table agrégée peut être utilisée pour une requête d'exploration, vous pouvez créer une table agrégée qui correspond exactement à la requête d'exploration. Si la requête d'exploration et la table agrégée utilisent les mêmes mesures, dimensions, filtres, fuseaux horaires et autres paramètres, les résultats de la table agrégée s'appliquent par définition à la requête d'exploration. Si une table agrégée est une correspondance exacte d'une requête d'exploration, Looker peut utiliser des tables agrégées qui incluent n'importe quel type de mesure.

Vous pouvez créer une table agrégée à partir d'une exploration à l'aide de l'option Obtenir le code LookML du menu en forme de roue dentée d'une exploration. Vous pouvez également créer des correspondances exactes pour toutes les vignettes d'un tableau de bord à l'aide de l'option Obtenir le code LookML du menu en forme de roue dentée d'un tableau de bord.

Déterminer quelle table agrégée est utilisée pour une requête

Les utilisateurs disposant des autorisations see_sql peuvent utiliser les commentaires de l'onglet SQL d'une exploration pour voir quelle table agrégée sera utilisée pour une requête. Les commentaires de l'onglet SQL s'affichent également en mode Développement. Les développeurs peuvent ainsi tester de nouvelles tables agrégées pour voir comment Looker les utilise avant de les mettre en production.

Par exemple, sur la base de l'exemple de tableau cumulé mensuel présenté précédemment, vous pouvez accéder à l'exploration et exécuter une requête pour obtenir le total des ventes annuelles. Vous pouvez ensuite cliquer sur l'onglet SQL pour afficher les détails de la requête créée par Looker. Si vous êtes en mode Développement, Looker affiche des commentaires indiquant la table agrégée utilisée pour la requête.

Les commentaires suivants dans l'onglet SQL montrent que Looker utilise la table agrégée sales_monthly pour cette requête, et explique pourquoi d'autres tables agrégées n'ont pas été utilisées pour la requête:

-- use existing orders::sales_monthly in sandbox_scratch.LR$LB4151619827209021_orders$sales_monthly
-- Did not use orders::sales_weekly; it does not include the following fields in the query: orders.created_month
-- Did not use orders::sales_daily; orders::sales_monthly was a better fit for optimization.
-- Did not use orders::sales_last_3_days; contained filters not in the query: orders.created_date

Consultez la section Dépannage de cette page pour connaître les éventuels commentaires que vous pouvez voir dans l'onglet SQL et obtenir des suggestions pour les résoudre.

Estimation des économies de calcul pour la notoriété globale

Si votre connexion à la base de données est compatible avec les estimations de coûts et si une table agrégée peut être utilisée pour une requête, la fenêtre d'exploration indiquera les économies de calcul réalisées en utilisant la table agrégée au lieu d'interroger directement la base de données. Les économies agrégées sur la notoriété s'affichent à côté du bouton Exécuter dans une exploration avant l'exécution de la requête.

Avant d'exécuter la requête, si vous souhaitez voir quelle table agrégée sera utilisée pour la requête, vous pouvez cliquer sur l'onglet SQL, comme décrit dans la section Déterminer quelle table agrégée est utilisée pour une requête de cette page de la documentation.

Une fois la requête exécutée, la fenêtre d'exploration affiche la table agrégée utilisée pour répondre à la requête à côté du bouton Exécuter.

Les économies liées à la notoriété d'agrégation s'affichent pour les connexions à la base de données activées pour les estimations de coûts. Pour en savoir plus, consultez la page de documentation Explorer les données dans Looker .

Looker associe de nouvelles données à vos tables agrégées

Pour les tables agrégées avec des filtres temporels, Looker peut unifier de nouvelles données dans votre table agrégée. Vous pouvez avoir un tableau cumulé qui inclut les données des trois derniers jours, mais ce tableau cumulé peut avoir été créé hier. Les informations du jour ne seraient pas disponibles dans le tableau cumulé. Vous ne vous attendez donc pas à l'utiliser pour une requête d'exploration sur les informations quotidiennes les plus récentes.

Toutefois, Looker peut toujours utiliser les données de cette table agrégée pour la requête, car Looker exécutera une requête sur les données les plus récentes, puis unifiera ces résultats dans les résultats de la table agrégée.

Looker peut unifier de nouvelles données avec celles de votre table agrégée dans les cas suivants:

  • Le tableau cumulé comporte un filtre temporel.
  • Le tableau cumulé inclut une dimension basée sur le même champ temporel que le filtre temporel.

Par exemple, le tableau cumulé suivant comporte une dimension basée sur le champ orders.created_date et un filtre temporel ("3 days") basé sur le même champ:

aggregate_table: sales_last_3_days {
  query:  {
    dimensions: [orders.created_date]
    measures: [order_items.total_sales]
    filters: [orders.created_date: "3 days"]  # <-- time filter
    timezone: America/Los_Angeles
  }
  ...
}

Si cette table agrégée a été créée hier, Looker récupérera les données les plus récentes qui ne sont pas encore incluses dans la table agrégée, puis unifiera les nouveaux résultats avec ceux de la table agrégée. Cela signifie que vos utilisateurs obtiendront les données les plus récentes tout en optimisant les performances grâce à la notoriété globale.

Si vous êtes en mode Développement, vous pouvez cliquer sur l'onglet SQL d'une exploration pour afficher la table agrégée utilisée par Looker pour la requête, ainsi que l'instruction UNION utilisée par Looker pour importer des données plus récentes qui n'étaient pas incluses dans la table agrégée.

Les tables agrégées doivent être persistantes

Pour que votre table agrégée soit accessible pour la visibilité globale, elle doit être persistante dans votre base de données. La stratégie de persistance est spécifiée dans le paramètre materialization du tableau cumulé. Les tables agrégées étant un type de table dérivée persistante (PDT), elles ont les mêmes exigences que les tables PDT. Pour en savoir plus, consultez la page de documentation Tables dérivées dans Looker.

Vous pouvez créer des PDT incrémentielles dans votre projet si votre dialecte les prend en charge. Looker génère des PDT incrémentales en ajoutant de nouvelles données à la table, au lieu de reconstruire la table dans son intégralité. Les tables agrégées étant elles-mêmes un type de PDT, vous pouvez également créer des tables agrégées incrémentielles. Consultez la page de documentation Augmentations de tables PDT pour en savoir plus. Consultez la page de documentation du paramètre increment_key pour obtenir un exemple de table agrégée incrémentielle.

Un utilisateur disposant de l'autorisation develop peut remplacer les paramètres de persistance et recréer toutes les tables agrégées d'une requête afin d'obtenir les données les plus récentes. Pour recréer les tables d'une requête, sélectionnez l'option Recréer les tables dérivées et exécuter dans le menu en forme de roue dentée Actions d'exploration.

Vous devez attendre le chargement de la requête Explore avant que cette option soit disponible.

L'option Rebuild Derived Tables & Run (Recompiler les tables dérivées et exécuter) permet de recréer toutes les tables dérivées référencées dans la requête, ainsi que toutes les tables dérivées dont elles dépendent. Cela inclut les tables agrégées, qui sont elles-mêmes un type de table dérivée persistante.

Pour l'utilisateur qui active l'option Recréer les tables dérivées et exécuter, la requête attend que les tables soient régénérées avant de charger les résultats. Les requêtes des autres utilisateurs continueront d'utiliser les tables existantes. Une fois les tables persistantes régénérées, tous les utilisateurs s'en servent.

Consultez la page de documentation Tables dérivées dans Looker pour en savoir plus sur l'option Recréer les tables dérivées et exécuter.

Dépannage

Comme décrit dans la section Déterminer quelle table agrégée est utilisée pour une requête, si vous êtes en mode Développement, vous pouvez exécuter des requêtes sur l'exploration et cliquer sur l'onglet SQL pour afficher les commentaires sur la table agrégée utilisée pour la requête, le cas échéant.

L'onglet SQL inclut également des commentaires expliquant pourquoi les tables agrégées n'ont pas été utilisées pour une requête, le cas échéant. Pour les tableaux agrégés qui ne sont pas utilisés, le commentaire commencera par:

Did not use [explore name]::[aggregate table name];

Par exemple, voici un commentaire expliquant pourquoi la table agrégée sales_daily définie dans l'exploration order_items n'a pas été utilisée pour une requête:

-- Did not use order_items::sales_daily; query contained the following filters
that were neither included as fields nor exactly matched by filters in the aggregate table:
order_items.created_year.

Dans ce cas, les filtres de la requête ont empêché l'utilisation de la table agrégée.

Le tableau suivant présente d'autres raisons possibles pour lesquelles un tableau cumulé ne peut pas être utilisé, ainsi que les mesures à prendre pour faciliter son utilisation.

Raison pour laquelle le tableau cumulé n'est pas utilisé Explication et étapes possibles
Ce champ n'existe pas dans l'exploration. Une erreur de type de validation LookML s'est produite. Cela est probablement dû au fait que la table agrégée n'a pas été correctement définie ou que votre tableau agrégé contient une faute de frappe. Le problème est probablement dû à un nom de champ incorrect, par exemple.

Pour résoudre ce problème, vérifiez que les dimensions et les mesures de la table agrégée correspondent aux noms des champs de l'exploration. Pour savoir comment définir un tableau cumulé, consultez la page de documentation sur le paramètre aggregate_table.
La table agrégée n'inclut pas les champs suivants dans la requête. Pour être utilisée pour une requête d'exploration, une table agrégée doit contenir toutes les dimensions et mesures nécessaires pour cette requête d'exploration, y compris les champs utilisés pour les filtres dans la requête d'exploration. Si une requête d'exploration contient une dimension ou une mesure qui ne figure pas dans une table agrégée, Looker ne peut pas utiliser la table agrégée et utilisera la table de base à la place. Pour en savoir plus, consultez la section Facteurs liés aux champs de cette page. La seule exception concerne les dimensions de période, car les périodes plus précises peuvent être dérivées de celles dont le niveau de précision est plus fin.

Pour résoudre ce problème, vérifiez que les champs de la requête d'exploration sont inclus dans la définition de la table agrégée.
La requête contenait les filtres suivants qui n'étaient ni inclus en tant que champs, ni correspondre exactement aux filtres du tableau cumulé. Les filtres de la requête d'exploration empêchent Looker d'utiliser la table agrégée.

Pour résoudre ce problème, vous pouvez effectuer l'une des opérations suivantes :
  • Ajoutez le même filtre à votre tableau cumulé.
  • Ajoutez le champ utilisé par le filtre à votre tableau cumulé.
  • Supprimez les filtres de la requête d'exploration.
Pour en savoir plus, consultez la section Facteurs de filtrage de cette page.
La requête contient les mesures suivantes, qui ne peuvent pas être cumulées. La requête contient un ou plusieurs types de mesures non compatibles avec la reconnaissance d'agrégats, tels que nombre distinct, médiane ou centile.

Pour résoudre ce problème, vérifiez le type de chaque mesure dans la requête et assurez-vous qu'il fait partie des types de mesures compatibles. De plus, si votre exploration comporte des jointures, vérifiez que vos mesures ne sont pas converties en mesures distinctes (agrégations symétriques) par le biais de jointures ramifiées. Pour en savoir plus, consultez la section Agrégations symétriques pour les explorations avec jointure de cette page.
Un autre tableau cumulé représentait mieux l'optimisation. Plusieurs tables agrégées viables étaient disponibles pour la requête, et Looker a trouvé une table agrégée plus optimale à utiliser à la place. Dans ce cas, aucune action de votre part n'est requise.
Looker n'a effectué aucun regroupement (en raison d'un paramètre primary_key ou cancel_grouping_fields). La requête ne peut donc pas être cumulée. La requête fait référence à une dimension qui l'empêche d'avoir une clause GROUP BY. Par conséquent, Looker ne peut utiliser aucune table agrégée pour la requête.

Pour résoudre ce problème, vérifiez que les paramètres primary_key de la vue et cancel_grouping_fields de l'exploration sont correctement configurés.
Le tableau agrégé contenait des filtres non inclus dans la requête. La table agrégée comporte un filtre non temporel qui ne figure pas dans la requête.

Pour résoudre ce problème, vous pouvez supprimer le filtre du tableau cumulé. Pour en savoir plus, consultez la section Facteurs de filtrage de cette page.
Un champ est défini comme un champ de filtre uniquement dans la requête d'exploration, mais il est répertorié dans le paramètre dimensions de la table agrégée. Le paramètre dimensions de la table agrégée répertorie un champ qui n'est défini que comme champ filter dans la requête d'exploration.

Pour résoudre ce problème, supprimez le champ de la liste dimensions du tableau cumulé. Si ce champ est nécessaire pour le tableau cumulé, ajoutez-le à la liste filters dans la requête du tableau cumulé.
L'optimiseur ne peut pas déterminer pourquoi le tableau cumulé n'a pas été utilisé. Ce commentaire est réservé aux cas particuliers. Si vous voyez cela pour une requête d'exploration souvent utilisée, vous pouvez créer une table agrégée qui correspond exactement à la requête d'exploration. Vous pouvez facilement obtenir le code LookML d'une table agrégée à partir d'une exploration, comme décrit sur la page des paramètres aggregate_table.

Éléments à prendre en compte

Agrégations symétriques pour les explorations avec jointures

Il est important de noter que dans une exploration qui joint plusieurs tables de base de données, Looker peut afficher les mesures de type SUM, COUNT et AVERAGE sous la forme SUM DISTINCT, COUNT DISTINCT et AVERAGE DISTINCT, respectivement. Cette opération permet à Looker d'éviter les erreurs de calcul ramifiées. Par exemple, une mesure count est affichée sous la forme d'un type de mesure count_distinct. Cela permet d'éviter les erreurs de calcul ramifiée pour les jointures et fait partie de la fonctionnalité d'agrégation symétrique de Looker. Pour en savoir plus sur cette fonctionnalité de Looker, consultez la page Bonnes pratiques concernant les agrégations symétriques.

La fonctionnalité d'agrégation symétrique évite les erreurs de calcul, mais elle peut également empêcher l'utilisation de vos tableaux cumulés dans certains cas. Il est donc important de la comprendre.

Pour les types de mesures compatibles avec la notoriété agrégée, cela s'applique à sum, count et average. Looker rend ces types de mesures comme DISTINCT si:

Pour en savoir plus sur ces types de jointures, consultez la page de documentation sur le paramètre relationship.

Si vous constatez que votre table agrégée n'est pas utilisée pour cette raison, vous pouvez créer une table agrégée pour correspondre exactement à une requête d'exploration afin d'utiliser ces types de mesures pour une exploration avec des jointures. Pour en savoir plus, consultez la section Créer des tables agrégées qui correspondent exactement aux requêtes d'exploration de cette page.

De plus, si votre dialecte SQL est compatible avec les croquis HyperLogLog, vous pouvez ajouter le paramètre allow_approximate_optimization: yes à la mesure. Lorsqu'une mesure de comptage est définie avec allow_approximate_optimization: yes, Looker peut l'utiliser pour la détection globale, même si elle s'affiche sous la forme d'un nombre distinct.

Pour en savoir plus et obtenir la liste des dialectes SQL compatibles avec les résumés HyperLogLog, consultez la page de documentation sur le paramètre allow_approximate_optimization.

Prise en charge des dialectes pour la reconnaissance d'agrégats

La possibilité d'utiliser la fonction Aggregate Awareness dépend du dialecte de base de données de votre connexion Looker. Dans la dernière version de Looker, les dialectes suivants prennent en charge la reconnaissance d'agrégats:

Dialecte Compatible ?
Actian Avalanche
Oui
Amazon Athena
Oui
Amazon Aurora MySQL
Oui
Amazon Redshift
Oui
Apache Druid
Non
Apache Druid 0.13 et versions ultérieures
Non
Apache Druid 0.18 et versions ultérieures
Non
Apache Hive 2.3 et versions ultérieures
Oui
Apache Hive 3.1.2+
Oui
Apache Spark 3 ou version ultérieure
Oui
ClickHouse
Non
Cloudera Impala 3.1 ou version ultérieure
Oui
Cloudera Impala 3.1 ou version ultérieure avec pilote natif
Oui
Cloudera Impala avec pilote natif
Oui
DataVirtuality
Non
Databricks
Oui
Denodo 7
Non
Denodo 8
Non
Dremio
Non
Dremio 11 et versions ultérieures
Non
Exasol
Oui
Boulon
Non
Ancien SQL de Google BigQuery
Oui
SQL standard Google BigQuery
Oui
Google Cloud PostgreSQL
Oui
Google Cloud SQL
Non
Google Spanner
Non
Prune
Oui
HyperSQL
Non
IBM Netezza
Oui
MariaDB
Oui
Microsoft Azure PostgreSQL
Oui
Base de données Microsoft Azure SQL
Oui
Microsoft Azure Synapse Analytics
Oui
Microsoft SQL Server 2008 ou version ultérieure
Oui
Microsoft SQL Server 2012 ou version ultérieure
Oui
Microsoft SQL Server 2016
Oui
Microsoft SQL Server 2017 ou version ultérieure
Oui
MongoBI
Non
MySQL
Oui
MySQL 8.0.12 et versions ultérieures
Oui
Oracle
Oui
Oracle ADWC
Oui
PostgreSQL 9.5 ou version ultérieure
Oui
PostgreSQL antérieur à la version 9.5
Oui
PrestoDB
Oui
PrestoSQL
Oui
SAP HANA 2+
Oui
SingleStore
Oui
SingleStore 7+
Oui
Snowflake
Oui
Teradata
Oui
Trino
Oui
Vecteur
Oui
Vertica
Oui

Prise en charge des dialectes pour la création incrémentielle de tables agrégées

Pour que Looker prenne en charge les tables agrégées incrémentielles dans votre projet Looker, votre dialecte de base de données doit également les prendre en charge. Le tableau suivant présente les dialectes prenant en charge la création incrémentielle de tables PDT dans la dernière version de Looker:

Dialecte Compatible ?
Actian Avalanche
Non
Amazon Athena
Non
Amazon Aurora MySQL
Non
Amazon Redshift
Oui
Apache Druid
Non
Apache Druid 0.13 et versions ultérieures
Non
Apache Druid 0.18 et versions ultérieures
Non
Apache Hive 2.3 et versions ultérieures
Non
Apache Hive 3.1.2+
Non
Apache Spark 3 ou version ultérieure
Non
ClickHouse
Non
Cloudera Impala 3.1 ou version ultérieure
Non
Cloudera Impala 3.1 ou version ultérieure avec pilote natif
Non
Cloudera Impala avec pilote natif
Non
DataVirtuality
Non
Databricks
Oui
Denodo 7
Non
Denodo 8
Non
Dremio
Non
Dremio 11 et versions ultérieures
Non
Exasol
Non
Boulon
Non
Ancien SQL de Google BigQuery
Non
SQL standard Google BigQuery
Oui
Google Cloud PostgreSQL
Oui
Google Cloud SQL
Non
Google Spanner
Non
Prune
Oui
HyperSQL
Non
IBM Netezza
Non
MariaDB
Non
Microsoft Azure PostgreSQL
Oui
Base de données Microsoft Azure SQL
Non
Microsoft Azure Synapse Analytics
Oui
Microsoft SQL Server 2008 ou version ultérieure
Non
Microsoft SQL Server 2012 ou version ultérieure
Non
Microsoft SQL Server 2016
Non
Microsoft SQL Server 2017 ou version ultérieure
Non
MongoBI
Non
MySQL
Oui
MySQL 8.0.12 et versions ultérieures
Oui
Oracle
Non
Oracle ADWC
Non
PostgreSQL 9.5 ou version ultérieure
Oui
PostgreSQL antérieur à la version 9.5
Oui
PrestoDB
Non
PrestoSQL
Non
SAP HANA 2+
Non
SingleStore
Non
SingleStore 7+
Non
Snowflake
Oui
Teradata
Non
Trino
Non
Vecteur
Non
Vertica
Oui