Requêtes asynchrones d'index secondaires
Ce document fournit des exemples de modèles de requêtes courants pour créer des index secondaires asynchrones dans Bigtable. Les exemples utilisent des ID et des valeurs semblables à ceux de la section Données pour les exemples. Vous pouvez créer une table de test pour tester les requêtes.
Avant de lire cette page, familiarisez-vous avec Créer un index secondaire asynchrone et GoogleSQL pour Bigtable.
Exemples de requêtes
Les exemples suivants montrent comment créer des index secondaires asynchrones à l'aide de différentes requêtes GoogleSQL.
Créer un index inversé basé sur un qualificatif et des valeurs de colonne
La requête suivante crée un index inversé en extrayant toutes les paires clé/valeur d'une famille de colonnes dotée d'un schéma flexible. Elle utilise MAP_ENTRIES
pour obtenir un tableau de toutes les données stockées par la famille de colonnes stats_summary
, puis UNNEST
pour transformer chaque paire clé-valeur en ligne distincte. L'index obtenu permet des recherches rapides basées sur stat_description
et stat_value
. Si vous ajoutez de nouveaux types de statistiques à la table source, Bigtable les inclut automatiquement dans l'index asynchrone.
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
Créer une clé de ligne à partir de données existantes
L'exemple suivant crée une clé d'index, total_plan_capacity
, en catégorisant les forfaits de données stockés par la famille de colonnes cell_plan
. La requête utilise MAP_KEYS
pour obtenir toutes les clés dans cell_plan
et ARRAY_INCLUDES_ANY
pour filtrer les clés de forfait de données spécifiques. Une instruction CASE
définit ensuite la logique permettant d'attribuer une catégorie total_plan_capacity
en fonction de la présence et des valeurs de ces forfaits de données. Cela permet d'effectuer des recherches efficaces en fonction de la capacité combinée des forfaits de données.
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
Créer un index basé sur les séries temporelles
Bigtable stocke chaque valeur de cellule et son code temporel associé. En utilisant l'indicateur WITH_HISTORY=>TRUE
dans la clause FROM
, vous pouvez récupérer toutes les versions des données et leurs codes temporels. La fonction de table UNPACK
développe ensuite les résultats de la requête afin que chaque valeur horodatée apparaisse sur sa propre ligne avec une colonne _timestamp
distincte. Cela vous permet de créer un index secondaire asynchrone où la nouvelle clé de ligne est basée sur ces valeurs d'horodatage, ce qui permet des recherches rapides basées sur des plages de temps.
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
Créer une entrée d'index pour les éléments et les valeurs d'une cellule JSON
Bigtable est souvent utilisé comme magasin clé-valeur pour les charges de travail à grande échelle, y compris les données dans des formats tels que JSON. L'exemple suivant montre comment créer un index secondaire asynchrone pour des recherches rapides dans les données stockées par JSON. La requête utilise JSON_EXTRACT
pour extraire store_id
d'une chaîne JSON dans la famille de colonnes transaction_information
d'une table nommée sales
. Cet index permet de récupérer rapidement les transactions de vente par ID de magasin spécifique.
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;