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;

Passaggi successivi