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