Consultas de índice secundário assíncronas
Este documento fornece exemplos de padrões de consultas comuns para criar índices secundários assíncronos no Bigtable. Os exemplos usam IDs e valores semelhantes aos de Dados para exemplos, e pode criar uma tabela de teste para testar as consultas.
Antes de ler esta página, familiarize-se com os artigos Crie um índice secundário assíncrono e GoogleSQL para Bigtable.
Consultas de exemplo
Os exemplos seguintes mostram como criar índices secundários assíncronos usando diferentes consultas GoogleSQL.
Crie um índice invertido com base num qualificador de coluna e em valores
A consulta seguinte cria um índice invertido extraindo todos os pares de chave-valor de uma família de colunas com um esquema flexível. Usa MAP_ENTRIES para obter uma matriz de todos os dados que a família de colunas stats_summary armazena e, em seguida, UNNEST para transformar cada par de chave/valor numa linha separada. O índice resultante permite pesquisas rápidas com base em stat_description e stat_value. Se
adicionar novos tipos de estatísticas à tabela de origem, o Bigtable
inclui-os automaticamente no índice assíncrono.
SELECT
stats.key as stat_description,
stats.value as stat_value,
_key as original_key,
cell_plan as cell_plan
FROM test_table
CROSS JOIN UNNEST(MAP_ENTRIES(stats_summary)) stats
ORDER BY stat_description, stat_value, original_key
Como resultado, cada par de chave-valor da família de colunas stats_summary original tem a sua própria linha na vista materializada contínua:
| stat_description (key) | stat_value (key) | original_key (chave) | cell_plan |
|---|---|---|---|
| connected_cell | "2" | phone#4c410523#20190501 | { "data_plan_01gb": "true", "data_plan_05gb": "false" } |
| os_build | PQ2A.190401.002 | phone#5c10102#20190501 | { "data_plan_10gb": "false" } |
Para obter pesquisas rápidas em dados que o Bigtable capturou como valores, use as novas chaves de linhas para consultar os dados, conforme mostrado no exemplo seguinte:
SELECT cell_plan, original_key
FROM `mv_inverted_index`
WHERE stat_description = "connected_cell"
AND stat_value = "2"
Crie uma nova chave de linha com base em dados existentes
O exemplo seguinte cria uma nova chave de índice, total_plan_capacity, categorizando os planos de dados que a família de colunas cell_plan armazena. A consulta usa MAP_KEYS para obter todas as chaves em cell_plan e ARRAY_INCLUDES_ANY para filtrar chaves específicas do plano de dados. Uma declaração CASE define, em seguida, a lógica para atribuir uma categoria total_plan_capacity com base na presença e nos valores destes planos de dados. Isto permite pesquisas eficientes com base na capacidade do plano de dados combinada.
SELECT
CASE
WHEN
cell_plan['data_plan_01gb'] = "true"
AND (cell_plan['data_plan_05gb'] = "false" OR cell_plan['data_plan_05gb'] IS NULL)
AND (cell_plan['data_plan_10gb'] = "false" OR cell_plan['data_plan_10gb'] IS NULL)
THEN 'x-small'
WHEN
cell_plan['data_plan_01gb'] = "true"
AND (cell_plan['data_plan_05gb'] = "true")
AND (cell_plan['data_plan_10gb'] = "false" OR cell_plan['data_plan_10gb'] IS NULL)
THEN 'small'
WHEN
cell_plan['data_plan_01gb'] = "true"
AND (cell_plan['data_plan_05gb'] = "false" OR cell_plan['data_plan_05gb'] IS NULL)
AND (cell_plan['data_plan_10gb'] = "true")
THEN 'medium'
WHEN
(cell_plan['data_plan_01gb'] = "false" OR cell_plan['data_plan_01gb'] IS NULL)
AND (cell_plan['data_plan_05gb'] = "true")
AND (cell_plan['data_plan_10gb'] = "true")
THEN 'large'
WHEN
cell_plan['data_plan_01gb'] = "true"
AND (cell_plan['data_plan_05gb'] = "true")
AND (cell_plan['data_plan_10gb'] = "true")
THEN 'x-large'
END as total_plan_capacity,
_key as original_key,
stats_summary
FROM test_table
WHERE ARRAY_INCLUDES_ANY(MAP_KEYS(cell_plan), ["data_plan_01gb", "data_plan_05gb","data_plan_10gb"])
ORDER BY total_plan_capacity, original_key
Crie um índice baseado em séries temporais
O Bigtable armazena cada valor de célula e o respetivo carimbo de data/hora associado. Se usar a flag WITH_HISTORY=>TRUE na cláusula FROM, pode obter todas as versões dos dados e as respetivas indicações de tempo. A função de tabela UNPACK expande, em seguida, os resultados da consulta para que cada valor com data/hora apareça na sua própria linha com uma coluna _timestamp separada. Isto permite-lhe criar um índice secundário assíncrono em que a nova chave de linha se baseia nestes valores de data/hora, o que permite pesquisas rápidas baseadas em intervalos de tempo.
SELECT
_timestamp as stats_timestamp,
_key as original_key,
stats_summary
FROM UNPACK((
select
_key,
stats_summary
FROM
test_table (WITH_HISTORY=>TRUE)
))
ORDER BY stats_timestamp, original_key
Crie uma entrada de índice para itens e valores numa célula JSON
O Bigtable é frequentemente usado como um armazenamento de chave-valor para cargas de trabalho de grande escala, incluindo dados em formatos como JSON. O exemplo seguinte mostra como criar um índice secundário assíncrono para pesquisas rápidas de dados que o JSON armazena. A consulta usa JSON_EXTRACT para extrair o store_id de uma string JSON na família de colunas transaction_information numa tabela denominada sales. Este índice permite uma obtenção rápida de transações de vendas por IDs de lojas específicos.
SELECT
JSON_EXTRACT(transaction_information["json"], "$.store_id") as store_id,
_key as original_key,
transaction_information
from sales
ORDER BY store_id, original_key;
O que se segue?
- Consultas de vistas materializadas contínuas
- Crie e faça a gestão de vistas materializadas contínuas