簡體   English   中英

如何在 Snowflake 中查詢多個 JSON 文檔模式?

[英]How to query multiple JSON document schemas in Snowflake?

誰能告訴我如何更改下面文章中的存儲過程以遞歸擴展 json 文件(多個 JSON 文檔模式)的所有屬性?

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

Craig Warman 在該博客中發布的存儲過程是個好主意。 我問他是否可以重構他的代碼,他同意了。 我已經在現場使用了重構版本,所以我非常了解 SP 以及它是如何工作的。

可以修改 SP 以在您的 JSON 上工作。 這取決於 Snowflake 是否在您的變體列中鍵入 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 來滿足您的需要。 如果沒有,但有一種方法可以修改查詢以使其獲取列,那也可以。

如果它沒有選擇列,根據 Craig 的想法,我決定為非變體編寫類型推斷(例如 CSV 日志文件中沒有類型信息的字符串)。 試試上面的SQL,先看看結果如何。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM