2

我无法访问在 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'”错误。

4

2 回答 2

5

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;
于 2019-06-09T07:15:16.407 回答
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

于 2017-07-09T07:32:52.303 回答