Como receber metadados de streaming usando INFORMATION_SCHEMA

INFORMATION_SCHEMA é uma série de visualizações que fornecem acesso a metadados sobre conjuntos de dados, rotinas, tabelas, visualizações, jobs, reservas e dados de streaming.

Consulte as visualizações de streaming de INFORMATION_SCHEMA para recuperar informações históricas e em tempo real sobre dados de streaming no BigQuery. Essas visualizações contêm estatísticas agregadas por minuto para cada tabela com dados transmitidos nelas. Para mais informações sobre streaming de dados para o BigQuery, consulte Como fazer streaming de dados para o BigQuery.

Permissões necessárias

A recuperação de metadados de streaming usando tabelas INFORMATION_SCHEMA requer permissões de escopo apropriado:

  • STREAMING_TIMELINE_BY_PROJECT requer bigquery.tables.list para o projeto e está disponível para os papéis BigQuery User, BigQuery Data Viewer, BigQuery Data Editor, BigQuery Data Owner, BigQuery Metadata Viewer, BigQuery Resource Admin, e BigQuery Admin.
  • STREAMING_TIMELINE_BY_FOLDER requer bigquery.tables.list para a pasta pai do projeto atual e está disponível para BigQuery User, BigQuery Data Viewer, BigQuery Data Editor e BigQuery Data Owner. , BigQuery Metadata Viewer,BigQuery Resource Admin e BigQuery Admin.
  • STREAMING_TIMELINE_BY_ORGANIZATION requer bigquery.tables.list para a organização e está disponível para os papéis BigQuery User, BigQuery Data Viewer, BigQuery Data Editor, BigQuery Data Owner, BigQuery Metadata Viewer, BigQuery Resource Admin, e BigQuery Admin.

Esquemas

Quando você consulta as visualizações de streaming de INFORMATION_SCHEMA, os resultados da consulta contêm informações históricas e em tempo real sobre dados de streaming no BigQuery. Cada linha nas visualizações a seguir representa estatísticas para streaming em uma tabela específica, agregadas em um intervalo de um minuto a partir de start_timestamp. As estatísticas são agrupadas por código de erro. Portanto, haverá uma linha para cada código de erro encontrado durante o intervalo de um minuto para cada combinação de carimbo de data/hora e tabela. As solicitações bem-sucedidas têm o código de erro definido como NULL. Se nenhum dado foi transmitido para uma tabela durante um determinado período, nenhuma linha estará presente para os carimbos de data/hora correspondentes dessa tabela.

  • INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT contém estatísticas de streaming agregadas por minuto do projeto atual.
  • INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_FOLDER contém estatísticas de streaming agregadas por minuto para a pasta pai do projeto atual, incluindo as subpastas.
  • INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_ORGANIZATION contém estatísticas de streaming agregadas por minuto de toda a organização associada ao projeto atual.

As visualizações INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT, INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_FODLER e INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_ORGANIZATION têm o seguinte esquema:

Nome da coluna Tipo de dados Valor
start_timestamp TIMESTAMP (Coluna de particionamento) Carimbo de data/hora de início do intervalo de 1 minuto das estatísticas agregadas.
project_id STRING (Coluna de clustering) ID do projeto.
project_number INTEGER Número do projeto.
dataset_id STRING (Coluna de clustering) ID do conjunto de dados.
table_id STRING (Coluna de clustering) ID da tabela.
error_code STRING Código de erro retornado para as solicitações especificadas por essa linha. NULL para solicitações bem-sucedidas.
total_requests INTEGER Número total de solicitações dentro do intervalo de 1 minuto.
total_rows INTEGER Número total de linhas de todas as solicitações dentro do intervalo de 1 minuto.
total_input_bytes INTEGER Número total de bytes de todas as linhas dentro do intervalo de um minuto.

Retenção de dados

No momento, somente os últimos 180 dias do histórico de streaming são mantidos nas visualizações de streaming de INFORMATION_SCHEMA.

Regionalidade

As visualizações de streaming de INFORMATION_SCHEMA do BigQuery são regionalizadas. Para consultar essas visualizações, você precisa prefixar um nome de região compatível no formato `region-region-name`.INFORMATION_SCHEMA.view.

