Consultas assíncronas de índice secundário
Este documento oferece exemplos de padrões de consulta comuns para criar índices secundários assíncronos no Bigtable. Os exemplos usam IDs e valores semelhantes aos de Dados para exemplos. Você pode criar uma tabela de teste para testar as consultas.
Antes de ler esta página, familiarize-se com Criar um índice secundário assíncrono e GoogleSQL para Bigtable.
Exemplo de consultas
Os exemplos a seguir mostram como criar índices secundários assíncronos usando diferentes consultas do GoogleSQL.
Criar um índice invertido com base em um qualificador de coluna e valores
A consulta a seguir cria um índice invertido extraindo todos os pares chave-valor
de um grupo de colunas com um esquema flexível. Ele usa MAP_ENTRIES
para receber uma matriz de todos os dados armazenados pelo grupo de colunas stats_summary
e, em seguida, UNNEST
para transformar cada par de chave-valor em uma linha separada. O índice resultante permite pesquisas rápidas com base em stat_description
e stat_value
. Se você adicionar novos tipos de estatísticas à tabela de origem, o Bigtable os incluirá 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
Criar uma nova chave de linha com base em dados atuais
O exemplo a seguir cria uma nova chave de índice, total_plan_capacity
, categorizando os planos de dados que o grupo de colunas cell_plan
armazena. A consulta usa MAP_KEYS
para receber todas as chaves em cell_plan
e ARRAY_INCLUDES_ANY
para filtrar chaves específicas do plano de dados. Uma instrução CASE
define a lógica para atribuir uma categoria total_plan_capacity
com base na presença e nos valores desses planos de dados. Isso permite pesquisas eficientes com base na capacidade combinada do plano de dados.
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
Criar um índice com base em série temporal
O Bigtable armazena cada valor de célula e o carimbo de data/hora associado. Ao usar a flag WITH_HISTORY=>TRUE
na cláusula FROM
, é possível recuperar todas as versões de dados e os carimbos de data/hora delas. A função de tabela UNPACK
expande os resultados da consulta para que cada valor com carimbo de data/hora apareça em uma linha própria com uma coluna _timestamp
separada. Isso permite criar um índice secundário assíncrono em que a nova chave de linha se baseia nesses valores de carimbo de data/hora, permitindo pesquisas rápidas com base 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
Criar uma entrada de índice para itens e valores em uma célula JSON
O Bigtable é usado com frequência como um armazenamento de chave-valor para cargas de trabalho em grande escala, incluindo dados em formatos como JSON. O exemplo a seguir mostra como criar um índice secundário assíncrono para pesquisas rápidas de dados armazenados em JSON. A consulta usa JSON_EXTRACT
para extrair o store_id
de uma string JSON no grupo de colunas transaction_information
em uma tabela chamada sales
. Esse índice permite a recuperação rápida de transações de vendas por IDs de loja 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;
A seguir
- Consultas contínuas de visualizações materializadas
- Criar e gerenciar visualizações materializadas contínuas