引用行对象的字段
Reference to a field of a row object
我无法访问我在 Presto 中创建的行对象的字段。 Presto 文档 claims "fields... are accessed with field reference operator." 但是这似乎不起作用。此代码重现了问题:
CREATE TABLE IF NOT EXISTS data AS
SELECT * FROM (VALUES
(1, 'Adam', 17),
(2, 'Bill', 42)
) AS x (id, name, age);
CREATE TABLE IF NOT EXISTS ungrouped_data AS
WITH grouped_data AS (
SELECT
id,
ROW(name, age) AS name_age
FROM data
)
SELECT
id,
name_age.1 AS name,
name_age.2 AS age
FROM grouped_data;
其中 returns 一个 "extraneous input '.1'" 错误。
ROW(name, age)
将创建一个没有字段名称的行。今天要访问此类行中的字段,您需要将其转换为带有字段名称的行。试试这个:
WITH grouped_data AS (
SELECT
id,
CAST(ROW(name, age) AS ROW(col1 VARCHAR, col2 INTEGER)) AS name_age
FROM data
)
SELECT
id,
name_age.col1 AS name,
name_age.col2 AS age
FROM grouped_data;
结果:
id | name | age
----+------+-----
1 | Adam | 17
2 | Bill | 42
有关这方面的讨论,请参阅 https://github.com/prestodb/presto/issues/7640。
使用 []
运算符从 Trino (formerly known as Presto) 314, it is now possible to reference ROW
字段开始。
WITH grouped_data AS (
SELECT
id,
ROW(name, age) AS name_age
FROM data
)
SELECT
id,
name_age[1] AS name,
name_age[2] AS age
FROM grouped_data;
我无法访问我在 Presto 中创建的行对象的字段。 Presto 文档 claims "fields... are accessed with field reference operator." 但是这似乎不起作用。此代码重现了问题:
CREATE TABLE IF NOT EXISTS data AS
SELECT * FROM (VALUES
(1, 'Adam', 17),
(2, 'Bill', 42)
) AS x (id, name, age);
CREATE TABLE IF NOT EXISTS ungrouped_data AS
WITH grouped_data AS (
SELECT
id,
ROW(name, age) AS name_age
FROM data
)
SELECT
id,
name_age.1 AS name,
name_age.2 AS age
FROM grouped_data;
其中 returns 一个 "extraneous input '.1'" 错误。
ROW(name, age)
将创建一个没有字段名称的行。今天要访问此类行中的字段,您需要将其转换为带有字段名称的行。试试这个:
WITH grouped_data AS (
SELECT
id,
CAST(ROW(name, age) AS ROW(col1 VARCHAR, col2 INTEGER)) AS name_age
FROM data
)
SELECT
id,
name_age.col1 AS name,
name_age.col2 AS age
FROM grouped_data;
结果:
id | name | age
----+------+-----
1 | Adam | 17
2 | Bill | 42
有关这方面的讨论,请参阅 https://github.com/prestodb/presto/issues/7640。
使用 []
运算符从 Trino (formerly known as Presto) 314, it is now possible to reference ROW
字段开始。
WITH grouped_data AS (
SELECT
id,
ROW(name, age) AS name_age
FROM data
)
SELECT
id,
name_age[1] AS name,
name_age[2] AS age
FROM grouped_data;