【问题标题】:Reference to a field of a row object引用行对象的字段
【发布时间】:2017-12-04 18:05:20
【问题描述】:

我无法访问在 Presto 中创建的行对象的字段。 Presto 文档claims“字段...使用字段引用运算符访问。”但是,这似乎不起作用。这段代码重现了这个问题:

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'”错误。

【问题讨论】:

    标签: presto trino


    【解决方案1】:

    Trino (formerly known as 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;
    

    【讨论】:

      【解决方案2】:

      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 了解有关此问题的讨论。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-09
        • 2015-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多