如何在 Presto 中将一行拆分为多列?
How do I split a row into multiple columns in Presto?
我有一个如下所示的 table 列 A(字符串)和 B ROW(int):
A B
a [1,2,3]
b [0,0,5]
c [3,1,4]
我想将第二列(其中包含一个 ROW 类型)拆分成多个列:
A B1 B2 B3
a 1 2 3
b 0 0 5
c 3 1 4
我相信这可以通过 SQL 语句来完成,但是 unnest 会创建新的 行(我不想要)和 split_part
不适用于 ROW
类型。我怎样才能做到这一点?
假设列 B
是 ROW
类型,您可以在 SELECT statements.
中使用 .*
ROW
运算符
此语法存在于 Trino (formerly PrestoSQL) 中,但不存在于 PrestoDB 中,因此这取决于您使用的版本。如果您还没有,我建议您无论如何都搬到 Trino。
Copy/Paste:
WITH t(a, b) AS (
VALUES
('a', ROW(1,2,3)),
('b', ROW(0,0,5)),
('c', ROW(3,1,4))
)
SELECT
a as A,
t.b.* AS (B1, B2, B3)
FROM t;
执行:
trino> WITH t(a, b) AS (
-> VALUES
-> ('a', ROW(1,2,3)),
-> ('b', ROW(0,0,5)),
-> ('c', ROW(3,1,4))
-> )
-> SELECT
-> a as A,
-> t.b.* AS (B1, B2, B3)
-> FROM t;
A | B1 | B2 | B3
---+----+----+----
a | 1 | 2 | 3
b | 0 | 0 | 5
c | 3 | 1 | 4
(3 rows)
这是对所选解决方案的等效答案,语法略有不同:
SELECT
A,
B[1] AS B1,
B[2] AS B2,
B[3] AS B3
FROM table;
我有一个如下所示的 table 列 A(字符串)和 B ROW(int):
A B
a [1,2,3]
b [0,0,5]
c [3,1,4]
我想将第二列(其中包含一个 ROW 类型)拆分成多个列:
A B1 B2 B3
a 1 2 3
b 0 0 5
c 3 1 4
我相信这可以通过 SQL 语句来完成,但是 unnest 会创建新的 行(我不想要)和 split_part
不适用于 ROW
类型。我怎样才能做到这一点?
假设列 B
是 ROW
类型,您可以在 SELECT statements.
.*
ROW
运算符
此语法存在于 Trino (formerly PrestoSQL) 中,但不存在于 PrestoDB 中,因此这取决于您使用的版本。如果您还没有,我建议您无论如何都搬到 Trino。
Copy/Paste:
WITH t(a, b) AS (
VALUES
('a', ROW(1,2,3)),
('b', ROW(0,0,5)),
('c', ROW(3,1,4))
)
SELECT
a as A,
t.b.* AS (B1, B2, B3)
FROM t;
执行:
trino> WITH t(a, b) AS (
-> VALUES
-> ('a', ROW(1,2,3)),
-> ('b', ROW(0,0,5)),
-> ('c', ROW(3,1,4))
-> )
-> SELECT
-> a as A,
-> t.b.* AS (B1, B2, B3)
-> FROM t;
A | B1 | B2 | B3
---+----+----+----
a | 1 | 2 | 3
b | 0 | 0 | 5
c | 3 | 1 | 4
(3 rows)
这是对所选解决方案的等效答案,语法略有不同:
SELECT
A,
B[1] AS B1,
B[2] AS B2,
B[3] AS B3
FROM table;