Por exemplo:

  • Para consultar dados na multirregião EUA, use `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT.
  • Para consultar dados na multirregião UE, utilize `region-eu`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT.
  • Para consultar dados na região asia-northeast1, use `region-asia-northeast1`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT.

Para obter uma lista de regiões disponíveis, consulte locais do conjunto de dados.

Exemplos

Exemplo 1: falhas de streaming recentes

O exemplo a seguir calcula o detalhamento por minuto do total de solicitações com falha de todas as tabelas no projeto nos últimos 30 minutos, dividido por código de erro.

Para executar a consulta em um projeto diferente do seu projeto padrão, inclua o ID do projeto no seguinte formato: `project_id`.`region-region_name`.INFORMATION_SCHEMA.view. Por exemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT.

Para executar a consulta, faça o seguinte:

Console

  1. No Console do Cloud, abra a página do BigQuery.

    Acesse a página do BigQuery

  2. Na caixa Editor de consultas, insira a seguinte consulta SQL padrão. INFORMATION_SCHEMA requer sintaxe SQL padrão. O SQL padrão é a sintaxe padrão do Console do Cloud.

    SELECT
     start_timestamp,
     error_code,
     SUM(total_requests) AS num_failed_requests
    FROM
     `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    WHERE
     error_code IS NOT NULL
     AND start_timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 30 MINUTE)
    GROUP BY
     start_timestamp,
     error_code
    ORDER BY
     1 DESC
    
    
  3. Clique em Executar.

bq

Use o comando query e especifique a sintaxe SQL padrão usando a sinalização --nouse_legacy_sql ou --use_legacy_sql=false. A sintaxe SQL padrão é obrigatória para consultas INFORMATION_SCHEMA.

Para executar a consulta, insira:

bq query --nouse_legacy_sql \
'SELECT
     start_timestamp,
     error_code,
     SUM(total_requests) AS num_failed_requests
   FROM
     `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
   WHERE
     error_code IS NOT NULL
     AND start_timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 30 MINUTE)
   GROUP BY
     start_timestamp,
     error_code
   ORDER BY
     1 DESC'

Os resultados terão o seguinte formato:

  +---------------------+------------------+---------------------+
  |   start_timestamp   |    error_code    | num_failed_requests |
  +---------------------+------------------+---------------------+
  | 2020-04-15 20:55:00 | INTERNAL_ERROR   |                  41 |
  | 2020-04-15 20:41:00 | CONNECTION_ERROR |                   5 |
  | 2020-04-15 20:30:00 | INTERNAL_ERROR   |                 115 |
  +---------------------+------------------+---------------------+
  

Exemplo 2: detalhamento por minuto de todas as solicitações com códigos de erro

O exemplo a seguir calcula um detalhamento por minuto de solicitações de streaming bem-sucedidas e com falha, divididas em categorias de código de erro. Essa consulta pode ser usada para preencher um painel.

Para executar a consulta em um projeto diferente do seu projeto padrão, inclua o ID do projeto no seguinte formato: `project_id`.`region-region_name`.INFORMATION_SCHEMA.view. Por exemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT.

Para executar a consulta, faça o seguinte:

Console

  1. No Console do Cloud, abra a página do BigQuery.

    Acesse a página do BigQuery

  2. Insira a consulta SQL padrão a seguir na caixa Editor de consultas. INFORMATION_SCHEMA requer sintaxe SQL padrão. O SQL padrão é a sintaxe padrão do Console do Cloud.

    SELECT
     start_timestamp,
     SUM(total_requests) AS total_requests,
     SUM(total_rows) AS total_rows,
     SUM(total_input_bytes) AS total_input_bytes,
     SUM(IF(error_code IN ('QUOTA_EXCEEDED', 'RATE_LIMIT_EXCEEDED'),
         total_requests, 0)) AS quota_error,
     SUM(IF(error_code IN ('INVALID_VALUE', 'NOT_FOUND', 'SCHEMA_INCOMPATIBLE',
                           'BILLING_NOT_ENABLED', 'ACCESS_DENIED', 'UNAUTHENTICATED'),
         total_requests, 0)) AS user_error,
     SUM(IF(error_code IN ('CONNECTION_ERROR','INTERNAL_ERROR'),
         total_requests, 0)) AS server_error,
     SUM(IF(error_code IS NULL, 0, total_requests)) AS total_error,
    FROM
     `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    GROUP BY
     start_timestamp
    ORDER BY
     1 DESC
    
  3. Clique em Executar.

