gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:40:57 25 4
gpt4 key购买 nike

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

我有几列有数组,两列都使用 |作为分隔符

The data would be stored looking like this, with extra values to the side which show the current currency

I want to output it like this
我试着做另一个 unnest 专栏,像这样

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)

关于presto - 如何在presto中取消嵌套多列,输出到相应的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55815389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com