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 |
Facultatif : PROJECT_ID
: ID de votre projet Google Cloud. Si non spécifié, le projet par défaut est utilisé.
DATASET_ID
: ID de votre ensemble de données. Pour en savoir plus, consultez la section Qualificatif d'ensemble de données.
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 | +-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+