Vista de PARTITIONS
La vista INFORMATION_SCHEMA.PARTITIONS
contiene una fila para cada partición.
La consulta de la vista INFORMATION_SCHEMA.PARTITIONS
se limita a 1,000 tablas. Para obtener los datos sobre particiones en el nivel de proyecto, puedes dividir la consulta en varias consultas y, luego, unir los resultados. Si excedes el límite, podrías encontrar un error similar al siguiente:
INFORMATION_SCHEMA.PARTITIONS query attempted to read too many tables. Please add more restrictive filters.
Permisos necesarios
Para consultar la vista INFORMATION_SCHEMA.PARTITIONS
, necesitas los siguientes permisos de Identity and Access Management (IAM):
bigquery.tables.get
bigquery.tables.getData
bigquery.tables.list
Cada uno de los siguientes roles predefinidos de IAM incluye los permisos anteriores:
roles/bigquery.admin
roles/bigquery.dataEditor
roles/bigquery.dataViewer
Para obtener más información sobre IAM de BigQuery, consulta Control de acceso con IAM.
Esquema
Cuando consultas la vista INFORMATION_SCHEMA.PARTITIONS
, los resultados de la consulta
suelen contener una fila por cada partición. La excepción es cuando hay
una combinación de datos de nivel de almacenamiento activo y a largo plazo en la
partición __UNPARTITIONED__
. En ese caso,
la vista muestra dos filas para la partición __UNPARTITIONED__
, una para cada
nivel de almacenamiento.
La vista INFORMATION_SCHEMA.PARTITIONS
tiene el siguiente esquema:
Nombre de la columna | Tipo de datos | Valor |
---|---|---|
TABLE_CATALOG |
STRING |
El ID del proyecto que contiene el conjunto la tabla |
TABLE_SCHEMA |
STRING |
El nombre del conjunto de datos que contiene la tabla (también denominado datasetId ) |
TABLE_NAME |
STRING |
El nombre de la tabla, también denominado tableId |
PARTITION_ID |
STRING |
El ID de una partición única. Para las tablas no particionadas, el valor es NULL . Para las tablas particionadas que contienen filas con valores NULL en la columna de partición, el valor es __NULL__ . |
TOTAL_ROWS |
INTEGER |
La cantidad total de filas en la partición |
TOTAL_LOGICAL_BYTES |
INTEGER |
La cantidad total de bytes lógicos en la partición |
LAST_MODIFIED_TIME |
TIMESTAMP |
El momento en que se escribieron los datos más recientes en la partición |
STORAGE_TIER |
STRING |
El nivel de almacenamiento de la partición:
|
Permiso y sintaxis
Las consultas realizadas a esta vista deben tener un calificador de conjunto de datos. Para consultas con un calificador de conjunto de datos, debes tener permisos para el conjunto de datos. Para obtener más información, consulta Sintaxis. En la siguiente tabla, se explican los permisos de la región y los recursos para esta vista:
Nombre de la vista | Permiso del recurso | Permiso de la región |
---|---|---|
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.PARTITIONS |
Nivel de conjunto de datos | Ubicación del conjunto de datos |
Opcional: PROJECT_ID
: el ID del proyecto de Google Cloud. Si no se especifica, se usa el proyecto predeterminado.
DATASET_ID
: Es el ID del conjunto de datos. Para obtener más información, consulta calificador de conjunto de datos.
Ejemplos
Ejemplo 1
En el siguiente ejemplo, se calcula la cantidad de bytes lógicos que usa cada nivel de almacenamiento en todas las tablas del conjunto de datos llamado mydataset
:
SELECT storage_tier, SUM(total_logical_bytes) AS logical_bytes FROM `mydataset.INFORMATION_SCHEMA.PARTITIONS` GROUP BY storage_tier;
Los resultados son similares a los siguientes:
+--------------+----------------+ | storage_tier | logical_bytes | +--------------+----------------+ | LONG_TERM | 1311495144879 | | ACTIVE | 66757629240 | +--------------+----------------+
Ejemplo 2
En el siguiente ejemplo, se crea una columna que extrae el tipo de partición del campo partition_id
y agrega la información de la partición a nivel de tabla para el conjunto de datos públicos 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;
Los resultados son similares a los siguientes:
+-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+ | 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 | +-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+