Vista PARTITIONS

La vista INFORMATION_SCHEMA.PARTITIONS contiene una fila por cada partición.

Las consultas de la vista INFORMATION_SCHEMA.PARTITIONS están limitadas a 1000 tablas. Para obtener los datos sobre las particiones a nivel de proyecto, puedes dividir la consulta en varias consultas y, a continuación, combinar los resultados. Si superas el límite, es posible que se produzca un error similar al siguiente:

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

Permisos obligatorios

Para consultar la vista INFORMATION_SCHEMA.PARTITIONS, necesitas los siguientes permisos de gestión de identidades y accesos (IAM):

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

Cada uno de los siguientes roles de gestión de identidades y accesos predefinidos incluye los permisos anteriores:

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

Para obtener más información sobre los permisos de BigQuery, consulta Control de acceso con gestión de identidades y accesos.

Esquema

Cuando consultas la vista INFORMATION_SCHEMA.PARTITIONS, los resultados de la consulta suelen contener una fila por cada partición. La excepción se da 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 devuelve dos filas para la partición __UNPARTITIONED__, una por 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 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 ID de una sola partición. En las tablas sin particiones, el valor es NULL. En las tablas particionadas que contienen filas con valores NULL en la columna de partición, el valor es __NULL__.
TOTAL_ROWS INTEGER Número total de filas de la partición.
TOTAL_LOGICAL_BYTES INTEGER Número total de bytes lógicos de la partición.
LAST_MODIFIED_TIME TIMESTAMP La hora más reciente en la que se escribieron datos en la partición. Se usa para calcular si una partición cumple los requisitos para el almacenamiento a largo plazo. Transcurridos 90 días, la partición pasa automáticamente del almacenamiento activo al almacenamiento a largo plazo. Para obtener más información, consulta los precios del almacenamiento de BigQuery. Este campo se actualiza cuando se insertan, cargan, transmiten o modifican datos en la partición. Es posible que no se reflejen las modificaciones que impliquen la eliminación de registros.
STORAGE_TIER STRING Nivel de almacenamiento de la partición:

Ámbito y sintaxis

Las consultas en esta vista deben incluir un calificador de conjunto de datos. En el caso de las consultas con un calificador de conjunto de datos, debes tener permisos para el conjunto de datos. Para obtener más información, consulta el artículo sobre la sintaxis. En la siguiente tabla se explican los ámbitos de región y de recurso de esta vista:

Nombre de la vista Ámbito de los recursos Ámbito de la región
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.PARTITIONS Nivel del conjunto de datos Ubicación del conjunto de datos
Sustituye lo siguiente:
  • Opcional: PROJECT_ID: el ID de tu Google Cloud proyecto. Si no se especifica, se usa el proyecto predeterminado.
  • DATASET_ID: el ID de tu conjunto de datos. Para obtener más información, consulta Calificador de conjunto de datos.

Ejemplos

Ejemplo 1

En el siguiente ejemplo se calcula el número de bytes lógicos utilizados por cada nivel de almacenamiento en todas las tablas de un 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 deberían ser similares a los siguientes:

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

Ejemplo 2

En el ejemplo siguiente se crea una columna que extrae el tipo de partición del campo partition_id y agrega información de partición a nivel de tabla del conjunto de datos público 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 deberían ser 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 |
+-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+