Visualização PARTITIONS

A visualização INFORMATION_SCHEMA.PARTITIONS contém uma linha para cada partição.

As consultas na visualização INFORMATION_SCHEMA.PARTITIONS são limitadas a 1.000 tabelas. Para receber os dados sobre partições no nível do projeto, divida a consulta em várias consultas e, em seguida, agrupe os resultados. Se você exceder o limite, poderá encontrar um erro semelhante ao seguinte:

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

Permissões necessárias

Para consultar a visualização INFORMATION_SCHEMA.PARTITIONS, você precisa das seguintes permissões de gerenciamento de identidade e acesso (IAM, na sigla em inglês):

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

Cada um dos seguintes papéis predefinidos do IAM inclui as permissões anteriores:

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

Para mais informações sobre as permissões do BigQuery, consulte Controle de acesso com o IAM.

Esquema

Quando você consulta a visualização INFORMATION_SCHEMA.PARTITIONS, os resultados da consulta geralmente contêm uma linha para cada partição. A exceção é quando há uma combinação de dados de camada de armazenamento ativa e de longo prazo na partição __UNPARTITIONED__. Nesse caso, a visualização retorna duas linhas para a partição __UNPARTITIONED__, uma para cada nível de armazenamento.

A visualização INFORMATION_SCHEMA.PARTITIONS tem o seguinte esquema:

Nome da coluna Tipo de dados Valor
TABLE_CATALOG STRING O ID do projeto que contém a tabela
TABLE_SCHEMA STRING O nome do conjunto de dados que contém a tabela, também conhecido como datasetId
TABLE_NAME STRING O nome da tabela, também conhecido como tableId
PARTITION_ID STRING Um ID de uma única partição. Para tabelas não particionadas, o valor é NULL. Para tabelas particionadas que contêm linhas com valores NULL na coluna de particionamento, o valor é __NULL__.
TOTAL_ROWS INTEGER O número total de linhas na partição
TOTAL_LOGICAL_BYTES INTEGER O número total de bytes lógicos na partição
LAST_MODIFIED_TIME TIMESTAMP A hora em que os dados foram gravados mais recentemente na partição
STORAGE_TIER STRING Nível de armazenamento da partição:

Escopo e sintaxe

As consultas nesta visualização precisam ter um qualificador de conjunto de dados. Para consultas com um qualificador de conjunto de dados, é preciso ter permissões para o conjunto de dados. Consulte mais informações em Sintaxe. A tabela a seguir explica os escopos de região e recurso dessa visualização:

Nome da visualização Escopo do recurso Escopo da região
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.PARTITIONS Nível do conjunto de dados Local do conjunto de dados
Substitua:

  • Opcional: PROJECT_ID: o ID do seu projeto do Google Cloud. Se não for especificado, o projeto padrão será usado.

Exemplos

Exemplo 1

No seguinte exemplo, calculamos a quantidade de bytes lógicos usados por cada nível de armazenamento em todas as tabelas de um conjunto de dados com o nome mydataset:

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

Os resultados são semelhantes aos seguintes:

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

Exemplo 2

O exemplo a seguir cria uma coluna que extrai o tipo de partição do campo partition_id e agrega informações de partição no nível da tabela para o conjunto de dados 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;

Os resultados são semelhantes aos seguintes:

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