对行对象的字段的引用



我在访问我在 Presto 中创建的行对象的字段时遇到问题。Presto文件声称"领域...使用字段引用运算符进行访问。然而,这似乎行不通。此代码重现了该问题:

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;

这将返回"无关输入'.1'"错误。

从Trino(以前称为Presto(314开始,现在可以使用[]运算符引用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;

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。

相关内容

  • 没有找到相关文章