Получите значение ключа, если он существует в одном элементе массива в столбце вариант в snowflake

0

Вопрос

У меня есть столбец variant, в котором есть массив объектов. Мне нужно получить значение OrgID (iVtXg1iwVmT9Q)из этого массива. Как мне это сделать? Там будет только один OrgID, но я не знаю индекса элемента. В приведенном ниже примере ответом является 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

Лучший ответ

1

Поэтому, учитывая, что вы не знаете, какой элемент вам нужен, чтобы развернуть их все с помощью ВЫРАВНИВАНИЯ, а затем отфильтровать те, которые не совпадают.

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;

С помощью этого шаблона вы можете выбрать любой из других элементов, которые вы хотите, например site или stage также.

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

"КВАЛИФИКАЦИЯ" требует оконной функции, нет? Я думаю, ГДЕ здесь достаточно.
Gokhan Atil

БОЖЕ, у меня все кончено, хотя это, шляпный наконечник, а ГДЕ достаточно да! Я думаю, что я почти всегда агрегирую/открываю окна, так что чрезмерное использование КВАЛИФИЦИРУЕТСЯ...
Simeon Pilgrim
0

"Наивный" текстовый подход:

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

Подготовка данных:

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

На других языках

Эта страница на других языках

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

Популярное в этой категории

Популярные вопросы в этой категории