Vista TABLE_STORAGE

A vista INFORMATION_SCHEMA.TABLE_STORAGE oferece um resumo atual da utilização do armazenamento para tabelas e vistas materializadas. Quando consulta a vista INFORMATION_SCHEMA.TABLE_STORAGE, os resultados da consulta contêm uma linha para cada tabela ou vista materializada do projeto atual.

Os dados na vista INFORMATION_SCHEMA.TABLE_STORAGE não são mantidos em tempo real e as atualizações são normalmente atrasadas alguns segundos ou minutos. As alterações ao armazenamento causadas apenas pela partição ou pela expiração da tabela, ou causadas por modificações na janela de viagem no tempo do conjunto de dados, podem demorar até um dia a serem refletidas na vista INFORMATION_SCHEMA.TABLE_STORAGE. Nos casos de eliminação de conjuntos de dados em que o conjunto de dados contém mais de 1000 tabelas, esta vista não reflete a alteração até que o intervalo de tempo do conjunto de dados eliminado tenha passado.

As vistas de armazenamento de tabelas oferecem-lhe uma forma conveniente de observar o seu consumo de armazenamento atual e, além disso, fornecem detalhes sobre se o seu armazenamento usa bytes lógicos não comprimidos, bytes físicos comprimidos ou bytes de viagem no tempo. Estas informações podem ajudar em tarefas como o planeamento do crescimento futuro e a compreensão dos padrões de atualização das tabelas.

Dados incluídos nas *_BYTES colunas

As colunas *_BYTES nas vistas de armazenamento de tabelas incluem informações sobre a sua utilização de bytes de armazenamento. Estas informações são determinadas através da análise da sua utilização de armazenamento para vistas materializadas e os seguintes tipos de tabelas:

  • Tabelas permanentes criadas através de qualquer um dos métodos descritos no artigo Crie e use tabelas.
  • Tabelas temporárias criadas em sessões. Estas tabelas são colocadas em conjuntos de dados com nomes gerados, como "_c018003e063d09570001ef33ae401fad6ab92a6a".
  • Tabelas temporárias criadas em consultas com várias declarações ("scripts"). Estas tabelas são colocadas em conjuntos de dados com nomes gerados, como "_script72280c173c88442c3a7200183a50eeeaa4073719".

Os dados armazenados na cache de resultados da consulta não lhe são cobrados e, por isso, não estão incluídos nos valores da coluna *_BYTES.

Os clones e as capturas de ecrã mostram os valores das colunas *_BYTES como se fossem tabelas completas, em vez de mostrarem a diferença em relação ao armazenamento usado pela tabela base, pelo que são uma sobrestimação. A sua fatura tem em conta corretamente esta diferença na utilização do armazenamento. Para mais informações sobre os bytes delta armazenados e faturados por clones e cópias instantâneas, consulte a TABLE_STORAGE_USAGE_TIMELINE vista.

Preveja a faturação do armazenamento

Para prever a faturação de armazenamento mensal de um conjunto de dados, pode usar as colunas logical ou physical *_BYTES nesta vista, consoante o modelo de faturação de armazenamento do conjunto de dados usado pelo conjunto de dados. Tenha em atenção que esta é apenas uma previsão aproximada e os valores de faturação precisos são calculados com base na utilização pela infraestrutura de faturação do armazenamento do BigQuery e visíveis na faturação do Google Cloud.

Para conjuntos de dados que usam um modelo de faturação lógico, pode prever os custos de armazenamento mensais da seguinte forma:

((ACTIVE_LOGICAL_BYTES value / POW(1024, 3)) * active logical bytes pricing) + ((LONG_TERM_LOGICAL_BYTES value / POW(1024, 3)) * long-term logical bytes pricing)

O valor ACTIVE_LOGICAL_BYTES de uma tabela reflete os bytes ativos usados atualmente por essa tabela.

Para conjuntos de dados que usam um modelo de faturação físico, pode prever os custos de armazenamento da seguinte forma:

((ACTIVE_PHYSICAL_BYTES + FAIL_SAFE_PHYSICAL_BYTES valor / POW(1024, 3)) * preço dos bytes físicos ativos) + ((LONG_TERM_PHYSICAL_BYTES valor / POW(1024, 3)) * preço dos bytes físicos a longo prazo)

