Passer au contenu principal

Question

Si j’ai des attributs variables dans une colonne qui utilise le type Map, comment puis-je les extraire et les utiliser dans des requêtes ?

Réponse

Voici un exemple simple d’extraction de clés et de valeurs à partir d’un champ attribut variable. Cette méthode créera des doublons apparents pour chaque ligne de la table source/brute. Cependant, comme les clés et les valeurs sont extraites, elles peuvent être placées dans la clé primaire ou dans une structure secondaire avec un index, comme un bloom filter. Dans cet exemple, nous avons essentiellement une source qui crée une table de métriques ; elle comporte plusieurs attributs pouvant s’appliquer dans un champ attributs contenant des maps. S’il existe des attributs toujours présents dans les enregistrements, il est préférable de les extraire dans leurs propres colonnes et de les alimenter. Vous devriez pouvoir simplement copier-coller pour voir quels seraient les résultats et ce que fait la vue matérialisée dans ce cas. Créez une base de données d’exemple :
Créez la table initiale qui contiendra les lignes et les attributs :
Insérez des lignes d’exemple dans la table. La taille de l’échantillon est volontairement réduite afin que, lors de la création de la vue matérialisée, vous puissiez voir comment les lignes se multiplient pour chaque attribut.
Nous pouvons ensuite créer une vue matérialisée avec ARRAY JOIN afin d’extraire les attributs de type Map vers des colonnes de clés et de valeurs. À des fins de démonstration, l’exemple ci-dessous utilise une table implicite (avec la commande POPULATE et une table sous-jacente telle que .inner.{uuid}... ). La bonne pratique recommandée consiste toutefois à utiliser une table explicite : vous définissez d’abord la table, puis créez à la place une vue matérialisée dessus avec la commande TO.
La nouvelle table contiendra davantage de lignes, avec les clés extraites, comme ceci :
À partir de là, pour interroger les lignes ayant certains attributs, vous feriez quelque chose comme ceci :
Dernière modification le 1 juillet 2026