Uzyskaj wartość klucza, jeśli istnieje w jednym elemencie tablicy w kolumnie opcja w snowflake

0

Pytanie

Mam kolumnę variant, w którym jest tablica obiektów. Muszę uzyskać wartość OrgID (iVtXg1iwVmT9Q)z tej tablicy. Jak mam to zrobić? Tam będzie tylko jeden OrgID, ale nie wiem indeksu elementu. W poniższym przykładzie odpowiedzią jest mycolumn[1].data.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

Najlepsza odpowiedź

1

Dlatego, biorąc pod uwagę, że nie wiesz, który element jest potrzebny, aby wdrożyć je wszystkie za pomocą WYRÓWNANIA, a następnie odfiltrować te, które nie pasują.

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;

Za pomocą tego szablonu można wybrać dowolny z innych elementów, które chcesz, np. site lub stage również.

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

"KWALIFIKACJE" wymaga okiennej funkcji, nie? Myślę, GDZIE tu wystarczy.
Gokhan Atil

BOŻE, u mnie to już koniec, choć to, шляпный końcówka, GDZIE wystarczy tak! Myślę, że prawie zawsze агрегирую/otwieram okna, tak, że nadmierne korzystanie z SKLASYFIKOWANA...
Simeon Pilgrim
0

"Naiwny" tekstowy podejście:

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

Przygotowanie danych:

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

W innych językach

Ta strona jest w innych językach

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