Presto 对行对象字段的引用

Presto 对行对象字段的引用,presto,trino,Presto,Trino,访问在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 grou

访问在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”错误。

ROWname,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
有关这方面的讨论,请参阅。

从开始,现在可以使用[]运算符引用字段

将分组的_数据作为 选择 身份证件 ROWname,age AS name\u age 从数据 选择 身份证件 姓名和年龄[1]作为姓名, 将年龄[2]命名为年龄 从分组的数据;