sql - Snowflake 中有等效的 jsonb_array_elements 吗?

标签 sql arrays json snowflake-cloud-data-platform

我最近转向 Snowflake,并尝试扩展我的 JSON 字符串,类似于 Postgres 中的 jsonb_array_elements 函数。下面是我在进行任何操作之前所拥有的示例,我们可以将此表称为 mytable

id            date              cost              details
123        2020-02-01           30      {"currency": "USD", "name":"John Smith", "items":[{"type":"hat", "value":"20"}, {"type":"tshirt", "value" : "10"}]}

通常我会在 postgres 中运行以下代码

SELECT
  id,
  date,
  cost as total_cost,
  jsonb_array_elements(details->'items') as details
from mytable

获得以下输出:

id            date              total_cost              details
123        2020-02-01              30             {"type":"hat" , "value":"20"}
123        2020-02-01              30           {"type":"tshirt" , "value":"10"}

然后我可以将类型解析到它们自己的列中。

在 Snowflake 中是否有等效的方法可以做到这一点?

提前致谢!

最佳答案

是的,有一种方法可以获得该输出。在LATERAL连接中使用FLATTEN表函数。

SELECT
  t.id,
  t.date,
  t.cost as total_cost,
  f.*
from mytable t
 , lateral flatten (input => t.details:items) f

这是您需要的最基本的语法。探索更多这个功能,因为它非常强大。

关于sql - Snowflake 中有等效的 jsonb_array_elements 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60201120/

相关文章:

android - 如何使用 retrofit2 创建 json 对象数组的查询

sql - mysql - 按一天中的小时搜索时间戳

c# - IQueryable with Foreach 结果

python - 将 JSON 对象添加到列表中

java - 如何删除数组中的单词?

javascript - 使用两个排序条件对javascript中的对象数组进行排序

javascript - 使用 JQuery 将 Json 响应对象转换为字符串

对象数组中的javascript排序元素

sql - 在 SQL 中连接表

R 中的 sqlquery 不返回查询中的所有行