雪花中是否有jsonb_array_elements等效项?

时间:2020-02-13 05:41:32

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

我最近搬到了Snowflake,并尝试扩展类似于Postgres中的jsonb_array_elements函数的JSON字符串。下面是我进行任何操作之前所拥有的示例,我们可以将此表称为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中有等效的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

可以重现r = randi(80,N,1); 在做什么。 您需要使用FLATTEN,请查看this文档以供参考。

在您的特定情况下,您将执行以下操作

>> r = randi(80,N,1)

r =

    65
    35
    73
    15
    22

答案 1 :(得分:0)

是的,有一种获取输出的方法。在 LATERAL 联接中使用 FLATTEN 表功能。

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

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