Query asincrone dell'indice secondario
Questo documento fornisce esempi di pattern di query comuni per la creazione di indici secondari asincroni in Bigtable. Gli esempi utilizzano ID e valori simili a quelli in Dati per gli esempi e puoi creare una tabella di test per testare le query.
Prima di leggere questa pagina, acquisisci familiarità con Creare un indice secondario asincrono e GoogleSQL per Bigtable.
Esempi di query
Gli esempi seguenti mostrano come creare indici secondari asincroni utilizzando diverse query GoogleSQL.
Crea un indice invertito in base a un qualificatore di colonna e ai valori
La seguente query crea un indice invertito estraendo tutte le coppie chiave-valore
da una famiglia di colonne con uno schema flessibile. Utilizza MAP_ENTRIES
per ottenere un
array di tutti i dati archiviati nella famiglia di colonne stats_summary
, quindi
UNNEST
per trasformare ogni coppia chiave-valore in una riga separata. L'indice
risultante consente ricerche rapide in base a stat_description
e stat_value
. Se
aggiungi nuovi tipi di statistiche alla tabella di origine, Bigtable
li include automaticamente nell'indice asincrono.
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
Crea una nuova chiave di riga in base ai dati esistenti
L'esempio seguente crea una nuova chiave di indice, total_plan_capacity
, classificando i piani tariffari memorizzati nella famiglia di colonne cell_plan
. La query
utilizza MAP_KEYS
per ottenere tutte le chiavi in cell_plan
e ARRAY_INCLUDES_ANY
per
filtrare le chiavi di piani tariffari specifici. Un'istruzione CASE
definisce quindi la logica per
assegnare una categoria total_plan_capacity
in base alla presenza e ai valori
di questi piani dati. Ciò consente ricerche efficienti in base alla capacità combinata
del piano dati.
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
Crea un indice basato sulle serie temporali
Bigtable archivia ogni valore della cella e il relativo timestamp. Utilizzando il flag WITH_HISTORY=>TRUE
nella clausola FROM
, puoi recuperare tutte le versioni dei dati e i relativi timestamp. La funzione di tabella UNPACK
espande
i risultati della query in modo che ogni valore con timestamp venga visualizzato nella propria riga con una
colonna _timestamp
separata. In questo modo puoi creare un indice secondario asincrono in cui la nuova chiave di riga si basa su questi valori timestamp, consentendo ricerche rapide basate su intervalli di 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
Crea una voce di indice per elementi e valori in una cella JSON
Bigtable viene spesso utilizzato come archivio chiave-valore per carichi di lavoro su larga scala, inclusi dati in formati come JSON. Il seguente esempio mostra
come creare un indice secondario asincrono per ricerche rapide dei dati archiviati
in JSON. La query utilizza JSON_EXTRACT
per estrarre store_id
da una stringa JSON all'interno della famiglia di colonne transaction_information
in una tabella denominata sales
. Questo indice consente il recupero rapido delle transazioni di vendita in base a ID negozio specifici.
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;