[英]How to query multiple JSON document schemas in Snowflake?
誰能告訴我如何更改下面文章中的存儲過程以遞歸擴展 json 文件(多個 JSON 文檔模式)的所有屬性?
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.