O valor ACTIVE_PHYSICAL_BYTES de uma tabela reflete os bytes ativos usados atualmente por essa tabela, além dos bytes usados para a funcionalidade de viagem no tempo dessa tabela.

Para ver os bytes ativos apenas da tabela, subtraia o valor TIME_TRAVEL_PHYSICAL_BYTES ao valor ACTIVE_PHYSICAL_BYTES.

Para mais informações, consulte os preços de armazenamento.

Funções necessárias

Para obter as autorizações de que precisa para consultar a vista INFORMATION_SCHEMA.TABLE_STORAGE, peça ao seu administrador para lhe conceder a função de IAM de leitor de metadados do BigQuery (roles/bigquery.metadataViewer) no projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para consultar a vista INFORMATION_SCHEMA.TABLE_STORAGE. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para consultar a vista INFORMATION_SCHEMA.TABLE_STORAGE:

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

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Esquema

A vista INFORMATION_SCHEMA.TABLE_STORAGE tem o seguinte esquema:

Nome da coluna Tipo de dados Valor
PROJECT_ID STRING O ID do projeto que contém o conjunto de dados.
PROJECT_NUMBER INT64 O número do projeto que contém o conjunto de dados.
TABLE_CATALOG STRING O ID do projeto que contém o conjunto de dados.
TABLE_SCHEMA STRING O nome do conjunto de dados que contém a tabela ou a vista materializada, também conhecido como datasetId.
TABLE_NAME STRING O nome da tabela ou da vista materializada, também conhecido como tableId.
CREATION_TIME TIMESTAMP A hora de criação da tabela.
TOTAL_ROWS INT64 O número total de linhas na tabela ou na vista materializada.
TOTAL_PARTITIONS INT64 O número de partições presentes na tabela ou na vista materializada. As tabelas não particionadas devolvem 0.
TOTAL_LOGICAL_BYTES INT64 O número total de bytes lógicos (não comprimidos) na tabela ou na vista materializada.
ACTIVE_LOGICAL_BYTES INT64 Número de bytes lógicos (não comprimidos) com menos de 90 dias.
LONG_TERM_LOGICAL_BYTES INT64 Número de bytes lógicos (não comprimidos) com mais de 90 dias.
CURRENT_PHYSICAL_BYTES INT64 Número total de bytes físicos para o armazenamento atual da tabela em todas as partições.
TOTAL_PHYSICAL_BYTES INT64 Número total de bytes físicos (comprimidos) usados para armazenamento, incluindo bytes ativos, a longo prazo e de viagem no tempo (dados eliminados ou alterados). Os bytes de segurança (dados eliminados ou alterados retidos após o período de recuperação) não estão incluídos.
ACTIVE_PHYSICAL_BYTES INT64 Número de bytes físicos (comprimidos) com menos de 90 dias, incluindo bytes de viagem no tempo (dados eliminados ou alterados).
LONG_TERM_PHYSICAL_BYTES INT64 Número de bytes físicos (comprimidos) com mais de 90 dias.
TIME_TRAVEL_PHYSICAL_BYTES INT64 Número de bytes físicos (comprimidos) usados pelo armazenamento de viagem no tempo (dados eliminados ou alterados).
STORAGE_LAST_MODIFIED_TIME TIMESTAMP A hora mais recente em que os dados foram escritos na tabela.
DELETED BOOLEAN Indica se a tabela foi eliminada ou não.
TABLE_TYPE STRING O tipo de tabela. Por exemplo, BASE TABLE.
MANAGED_TABLE_TYPE STRING Esta coluna está em pré-visualização. O tipo gerido da tabela. Por exemplo, NATIVE ou BIGLAKE.
FAIL_SAFE_PHYSICAL_BYTES INT64 Número de bytes físicos (comprimidos) usados pelo armazenamento à prova de falhas (dados eliminados ou alterados).
LAST_METADATA_INDEX_REFRESH_TIME TIMESTAMP A hora da última atualização do índice de metadados da tabela.
TABLE_DELETION_REASON STRING Motivo da eliminação da tabela se o campo DELETED for verdadeiro. Os valores possíveis são os seguintes:
  • TABLE_EXPIRATION: tabela eliminada após o tempo de validade definido
  • DATASET_DELETION: conjunto de dados eliminado pelo utilizador
  • USER_DELETED: tabela foi eliminada pelo utilizador
