Vue PARTITIONS

La vue INFORMATION_SCHEMA.PARTITIONS contient une ligne pour chaque partition.

L'interrogation de la vue INFORMATION_SCHEMA.PARTITIONS est limitée à 1 000 tables. Pour obtenir les données sur les partitions au niveau du projet, vous pouvez diviser la requête en plusieurs requêtes, puis joindre les résultats. Si vous dépassez la limite, vous pouvez rencontrer une erreur semblable à celle-ci :

INFORMATION_SCHEMA.PARTITIONS query attempted to read too many tables. Please add more restrictive filters.

Autorisations requises

Pour interroger la vue INFORMATION_SCHEMA.PARTITIONS, vous avez besoin des autorisations IAM (Identity and Access Management) suivantes :

  • bigquery.tables.get
  • bigquery.tables.getData
  • bigquery.tables.list

Chacun des rôles IAM prédéfinis suivants inclut les autorisations ci-dessus :

  • roles/bigquery.admin
  • roles/bigquery.dataEditor
  • roles/bigquery.dataViewer

Pour plus d'informations sur les autorisations BigQuery, consultez la page Contrôle des accès avec IAM.

Schéma

Lorsque vous interrogez la vue INFORMATION_SCHEMA.PARTITIONS, les résultats de la requête contiennent généralement une ligne pour chaque partition. L'exception concerne les cas où des données de stockage à long terme et actif sont combinées dans la partition __UNPARTITIONED__. Dans ce cas, la vue renvoie deux lignes pour la partition __UNPARTITIONED__, une pour chaque niveau de stockage.

La vue INFORMATION_SCHEMA.PARTITIONS présente le schéma suivant :

Nom de la colonne Type de données Valeur
TABLE_CATALOG STRING ID du projet contenant la table
TABLE_SCHEMA STRING Nom de l'ensemble de données contenant la table, également appelé datasetId
TABLE_NAME STRING Nom de table, également appelé tableId
PARTITION_ID STRING ID d'une partition unique. Pour les tables non partitionnées, la valeur est NULL. Pour les tables partitionnées qui contiennent des lignes comportant la valeur NULL dans la colonne de partitionnement, la valeur est __NULL__.
TOTAL_ROWS INTEGER Nombre total de lignes dans la partition
TOTAL_LOGICAL_BYTES INTEGER Nombre total d'octets logiques dans la partition
LAST_MODIFIED_TIME TIMESTAMP Heure d'écriture des données pour la dernière fois dans la partition
STORAGE_TIER STRING Niveau de stockage de la partition :

Champ d'application et syntaxe

Les requêtes exécutées sur cette vue doivent inclure un qualificatif d'ensemble de données. Pour les requêtes avec un qualificatif d'ensemble de données, vous devez disposer d'autorisations pour l'ensemble de données. Pour en savoir plus, consultez la section Syntaxe. Le tableau suivant explique la portée des régions et des ressources pour cette vue :

Nom de la vue Champ d'application de la ressource Champ d'application de la région
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.PARTITIONS Niveau de l'ensemble de données Emplacement d'un ensemble de données
Remplacez les éléments suivants :

  • Facultatif : PROJECT_ID : ID de votre projet Google Cloud. Si non spécifié, le projet par défaut est utilisé.

Exemples

Exemple 1

L'exemple suivant calcule le nombre d'octets logiques utilisés par chaque niveau de stockage dans toutes les tables de l'ensemble de données mydataset :

SELECT
  storage_tier,
  SUM(total_logical_bytes) AS logical_bytes
FROM
  `mydataset.INFORMATION_SCHEMA.PARTITIONS`
GROUP BY
  storage_tier;

Les résultats ressemblent à ce qui suit :

+--------------+----------------+
| storage_tier | logical_bytes  |
+--------------+----------------+
| LONG_TERM    |  1311495144879 |
| ACTIVE       |    66757629240 |
+--------------+----------------+

Exemple 2

L'exemple suivant crée une colonne qui extrait le type de partition du champ partition_id et agrège les informations de partition au niveau de la table pour l'ensemble de données public bigquery-public-data.covid19_usafacts :

SELECT
  table_name,
  CASE
    WHEN regexp_contains(partition_id, '^[0-9]{4}$') THEN 'YEAR'
    WHEN regexp_contains(partition_id, '^[0-9]{6}$') THEN 'MONTH'
    WHEN regexp_contains(partition_id, '^[0-9]{8}$') THEN 'DAY'
    WHEN regexp_contains(partition_id, '^[0-9]{10}$') THEN 'HOUR'
    END AS partition_type,
  min(partition_id) AS earliest_partition,
  max(partition_id) AS latest_partition_id,
  COUNT(partition_id) AS partition_count,
  sum(total_logical_bytes) AS sum_total_logical_bytes,
  max(last_modified_time) AS max_last_updated_time
FROM `bigquery-public-data.covid19_usafacts.INFORMATION_SCHEMA.PARTITIONS`
GROUP BY 1, 2;

Les résultats ressemblent à ce qui suit :

+-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+
| table_name      | partition_type | earliest_partition | latest_partition_id | partition_count | sum_total_logical_bytes | max_last_updated_time          |
+--------------+-------------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+
| confirmed_cases | DAY            | 20221204           | 20221213            | 10              | 26847302                | 2022-12-13 00:09:25.604000 UTC |
| deaths          | DAY            | 20221204           | 20221213            | 10              | 26847302                | 2022-12-13 00:09:24.709000 UTC |
| summary         | DAY            | 20221204           | 20221213            | 10              | 241285338               | 2022-12-13 00:09:27.496000 UTC |
+-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+