有人能告诉我如何更改下面文章中的存储过程,以递归扩展json文件(多个json文档模式(的所有属性吗?
https://support.snowflake.net/s/article/Automating-Snowflake-Semi-Structured-JSON-Data-Handling-part-2
可以修改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,看看结果如何。