2017-06-30 6 views
0

私はPrestoで作成した行オブジェクトのフィールドにアクセスできません。 Prestoの文書claims "fields ...はフィールド参照演算子でアクセスされます。"しかし、それは動作していないようです。このコードは問題を再現します:行オブジェクトのフィールドへの参照

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 '"エラーを返します。

答えて

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を参照してください。

関連する問題