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 BYou, para consultas de índice secundário assíncronas, uma cláusulaORDER 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:
COUNTSUMMINMAXHLL_COUNT.INITHLL_COUNT.MERGEHLL_COUNT.MERGE_PARTIALANY_VALUEBIT_ANDBIT_ORBIT_XORAVG
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
ARRAYARRAY_AGGARRAY_CONCAT_AGGCOUNT_IFCURRENT_TIMEe outras funções não determinísticasDATE,DATETIMEcomo colunas de saída (useTIMESTAMPou armazene uma string).DESCordenar na saídaDISTINCT, como emSUM(*DISTINCT* value))LIMIT/OFFSETSELECT *- cláusula
OVERpara 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 colunasappleebananaé 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