bq

Use o comando query e especifique a sintaxe SQL padrão usando a sinalização --nouse_legacy_sql ou --use_legacy_sql=false. A sintaxe SQL padrão é obrigatória para consultas INFORMATION_SCHEMA.

Para executar a consulta, insira:

bq query --nouse_legacy_sql \
'SELECT
     start_timestamp,
     SUM(total_requests) AS total_requests,
     SUM(total_rows) AS total_rows,
     SUM(total_input_bytes) AS total_input_bytes,
     SUM(IF(error_code IN ("QUOTA_EXCEEDED", "RATE_LIMIT_EXCEEDED"),
         total_requests, 0)) AS quota_error,
     SUM(IF(error_code IN ("INVALID_VALUE", "NOT_FOUND", "SCHEMA_INCOMPATIBLE",
                           "BILLING_NOT_ENABLED", "ACCESS_DENIED", "UNAUTHENTICATED"),
         total_requests, 0)) AS user_error,
     SUM(IF(error_code IN ("CONNECTION_ERROR", "INTERNAL_ERROR"),
         total_requests, 0)) AS server_error,
     SUM(IF(error_code IS NULL, 0, total_requests)) AS total_error,
   FROM
     `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
   GROUP BY
     start_timestamp
   ORDER BY
     1 DESC'

Os resultados terão o seguinte formato:

+---------------------+----------------+------------+-------------------+-------------+------------+--------------+-------------+
|   start_timestamp   | total_requests | total_rows | total_input_bytes | quota_error | user_error | server_error | total_error |
+---------------------+----------------+------------+-------------------+-------------+------------+--------------+-------------+
| 2020-04-15 22:00:00 |         441854 |     441854 |       23784853118 |           0 |          0 |           17 |          17 |
| 2020-04-15 21:59:00 |         355627 |     355627 |       26101982742 |           0 |          0 |            0 |           0 |
| 2020-04-15 21:58:00 |         354603 |     354603 |       26160565341 |           0 |          0 |            0 |           0 |
| 2020-04-15 21:57:00 |         298823 |     298823 |       23877821442 |           0 |          0 |            0 |           0 |
+---------------------+----------------+------------+-------------------+-------------+------------+--------------+-------------+
  

Exemplo 3: tabelas com o maior tráfego de entrada

O exemplo a seguir retorna as estatísticas de streaming das 10 tabelas com maior tráfego de entrada.

Para executar a consulta em um projeto diferente do seu projeto padrão, inclua o ID do projeto no seguinte formato: `project_id`.`region-region_name`.INFORMATION_SCHEMA.view. Por exemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT.

Para executar a consulta, faça o seguinte:

Console

  1. No Console do Cloud, abra a página do BigQuery.

    Acesse a página do BigQuery

  2. Na caixa Editor de consultas, insira a seguinte consulta SQL padrão. INFORMATION_SCHEMA requer sintaxe SQL padrão. O SQL padrão é a sintaxe padrão do Console do Cloud.

    SELECT
     project_id,
     dataset_id,
     table_id,
     SUM(total_rows) AS num_rows,
     SUM(total_input_bytes) AS num_bytes,
     SUM(total_requests) AS num_requests
    FROM
     `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    GROUP BY 1, 2, 3
    ORDER BY num_bytes DESC
    LIMIT 10
    
  3. Clique em Executar.

bq

Use o comando query e especifique a sintaxe SQL padrão usando a sinalização --nouse_legacy_sql ou --use_legacy_sql=false. A sintaxe SQL padrão é obrigatória para consultas INFORMATION_SCHEMA.

Para executar a consulta, insira:

