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