Présentation des tables partitionnées

Cette page présente la prise en charge des tables partitionnées dans BigQuery.

Une table partitionnée est une table spéciale divisée en segments, appelés partitions, qui facilitent la gestion et l'interrogation de vos données. En divisant une grande table en partitions plus petites, vous pouvez améliorer les performances des requêtes et maîtriser les coûts en réduisant le nombre d'octets lus par une requête.

Il existe deux types de tables partitionnées dans BigQuery :

  • Tables partitionnées par date d'ingestion : il s'agit de tables partitionnées en fonction de la date d'ingestion (chargement) ou d'arrivée des données.
  • Tables partitionnées : tables partitionnées en fonction d'une colonne TIMESTAMP ou DATE.

Tables partitionnées par date d'ingestion

Lorsque vous créez une table partitionnée par date d'ingestion, BigQuery charge automatiquement les données dans des partitions quotidiennes basées sur la date, qui reflètent la date d'ingestion ou d'arrivée des données. Les identifiants de pseudo-colonne et de suffixe vous permettent de reformuler (remplacer) et de rediriger les données vers les partitions correspondant à un jour donné.

Les tables partitionnées par date d'ingestion comprennent une pseudo-colonne nommée _PARTITIONTIME et réservée à l'horodatage des données chargées dans la table. Les requêtes portant sur des tables partitionnées par date peuvent restreindre la quantité de données lues en spécifiant des filtres _PARTITIONTIME qui représentent l'emplacement d'une partition. Toutes les données de la partition spécifiée sont lues par la requête, mais le filtre de prédicat _PARTITIONTIME limite le nombre de partitions analysées.

Lorsque vous créez une table partitionnée par date l'ingestion, les partitions ont la même définition de schéma que la table. Si vous avez besoin de charger dans une partition des données dont le schéma diffère de celui de la table, vous devez mettre à jour le schéma de la table préalablement au chargement. Vous pouvez également utiliser les options de mise à jour du schéma pour modifier le schéma de la table dans le cadre d'une tâche de chargement ou de requête.

Tables partitionnées

BigQuery autorise également les tables partitionnées. Les tables partitionnées vous permettent de lier le mode de partitionnement à une colonne TIMESTAMP ou DATE déterminée. Les données écrites dans une table partitionnée sont automatiquement transmises à la partition correspondant à la valeur de date (exprimée en UTC) qui figure dans la colonne utilisée pour le partitionnement.

Les tables partitionnées ne requièrent pas de pseudo-colonne _PARTITIONTIME. Les requêtes portant sur des tables partitionnées peuvent spécifier des filtres de prédicat basés sur la colonne de partitionnement afin de réduire la quantité de données analysées.

Lorsque vous créez une table partitionnée, deux partitions spéciales sont définies :

  • La partition __NULL__, qui représente les lignes comportant la valeur NULL dans la colonne de partitionnement.
  • La partition __UNPARTITIONED__, qui représente les données se trouvant en dehors de la plage de dates autorisée.

À l'exception des partitions __NULL__ et __UNPARTITIONED__, toutes les données de la colonne de partitionnement correspondent à la date de l'identifiant de partition. Cela permet à une requête de déterminer quelles partitions ne contiennent pas de données satisfaisant aux conditions de filtrage. Les requêtes qui filtrent les données sur la colonne de partitionnement peuvent restreindre les valeurs et éliminer complètement les partitions inutiles.

Partitionnement et segmentation

Au lieu de partitionner les tables, vous pouvez les segmenter via une stratégie de dénomination basée sur la date du type [PREFIX]_YYYYMMDD. On parle dans ce cas de création de tables segmentées par date. En utilisant le SQL standard ou l'ancien SQL, vous pouvez spécifier une requête comportant un opérateur UNION afin de limiter les tables analysées par cette requête.

Les tables partitionnées offrent de meilleures performances que les tables segmentées par date. Lorsque vous créez des tables nommées par date, BigQuery doit conserver une copie du schéma et des métadonnées pour chacune de ces tables. De plus, leur utilisation peut obliger BigQuery à valider les autorisations pour chaque table interrogée. Cette pratique peut également alourdir le traitement des requêtes et affecter leurs performances. Il est donc recommandé d'utiliser des tables partitionnées plutôt que des tables segmentées par date.

