J'utilise SNOW_FLAKE et j'essaie d'interroger les données stockées sous la forme d'un tableau d'éléments sous le nom de colonne nested_colmn comme exemple:

nested_colmn
[
  {
    "firstKey": "val1",
    "secondKey": 2555,
    "thirdKey": false,
    "fourthkey": "otrvalue"
  },
  {
    "firstKey": "val2",
    "secondKey": 255221,
    "thirdKey": true,
    "fourthkey": "otrvalu"
  }
]

Le tableau ci-dessus est renvoyé comme une ligne complète si je le fais

Select nested_colmn from table_name

Maintenant, je veux interroger / obtenir les résultats uniquement pour la firstkey (nested_colmn.firstkey) de la colonne Attributes. Comment encadrer la requête pour récupérer les éléments personnalisés individuels d'un tableau au lieu de tous les obtenir. S'il vous plaît, aidez-moi si vous avez des idées à ce sujet

0
hellopa1 2 sept. 2020 à 20:35

2 réponses

Meilleure réponse

Remarque: Je suppose que vous voulez vraiment que la table source ait le tableau comme valeur, au lieu de supprimer le tableau externe et de placer chaque élément dans sa propre ligne.

Tout d'abord, créez une table de test avec vos exemples de données:

CREATE OR REPLACE TEMPORARY TABLE table_name (
  nested_colmn  VARIANT
)
AS
  SELECT PARSE_JSON($1) AS nested_colmn
    FROM VALUES
           ($$
[
  {
    "firstKey": "val1",
    "secondKey": 2555,
    "thirdKey": false,
    "fourthkey": "otrvalue"
  },
  {
    "firstKey": "val2",
    "secondKey": 255221,
    "thirdKey": true,
    "fourthkey": "otrvalu"
  }
]
$$)
;

Avec cela, voici un exemple de requête:

SELECT F.VALUE:"firstKey"::VARCHAR AS FIRST_KEY
  FROM table_name T
      ,LATERAL FLATTEN(nested_colmn) F
;
0
Darren Gardner 2 sept. 2020 à 17:53

Vous allez devoir exécuter un aplatissement latéral sur le tableau, puis analyser le JSON:

WITH x as (
SELECT array_construct(parse_json('
  {
    "firstKey": "val1",
    "secondKey": 2555,
    "thirdKey": false,
    "fourthkey": "otrvalue"
  }'),parse_json('
  {
    "firstKey": "val2",
    "secondKey": 255221,
    "thirdKey": true,
    "fourthkey": "otrvalu"
  }')) as var)
SELECT p.value:firstKey::varchar
FROM x,
lateral flatten(input => x.var) p;
0
Mike Walton 2 sept. 2020 à 17:54