Obtenir la valeur d'une clé s'il existe dans l'un des éléments d'un tableau dans une variante de la colonne de flocon de neige

0

La question

J'ai une variante de la colonne tableau d'objets. J'ai besoin d'obtenir la valeur de orgId (iVtXg1iwVmT9Q)de ce tableau. Comment dois-je faire? Il n'y aura qu'un seul orgId mais je ne sais pas l'index de l'élément. L'exemple ci-dessous, la réponse est macolonne[1].les données.orgId

[{
           "data": {
              "isCustomerAuthenticated": false,
              "visibility": "open"
           },
           "schema": "jsonschema/2-0-0"
       },
       {
           "data": {
               "orgId": "iVtXg1iwVmT9Q",
               "site": "us-abcde.qa",
               "stage": "staging"
           },
           "schema": "jsonschema/1-0-0"
       },
       {
           "data": {
               "onboardingType": "form"
           },
           "schema": "jsonschema/1-0-1"
       }
   ]
snowflake-cloud-data-platform sql
2021-11-23 21:22:36
2

La meilleure réponse

1

Donc, étant donné que vous ne savez pas quel élément vous avez besoin de dérouler tous via l'APLATIR, puis filtrer ceux qui ne correspondent pas.

SELECT f.value:data:orgId::text as ordId
FROM table t,
    TABLE(FLATTEN(input => t.mycolumn)) f
WHERE f.value:data:orgId::text IS NOT NULL;

Avec ce modèle, vous pouvez sélectionner les autres éléments que vous voulez site ou stage ainsi.

SELECT 
    f.value:data:orgId::text AS ordId
    f.value:data:site::text AS site
    f.value:data:staging::text AS staging
FROM table t,
    TABLE(FLATTEN(input => t.mycolumn)) f
WHERE f.value:data:orgId::text IS NOT NULL;
2021-11-23 21:53:08

"QUALIFIER" exige la fonction de fenêtre, non? Je pense que là OÙ est suffisant ici.
Gokhan Atil

OMG j'ai plus de si elle, hattip, OÙ un est assez oui! Je pense que je suis presque toujours de l'agrégation/fenêtrage, donc plus utiliser QUALIFIER...
Simeon Pilgrim
0

"Naïfs" approche de texte:

SELECT REGEXP_SUBSTR(ARRAY_TO_STRING(col,''), '"orgId":"([^"]*)"',1,1,'e',1)
FROM T;
-- iVtXg1iwVmT9Q

Préparation des données:

CREATE OR REPLACE TABLE T AS 
SELECT PARSE_JSON('[{
           "data": {
              "isCustomerAuthenticated": false,
              "visibility": "open"
           },
           "schema": "jsonschema/2-0-0"
       },
       {
           "data": {
               "orgId": "iVtXg1iwVmT9Q",
               "site": "us-abcde.qa",
               "stage": "staging"
           },
           "schema": "jsonschema/1-0-0"
       },
       {
           "data": {
               "onboardingType": "form"
           },
           "schema": "jsonschema/1-0-1"
       }
   ]') AS col;
2021-11-23 21:45:02

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................