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
Reemplaza lo siguiente:

  • Opcional: PROJECT_ID: el ID del proyecto de Google Cloud. Si no se especifica, se usa el proyecto predeterminado.

    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 |
    +-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+