Mise en cache de métadonnées

Ce document décrit comment utiliser la mise en cache des métadonnées pour améliorer les performances des requêtes sur les tables d'objets et sur certains types de tables BigLake.

Les tables d'objets et certains types de tables BigLake peuvent mettre en cache des informations de métadonnées sur les fichiers situés dans des datastores externes, par exemple Cloud Storage. Les types de tables BigLake suivants sont compatibles avec la mise en cache des métadonnées :

  • Tables Amazon S3 BigLake
  • Tables BigLake Cloud Storage

Les métadonnées incluent les noms de fichiers, les informations de partitionnement et les métadonnées des fichiers, telles que le nombre de lignes. Vous pouvez choisir d'activer ou non la mise en cache des métadonnées sur une table. Les requêtes comportant un grand nombre de fichiers et des filtres de partitionnement Hive tirent le meilleur parti de la mise en cache des métadonnées.

Si vous n'activez pas la mise en cache des métadonnées, les requêtes effectuées sur la table doivent lire la source de données externe pour obtenir les métadonnées d'objet. La lecture de ces données augmente la latence des requêtes. Répertorier des millions de fichiers depuis la source de données externe peut prendre plusieurs minutes. Si vous activez la mise en cache des métadonnées, les requêtes peuvent éviter de répertorier les fichiers de la source de données externe et ainsi partitionner et supprimer les fichiers plus rapidement.

Vous pouvez activer la mise en cache des métadonnées sur une table BigLake ou une table d'objets lors de la création de la table. Pour en savoir plus sur la création de tables d'objets, consultez la page Créer des tables d'objets Cloud Storage. Pour plus d'informations sur la création de tables BigLake, consultez l'une des rubriques suivantes :

Paramètres de mise en cache des métadonnées

Deux propriétés contrôlent le comportement de cette fonctionnalité :

  • L'obsolescence maximale spécifie le moment auquel les requêtes utilisent des métadonnées mises en cache..
  • Le mode de cache des métadonnées spécifie la manière dont les métadonnées sont collectées.

Lorsque la mise en cache des métadonnées est activée, vous spécifiez l'intervalle maximal d'obsolescence des métadonnées acceptable pour les opérations sur la table. Par exemple, si vous spécifiez un intervalle d'une heure, les opérations sur la table utilisent les métadonnées mises en cache si celles-ci ont été actualisées au cours de la dernière heure. Si les métadonnées mises en cache sont plus anciennes, l'opération extrait les métadonnées du datastore (Amazon S3 ou Cloud Storage). Vous pouvez spécifier un intervalle d'obsolescence compris entre 30 minutes et 7 jours.

Vous pouvez choisir d'actualiser le cache automatiquement ou manuellement :

  • Pour les actualisations automatiques, le cache est actualisé à un intervalle défini par le système, généralement compris entre 30 et 60 minutes. L'actualisation automatique du cache est une bonne approche si les fichiers dans le datastore sont ajoutés, supprimés ou modifiés à intervalles irréguliers. Si vous devez contrôler le moment de l'actualisation, par exemple pour déclencher l'actualisation à la fin d'un job d'extraction, de transformation et de chargement, utilisez l'actualisation manuelle.
  • Pour les actualisations manuelles, exécutez la procédure système BQ.REFRESH_EXTERNAL_METADATA_CACHE afin d'actualiser le cache de métadonnées selon la planification que vous déterminez. Pour les tables BigLake, vous pouvez actualiser les métadonnées de manière sélective en fournissant des sous-répertoires du répertoire de données de la table. Cela vous permet d'éviter le traitement inutile de métadonnées. L'actualisation manuelle du cache est une bonne approche si les fichiers dans le datastore sont ajoutés, supprimés ou modifiés à des intervalles connus, par exemple en tant que sortie d'un pipeline.

Les actualisations manuelles et automatiques du cache sont exécutées avec la priorité de requête INTERACTIVE.

Si vous choisissez d'utiliser les actualisations automatiques, nous vous recommandons de créer une réservation, puis de créer une attribution avec un type de job BACKGROUND pour le projet qui exécute les jobs d'actualisation du cache de métadonnées. Cela empêche les jobs d'actualisation d'être en concurrence avec les requêtes utilisateur pour les ressources et d'échouer potentiellement si les ressources sont insuffisantes.

Réfléchissez à la manière dont l'intervalle d'obsolescence et les valeurs du mode de mise en cache des métadonnées interagissent avant de les définir. Prenons les exemples suivants :

  • Si le cache de métadonnées d'une table est configuré pour exiger des actualisations manuelles et que l'intervalle d'obsolescence est défini sur deux jours, vous devez exécuter la procédure système BQ.REFRESH_EXTERNAL_METADATA_CACHE tous les deux jours ou moins si vous souhaitez que les opérations sur la table utilisent des métadonnées mises en cache.
  • Si le cache de métadonnées d'une table est configuré pour s'actualiser automatiquement et que l'intervalle d'obsolescence est défini sur 30 minutes, certaines des opérations sur la table peuvent lire à partir du datastore si l'actualisation du cache de métadonnées s'approche de la durée maximum de la fenêtre habituelle de 30 à 60 minutes.

Pour en savoir plus sur la définition des options de mise en cache des métadonnées pour les tables BigLake, consultez la page Créer des tables BigLake Amazon S3 ou Créer des tables BigLake Cloud Storage.

