如何在presto中取消嵌套多列,输出到相应的行中



>我正在尝试取消嵌套一些代码

我有几列有数组,两列都使用 | 作为分解器

数据将按如下所示存储,并在显示当前货币的一侧添加额外的值

我想像这样输出它我尝试做另一个取消嵌套的列,就像这样

SELECT c.campaign, c.country, a.product_name, u.price--, u.price -- add price to this split. handy for QBR
FROM c, UNNEST(split(price, '|')) u(price), UNNEST(split(product_name, '|')) a(product_name)
group by 1,2, 3, 4

但这重复了几行,所以我不确定取消嵌套两列是否不太有效

谢谢

查询

的问题在于,子句FROM c, UNNEST(...), UNNEST(...)有效地计算了每行c与由UNNEST调用产生的每个派生表生成的行之间的交叉联接。

你可以通过在一次调用中取消嵌套所有数组来解决它 UNNEST ,从而生成一个派生表。以这种方式使用时,UNNEST会生成一个表,其中每个数组一列,数组中的每个元素一行。如果数组的长度不同,它将生成最多最大数组中元素数的行,并为较小数组的列填充NULL

为了说明,对于您的情况,这就是您想要的:

WITH data(a, b, c) AS (
    VALUES
        ('a|b|c', '1|2|3', 'CAD'),
        ('d|e|f', '4|5|6', 'USD')
)
SELECT t.a, t.b, data.c
FROM data, UNNEST(split(a, '|'), split(b, '|')) t(a, b)

它产生:

 a | b |  c
---+---+-----
 a | 1 | CAD
 b | 2 | CAD
 c | 3 | CAD
 d | 4 | USD
 e | 5 | USD
 f | 6 | USD
(6 rows)

相关内容

  • 没有找到相关文章

最新更新