TABLE_DELETION_TIME TIMESTAMP A hora de eliminação da tabela.

Âmbito e sintaxe

As consultas nesta vista têm de incluir um qualificador de região. A tabela seguinte explica o âmbito da região para esta vista:

Nome da visualização de propriedade Âmbito do recurso Âmbito da região
[`PROJECT_ID`.]`region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE[_BY_PROJECT] Nível do projeto REGION
Substitua o seguinte:
  • Opcional: PROJECT_ID: o ID do seu projeto do Google Cloud Google Cloud. Se não for especificado, é usado o projeto predefinido.
  • REGION: qualquer nome da região do conjunto de dados. Por exemplo, `region-us`.

O exemplo seguinte mostra como devolver informações de armazenamento para tabelas num projeto especificado:

SELECT * FROM `myProject`.`region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE;

O exemplo seguinte mostra como devolver informações de armazenamento para tabelas numa região especificada:

SELECT * FROM `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_PROJECT;

Exemplos

Exemplo 1:

O exemplo seguinte mostra o total de bytes lógicos faturados para o projeto atual.

SELECT
  SUM(total_logical_bytes) AS total_logical_bytes
FROM
  `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE;

O resultado é semelhante ao seguinte:

+---------------------+
| total_logical_bytes |
+---------------------+
| 971329178274633     |
+---------------------+
Exemplo 2:

O exemplo seguinte mostra diferentes bytes de armazenamento em GiB ao nível dos conjuntos de dados para o projeto atual.

SELECT
  table_schema AS dataset_name,
  -- Logical
  SUM(total_logical_bytes) / power(1024, 3) AS total_logical_gib,  
  SUM(active_logical_bytes) / power(1024, 3) AS active_logical_gib, 
  SUM(long_term_logical_bytes) / power(1024, 3) AS long_term_logical_gib, 
  -- Physical
  SUM(total_physical_bytes) / power(1024, 3) AS total_physical_gib,
  SUM(active_physical_bytes) / power(1024, 3) AS active_physical_gib,
  SUM(active_physical_bytes - time_travel_physical_bytes) / power(1024, 3) AS active_no_tt_physical_gib,
  SUM(long_term_physical_bytes) / power(1024, 3) AS long_term_physical_gib,
  SUM(time_travel_physical_bytes) / power(1024, 3) AS time_travel_physical_gib,
  SUM(fail_safe_physical_bytes) / power(1024, 3) AS fail_safe_physical_gib 