Comparaison des options de partitionnement

Le tableau suivant compare les capacités des tables segmentées et des tables partitionnées.

Capacités Tables segmentées Tables partitionnées par date d'ingestion Tables partitionnées
Méthode de partitionnement Aucune : la segmentation des tables et leur interrogation à l'aide d'un opérateur UNION permettent de simuler le partitionnement. Partitionnement en fonction de la date d'ingestion ou d'arrivée des données. Les informations de partition peuvent être référencées à l'aide d'une pseudo-colonne. Partitionnement en fonction des données d'une colonne TIMESTAMP ou DATE spécifiée.
Identifiants de partition None Vous pouvez utiliser n'importe quelle date valide comprise entre 0001-01-01 et 9999-12-31, mais les instructions DML ne peuvent pas faire référence à des dates antérieures à 1970-01-01 ou postérieures à 2159-12-31. Une entrée valide de la colonne DATE ou TIMESTAMP liée. Actuellement, les valeurs de date antérieures à 1970-01-01 ou postérieures à 2159-12-31 sont placées dans une partition UNPARTITIONED partagée. Les valeurs NULL résident dans une partition NULL explicite.
Réduction de la quantité de données à analyser Ne référencez que les segments dont vous avez besoin et limitez la quantité de données en excluant les colonnes inutiles de la requête. Utilisez la pseudo-colonne _PARTITIONTIME pour éliminer des partitions. Appliquez des filtres de prédicat à la colonne de partitionnement.
Nombre de partitions Le nombre de tables est illimité, mais les requêtes ne peuvent référencer que 1 000 tables. Jusqu'à 4 000 partitions Jusqu'à 4 000 partitions
Opérations de mise à jour Vous êtes limité à 1 000 mises à jour par jour. Une opération individuelle ne peut être validée que sur une seule partition : la dernière partition (par défaut), ou une partition spécifiée via un décorateur de partition tel que [TABLE]$[DATE]. Une opération individuelle peut effectuer un commit de données dans un maximum de 2 000 partitions distinctes.
Insertions en flux continu Un tampon global pour la table À l'aide des suffixes de partition, vous pouvez diffuser des données dans des partitions dans les 31 jours qui précèdent et les 16 jours qui suivent la date actuelle (heure UTC). Vous pouvez diffuser des données sur une période comprise entre l'année qui précède et les six mois qui suivent. Les données qui ne s'appliquent pas à cette période sont refusées. Lorsque les données sont diffusées en continu, celles qui concernent la période comprise entre les sept derniers jours et les trois prochains jours sont placées dans le tampon de diffusion en continu, puis extraites vers les partitions correspondantes. Les données qui n'appartiennent pas à cette fenêtre temporelle (mais qui correspondent à celle comprise entre les 12 derniers mois et les six prochains mois) sont placées dans la partition UNPARTITIONED. Lorsque les données non partitionnées sont suffisantes, elles sont chargées dans les partitions correspondantes.
Évaluation du fuseau horaire Défini par la sémantique utilisateur UTC UTC

Quotas et limites applicables aux tables partitionnées

Les tables partitionnées sont soumises à certaines limites dans BigQuery.

Ces quotas et limites s'appliquent également aux différents types de tâches que vous pouvez exécuter sur des tables partitionnées :

Pour plus d'informations sur tous les quotas et limites, consultez la page Quotas et limites.

Tarification des tables partitionnées

Lorsque vous créez et utilisez des tables partitionnées dans BigQuery, vos frais sont basés sur la quantité de données stockées dans les partitions et sur les requêtes que vous exécutez sur les données :

  • Pour en savoir plus sur la tarification relative au stockage, consultez la section Tarifs du stockage.
  • Pour en savoir plus sur la tarification relative aux requêtes, consultez la section Tarifs des requêtes.

De nombreuses opérations de table partitionnée sont gratuites, en particulier le chargement de données dans des partitions, la copie de partitions et l'exportation de données à partir de partitions. Bien que gratuites, ces opérations sont soumises aux quotas et limites de BigQuery. Pour en savoir plus sur toutes les opérations gratuites, consultez la section Opérations gratuites sur la page des tarifs.

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.