Pour plus d'informations sur la définition des options de mise en cache des métadonnées pour les tables d'objets, consultez la page Créer des tables d'objets.

Obtenir des informations sur les jobs d'actualisation du cache de métadonnées

Pour trouver des informations sur les jobs d'actualisation du cache de métadonnées, interrogez la vue INFORMATION_SCHEMA.JOBS, comme illustré dans l'exemple suivant :

SELECT *
FROM `region-us.INFORMATION_SCHEMA.JOBS`
WHERE job_id LIKE '%metadata_cache_refresh%'
AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR)
ORDER BY start_time DESC
LIMIT 10;

Utiliser des clés de chiffrement gérées par le client avec des métadonnées mises en cache

Les métadonnées mises en cache sont protégées par la clé de chiffrement gérée par le client (CMEK) utilisée pour la table à laquelle les métadonnées mises en cache sont associées. Il peut s'agir d'une clé CMEK appliquée directement à la table ou d'une clé CMEK dont la table hérite de l'ensemble de données ou du projet.

Si une clé CMEK par défaut est définie pour le projet ou l'ensemble de données, ou si la clé CMEK existante est modifiée pour le projet ou l'ensemble de données, cela n'affecte pas les tables existantes ni leurs métadonnées mises en cache. Vous devez modifier la clé de la table pour appliquer la nouvelle clé à la table et à ses métadonnées mises en cache.

Les clés CMEK créées dans BigQuery ne s'appliquent pas aux fichiers Cloud Storage utilisés par BigLake et les tables d'objets. Pour obtenir le chiffrement CMEK de bout en bout, configurez des clés CMEK dans Cloud Storage pour ces fichiers.

Obtenir des informations sur l'utilisation du cache de métadonnées par job de requête

Pour obtenir des informations sur l'utilisation du cache de métadonnées pour un job de requête, appelez la méthode jobs.get pour ce job et examinez le champ MetadataCacheStatistics dans la section JobStatistics2 de la ressource Job. Ce champ indique quelles tables de métadonnées compatibles avec la requête ont été utilisées par la requête, si le cache de métadonnées a été utilisé par la requête et, si ce n'est pas le cas, la raison.

Statistiques des tables

Pour les tables BigLake basées sur des fichiers Parquet, les statistiques de table sont collectées lors de l'actualisation du cache de métadonnées. La collecte des statistiques de table se produit lors des actualisations automatiques et manuelles, et les statistiques sont conservées pendant la même période que le cache de métadonnées.

Les statistiques de table collectées incluent des informations sur les fichiers telles que le nombre de lignes, la taille des fichiers physiques et non compressés, et la cardinalité des colonnes. Lorsque vous exécutez une requête sur une table BigLake basée sur Parquet, ces statistiques sont fournies à l'optimiseur de requêtes afin d'améliorer la planification des requêtes et potentiellement d'améliorer les performances pour certains types de requêtes. Par exemple, une optimisation courante des requêtes est la propagation des contraintes dynamiques, où l'optimiseur de requête déduit de manière dynamique les prédicats sur les tables de faits plus grandes d'une jointure à partir des plus petites tables de dimensions. Bien que cette optimisation puisse accélérer les requêtes en utilisant des schémas de table normalisés, elle nécessite des statistiques de table précises. Les statistiques de table collectées par la mise en cache des métadonnées permettent d'optimiser les plans de requête à la fois dans BigQuery et Apache Spark.

Limites

Les limites suivantes s'appliquent au cache de métadonnées :

  • Si vous émettez plusieurs actualisations manuelles simultanées, une seule réussira.
  • Le cache des métadonnées expire au bout de sept jours s'il n'est pas actualisé.
  • Si vous mettez à jour l'URI source d'une table, le cache de métadonnées n'est pas automatiquement actualisé, et les requêtes suivantes renvoient des données du cache obsolète. Pour éviter cela, actualisez manuellement le cache des métadonnées. Si le cache de métadonnées de la table est configuré pour s'actualiser automatiquement, vous devez définir le mode d'actualisation sur manuel, effectuer l'actualisation manuelle, puis définir à nouveau le mode d'actualisation de la table sur "Automatique".
  • Si vous actualisez manuellement le cache de métadonnées et que votre ensemble de données cible et votre bucket Cloud Storage se trouvent dans un emplacement régional, vous devez spécifier explicitement cet emplacement lorsque vous exécutez l'appel de procédure BQ.REFRESH_EXTERNAL_METADATA_CACHE. Pour ce faire, procédez de l'une des façons suivantes :

    Console

    1. Accédez à la page BigQuery.

      Accéder à BigQuery

    2. Sélectionnez un onglet dans l'éditeur.

    3. Cliquez sur Plus, puis sur Paramètres de requête.

    4. Dans la section Options avancées, décochez la case Sélection automatique de l'emplacement, puis spécifiez la région cible.

    5. Cliquez sur Enregistrer.

    6. Exécutez la requête contenant l'appel de procédure BQ.REFRESH_EXTERNAL_METADATA_CACHE dans cet onglet d'éditeur.

    bq

    Si vous exécutez la requête contenant l'appel de procédure BQ.REFRESH_EXTERNAL_METADATA_CACHE à l'aide de bq query, assurez-vous de spécifier l'option --location.

Étapes suivantes