如何在 Snowflake SQL 中自动将 json 列提取到新列中?

azu*_*ura 3 sql json snowflake-cloud-data-platform

这是从另一个线程中获取的示例,但本质上我想实现这一目标:

样本数据

ID  Name  Value
1   TV1   {"URL": "www.url.com", "Icon": "some_icon"}
2   TV2   {"URL": "www.url.com", "Icon": "some_icon", "Facebook": "Facebook_URL"}
3   TV3   {"URL": "www.url.com", "Icon": "some_icon", "Twitter": "Twitter_URL"}
..........
Run Code Online (Sandbox Code Playgroud)

预期产出

ID  Name  URL          Icon           Facebook      Twitter
1   TV1   www.url.com  some_icon          NULL         NULL
2   TV2   www.url.com  some_icon  Facebook_URL         NULL
3   TV3   www.url.com  some_icon          NULL  Twitter_URL
Run Code Online (Sandbox Code Playgroud)

我对 Snowflake 完全陌生,所以我对如何轻松地做到这一点摇摇头(希望是自动的,在某些行可能比其他行在 json 中包含更多元素的情况下,手动分配会很乏味) 。有些行可能也有子类别。

我找到了parse_jsonSnowflake 的函数,但它只是在新列中为我提供了相同的 json 列,仍然是 json 格式。

蒂亚!

Mik*_*ton 6

您可以使用以下 SELECT 在表上创建视图:

SELECT ID, 
       Name,
       Value:URL::varchar as URL,
       Value:Icon::varchar as Icon,
       Value:Facebook::varchar as Facebook,
       Value:Twitter::varchar as Twitter
FROM tablename;
Run Code Online (Sandbox Code Playgroud)

除非将附加属性添加到视图中,否则它们将被忽略。无法“自动”将它们包含到视图中,但您可以创建一个存储过程,根据表的完整变体内容中的所有属性动态生成视图。