Consultas de vistas materializadas contínuas

Para criar uma vista materializada contínua de uma tabela do Bigtable, executa uma consulta SQL que define a vista materializada contínua.

Este documento descreve conceitos e padrões para ajudar a preparar a consulta SQL da vista materializada contínua. Antes de ler este documento, deve estar familiarizado com as vistas materializadas contínuas e o GoogleSQL para Bigtable.

As vistas materializadas contínuas usam uma sintaxe SQL restrita. O padrão seguinte mostra como criar uma consulta SQL de visualização materializada contínua:

SELECT
  expression AS alias [, ...]
FROM from_item
[ WHERE bool_expression ]
GROUP BY expression [, ...];

from_item:
    {
      table_name [ as_alias ]
      | field_path
      }

as_alias:
    [ AS ] alias

Se quiser criar uma consulta SQL de vista materializada contínua como um índice secundário assíncrono, use a cláusula ORDER BY:

SELECT
  expression AS alias [, ...]
FROM from_item
[ WHERE bool_expression ]
ORDER BY expression [, ...];

from_item:
    {
      table_name [ as_alias ]
      | field_path
      }

as_alias:
    [ AS ] alias

Limitações das consultas

As seguintes regras aplicam-se a uma consulta SQL usada para criar uma vista materializada contínua:

  • Tem de ser uma declaração SELECT.
  • Tem de ter uma cláusula GROUP BY ou, para consultas de índice secundário assíncronas, uma cláusula ORDER BY, mas não ambas.
  • Tem de usar apenas funções de agregação suportadas.
  • Pode ter várias agregações por grupo.

Agregações suportadas

Pode usar as seguintes funções de agregação numa consulta SQL que define uma vista materializada contínua:

  • COUNT
  • SUM
  • MIN
  • MAX
  • HLL_COUNT.INIT
  • HLL_COUNT.MERGE
  • HLL_COUNT.MERGE_PARTIAL
  • ANY_VALUE
  • BIT_AND
  • BIT_OR
  • BIT_XOR
  • AVG

Se SELECT COUNT(*), tem de definir uma chave de linha, como no exemplo seguinte:

SELECT
  '*' AS _key,
  COUNT(*) AS count
FROM
  foo
GROUP BY
  _key;

Funcionalidades SQL não suportadas

Não pode usar as seguintes funcionalidades SQL:

  • Qualquer funcionalidade não suportada pelo GoogleSQL para Bigtable
  • ARRAY
  • ARRAY_AGG
  • ARRAY_CONCAT_AGG
  • COUNT_IF
  • CURRENT_TIME e outras funções não determinísticas
  • DATE, DATETIME como colunas de saída (use TIMESTAMP ou armazene uma string).
  • DESC ordenar na saída
  • DISTINCT, como em SUM(*DISTINCT* value))
  • LIMIT/OFFSET
  • SELECT *
  • cláusula OVER para criar uma agregação de janelas
  • STRUCT

Também não pode aninhar cláusulas GROUP BY ou ORDER BY, nem criar colunas de mapas. Para ver limitações adicionais, consulte a secção Limitações.

Evitar linhas excluídas

As linhas de entrada são excluídas de uma vista materializada contínua nas seguintes circunstâncias:

  • É selecionado mais de 1 MiB de dados da linha. Por exemplo, se a sua consulta for SELECT apple AS apples , SUM(banana) AS sum_bananas FROM my_table GROUP BY apples, qualquer linha que contenha mais de 1 MiB de dados nas colunas apple e banana é excluída da vista materializada contínua.
  • A linha produz mais de 1 MiB de dados. Isto pode ocorrer quando usa consultas como SELECT REPEAT(apple, 1000) ou usa constantes grandes.
  • É gerada uma quantidade de dados mais de 10 vezes superior à selecionada.
  • A consulta não corresponde aos seus dados. Isto inclui tentar dividir por zero, um excesso de capacidade de números inteiros ou esperar um formato de chave de linha que não seja usado em todas as chaves de linha.

As linhas excluídas incrementam a métrica de erros do utilizador quando são processadas pela primeira vez. Para mais informações sobre as métricas que podem ajudar a monitorizar as vistas materializadas contínuas, consulte o artigo Métricas.

Detalhes da consulta

Esta secção descreve uma consulta de vista materializada contínua e o aspeto dos resultados quando a vista é consultada. Os dados na tabela de origem são a entrada, e os dados de resultados na vista materializada contínua são a saída. Os dados de saída são agregados ou não agregados (na chave definida).

Declaração SELECT

A declaração SELECT configura as colunas e as agregações usadas na vista materializada contínua. A declaração tem de usar uma cláusula GROUP BY para agregar linhas ou uma cláusula ORDER BY para criar um índice secundário assíncrono.

O SELECT * não é suportado, mas o SELECT COUNT(*) é.

Tal como numa declaração SELECT típica, pode ter várias agregações por um conjunto de dados agrupados. As colunas não agrupadas têm de ser um resultado de agregação.

Este é um exemplo de uma consulta de agregação GROUP BY padrão em SQL:

SELECT
  myfamily["node"] AS node,
  myfamily["type"] AS type,
  COUNT(clicks) AS clicks_per_key
FROM
  mytable
GROUP BY