Как запросить несколько JSON схем документов в Snowflake? - PullRequest
0 голосов
/ 24 апреля 2020

Может ли кто-нибудь сказать мне, как изменить хранимую процедуру в статье ниже, чтобы рекурсивно развернуть все атрибуты файла json (несколько JSON схем документов)?

https://support.snowflake.net/s/article/Automating-Snowflake-Semi-Structured-JSON-Data-Handling-part-2

1 Ответ

0 голосов
/ 25 апреля 2020

Сохраненная процедура Крейга Уормана, опубликованная в этом блоге, является отличной идеей. Я спросил его, можно ли реорганизовать его код, и он согласился. Я использовал реорганизованную версию в полевых условиях, поэтому я хорошо знаю SP и как он работает.

Может быть возможно изменить SP для работы на вашем JSON. Это будет зависеть от того, наберет ли Снежинка JSON в вашем столбце вариантов. То, как вы это структурировали, может не все печатать. Вы можете проверить, запустив этот SQL и увидев, включает ли набор результатов все необходимые вам столбцы:

set VARIANT_TABLE = 'WEATHER';
set VARIANT_COLUMN = 'V';

with MAIN_TABLE as
(
select * from identifier($VARIANT_TABLE) sample (1000 rows)
)
select distinct REGEXP_REPLACE(REGEXP_REPLACE(f.path, '\\[(.+)\\]'),'[^a-zA-Z0-9]','_') AS path_name,       -- This generates paths with levels enclosed by double quotes (ex: "path"."to"."element").  It also strips any bracket-enclosed array element references (like "[0]")
                typeof(f.value)                                                         AS attribute_type,  -- This generates column datatypes.
                path_name                                                               AS alias_name       -- This generates column aliases based on the path
from
        MAIN_TABLE,
        LATERAL FLATTEN(identifier($VARIANT_COLUMN), RECURSIVE=>true) f
where   TYPEOF(f.value) != 'OBJECT'
        AND NOT contains(f.path, '[');

Обязательно замените переменные в именах таблиц и столбцов. Если при этом будет получена информация о типе столбцов в JSON, то можно изменить этот SP, чтобы он делал то, что вам нужно. Если это не так, но есть способ изменить запрос, чтобы заставить его подбирать столбцы, это тоже сработало бы.

Если он не поднимает столбцы, основываясь на идее Крейга, я решил вывод типа для не вариантного варианта (например, строки из файлов журнала CSV без информации о типе). Попробуйте SQL выше и посмотрите, какие результаты в первую очередь.

...