bq query --nouse_legacy_sql \
'SELECT
   project_id,
   dataset_id,
   table_id,
   SUM(total_rows) AS num_rows,
   SUM(total_input_bytes) AS num_bytes,
   SUM(total_requests) AS num_requests
 FROM
   `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
 GROUP BY 1, 2, 3
 ORDER BY num_bytes DESC
 LIMIT 10'

Os resultados terão o seguinte formato:

  +----------------------+------------+-------------------------------+------------+----------------+--------------+
  |      project_id      | dataset_id |           table_id            |  num_rows  |   num_bytes    | num_requests |
  +----------------------+------------+-------------------------------+------------+----------------+--------------+
  | my-project           | dataset1   | table1                        | 8016725532 | 73787301876979 |   8016725532 |
  | my-project           | dataset1   | table2                        |   26319580 | 34199853725409 |     26319580 |
  | my-project           | dataset2   | table1                        |   38355294 | 22879180658120 |     38355294 |
  | my-project           | dataset1   | table3                        |  270126906 | 17594235226765 |    270126906 |
  | my-project           | dataset2   | table2                        |   95511309 | 17376036299631 |     95511309 |
  | my-project           | dataset2   | table3                        |   46500443 | 12834920497777 |     46500443 |
  | my-project           | dataset2   | table4                        |   25846270 |  7487917957360 |     25846270 |
  | my-project           | dataset1   | table4                        |   18318404 |  5665113765882 |     18318404 |
  | my-project           | dataset1   | table5                        |   42829431 |  5343969665771 |     42829431 |
  | my-project           | dataset1   | table6                        |    8771021 |  5119004622353 |      8771021 |
  +----------------------+------------+-------------------------------+------------+----------------+--------------+
  

Exemplo 4: proporção de erros de streaming de uma tabela

No exemplo a seguir, calculamos uma análise detalhada dos erros por dia em uma tabela específica, dividida por código de erro.

Para executar a consulta em um projeto diferente do seu projeto padrão, inclua o ID do projeto no seguinte formato: `project_id`.`region-region_name`.INFORMATION_SCHEMA.view. Por exemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT.

Para executar a consulta, faça o seguinte:

Console

  1. No Console do Cloud, abra a página do BigQuery.

    Acesse a página do BigQuery

  2. Na caixa Editor de consultas, insira a seguinte consulta SQL padrão. INFORMATION_SCHEMA requer sintaxe SQL padrão. O SQL padrão é a sintaxe padrão do Console do Cloud.

    SELECT
     TIMESTAMP_TRUNC(start_timestamp, DAY) as day,
     project_id,
     dataset_id,
     table_id,
     error_code,
     SUM(total_rows) AS num_rows,
     SUM(total_input_bytes) AS num_bytes,
     SUM(total_requests) AS num_requests
    FROM
     `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    WHERE table_id LIKE "my_table"
    GROUP BY project_id, dataset_id, table_id, error_code, day
    ORDER BY day, project_id, dataset_id DESC
    
  3. Clique em Executar.

bq

Use o comando query e especifique a sintaxe SQL padrão usando a sinalização --nouse_legacy_sql ou --use_legacy_sql=false. A sintaxe SQL padrão é obrigatória para consultas INFORMATION_SCHEMA.

Para executar a consulta, insira:

bq query --nouse_legacy_sql \
'SELECT
   TIMESTAMP_TRUNC(start_timestamp, DAY) as day,
   project_id,
   dataset_id,
   table_id,
   error_code,
   SUM(total_rows) AS num_rows,
   SUM(total_input_bytes) AS num_bytes,
   SUM(total_requests) AS num_requests
 FROM
   `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
 WHERE table_id LIKE "my_table"
 GROUP BY project_id, dataset_id, table_id, error_code, day
 ORDER BY day, project_id, dataset_id DESC'

Os resultados terão a aparência abaixo:

+---------------------+-------------+------------+----------+----------------+----------+-----------+--------------+
|         day         |  project_id | dataset_id | table_id |   error_code   | num_rows | num_bytes | num_requests |
+---------------------+-------------+------------+----------+----------------+----------+-----------+--------------+
| 2020-04-21 00:00:00 | my_project  | my_dataset | my_table | NULL           |       41 |    252893 |           41 |
| 2020-04-20 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2798 |  10688286 |         2798 |
| 2020-04-19 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2005 |   7979495 |         2005 |
| 2020-04-18 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2054 |   7972378 |         2054 |
| 2020-04-17 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2056 |   6978079 |         2056 |
| 2020-04-17 00:00:00 | my_project  | my_dataset | my_table | INTERNAL_ERROR |        4 |     10825 |            4 |
+---------------------+-------------+------------+----------+----------------+----------+-----------+--------------+
  

Próximas etapas