FROM
  `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE 
WHERE 
  table_type ='BASE TABLE'
GROUP BY 
  table_schema  
ORDER BY 
  dataset_name 
Exemplo 3:

O exemplo seguinte mostra como prever a diferença de preços por conjunto de dados entre os modelos de faturação lógicos e físicos para os próximos 30 dias. Este exemplo pressupõe que a utilização de armazenamento futura é constante nos próximos 30 dias a partir do momento em que a consulta foi executada. Tenha em atenção que a previsão está limitada às tabelas base e exclui todos os outros tipos de tabelas num conjunto de dados.

Os preços usados nas variáveis de preços para esta consulta são para a região de us-central1. Se quiser executar esta consulta para uma região diferente, atualize as variáveis de preços adequadamente. Consulte os preços de armazenamento para ver informações de preços.

  1. Abra a página do BigQuery na Google Cloud consola.

    Aceda à página do BigQuery

  2. Introduza a seguinte consulta GoogleSQL na caixa Editor de consultas. INFORMATION_SCHEMA requer a sintaxe GoogleSQL. O GoogleSQL é a sintaxe predefinida na Google Cloud consola.

    DECLARE active_logical_gib_price FLOAT64 DEFAULT 0.02;
    DECLARE long_term_logical_gib_price FLOAT64 DEFAULT 0.01;
    DECLARE active_physical_gib_price FLOAT64 DEFAULT 0.04;
    DECLARE long_term_physical_gib_price FLOAT64 DEFAULT 0.02;
    
    WITH
     storage_sizes AS (
       SELECT
         table_schema AS dataset_name,
         -- Logical
         SUM(IF(deleted=false, active_logical_bytes, 0)) / power(1024, 3) AS active_logical_gib,
         SUM(IF(deleted=false, long_term_logical_bytes, 0)) / power(1024, 3) AS long_term_logical_gib,
         -- Physical
         SUM(active_physical_bytes) / power(1024, 3) AS active_physical_gib,
         SUM(active_physical_bytes - time_travel_physical_bytes) / power(1024, 3) AS active_no_tt_physical_gib,
         SUM(long_term_physical_bytes) / power(1024, 3) AS long_term_physical_gib,
         -- Restorable previously deleted physical
         SUM(time_travel_physical_bytes) / power(1024, 3) AS time_travel_physical_gib,
         SUM(fail_safe_physical_bytes) / power(1024, 3) AS fail_safe_physical_gib,
       FROM
         `region-REGION`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_PROJECT
       WHERE total_physical_bytes + fail_safe_physical_bytes > 0
         -- Base the forecast on base tables only for highest precision results
         AND table_type  = 'BASE TABLE'
         GROUP BY 1
     )
    SELECT
      dataset_name,
      -- Logical
      ROUND(active_logical_gib, 2) AS active_logical_gib,
      ROUND(long_term_logical_gib, 2) AS long_term_logical_gib,
      -- Physical
      ROUND(active_physical_gib, 2) AS active_physical_gib,
      ROUND(long_term_physical_gib, 2) AS long_term_physical_gib,
      ROUND(time_travel_physical_gib, 2) AS time_travel_physical_gib,
      ROUND(fail_safe_physical_gib, 2) AS fail_safe_physical_gib,
      -- Compression ratio
      ROUND(SAFE_DIVIDE(active_logical_gib, active_no_tt_physical_gib), 2) AS active_compression_ratio,
      ROUND(SAFE_DIVIDE(long_term_logical_gib, long_term_physical_gib), 2) AS long_term_compression_ratio,
      -- Forecast costs logical
      ROUND(active_logical_gib * active_logical_gib_price, 2) AS forecast_active_logical_cost,
      ROUND(long_term_logical_gib * long_term_logical_gib_price, 2) AS forecast_long_term_logical_cost,
      -- Forecast costs physical
      ROUND((active_no_tt_physical_gib + time_travel_physical_gib + fail_safe_physical_gib) * active_physical_gib_price, 2) AS forecast_active_physical_cost,
      ROUND(long_term_physical_gib * long_term_physical_gib_price, 2) AS forecast_long_term_physical_cost,
      -- Forecast costs total
      ROUND(((active_logical_gib * active_logical_gib_price) + (long_term_logical_gib * long_term_logical_gib_price)) -
         (((active_no_tt_physical_gib + time_travel_physical_gib + fail_safe_physical_gib) * active_physical_gib_price) + (long_term_physical_gib * long_term_physical_gib_price)), 2) AS forecast_total_cost_difference
    FROM
      storage_sizes
    ORDER BY
      (forecast_active_logical_cost + forecast_active_physical_cost) DESC;
  3. Clique em Executar.

O resultado é semelhante ao seguinte:

+--------------+--------------------+-----------------------+---------------------+------------------------+--------------------------+-----------------------------+------------------------------+----------------------------------+-------------------------------+----------------------------------+--------------------------------+
| dataset_name | active_logical_gib | long_term_logical_gib | active_physical_gib | long_term_physical_gib | active_compression_ratio | long_term_compression_ratio | forecast_active_logical_cost | forecaset_long_term_logical_cost | forecast_active_physical_cost | forecast_long_term_physical_cost | forecast_total_cost_difference |
+--------------+--------------------+-----------------------+---------------------+------------------------+--------------------------+-----------------------------+------------------------------+----------------------------------+-------------------------------+----------------------------------+--------------------------------+
| dataset1     |               10.0 |                  10.0 |                 1.0 |                    1.0 |                     10.0 |                        10.0 |                          0.2 |                              0.1 |                          0.04 |                             0.02 |                           0.24 |