结构数组的 Presto 查询返回单个结构元素作为列而不是结构行

Posted

技术标签:

【中文标题】结构数组的 Presto 查询返回单个结构元素作为列而不是结构行【英文标题】:Presto Query of array of structs returns individual sttruct elements as columns instead of rows of structs 【发布时间】:2020-12-04 20:50:57 【问题描述】:

这里是示例数据,并带有实际结果和期望结果的 presto 查询。

WITH
dataset AS (
  SELECT 
      ARRAY[
        CAST(ROW('Sally', 'engineering') AS ROW(name VARCHAR, department VARCHAR)),
        CAST(ROW('John', 'finance') AS ROW(name VARCHAR, department VARCHAR))
      ] AS users
)
select t.*
from dataset
cross join unnest(users) as t

输出返回 2 列: 姓名和部门以及 2 行。

所需的输出: 1 列 struct 类型和 2 行。

如何在 presto 中获得所需的结果?有可能吗?

提前致谢,

【问题讨论】:

【参考方案1】:

您观察到的行为是 SQL 标准行为。

你可以得到想要的输出

SELECT ROW(t.name, t. department)

或者,通过防止unnest 使用transform()“解包”行:

CROSS JOIN UNNEST(transform(users, u -> ROW(u)) as t

【讨论】:

感谢 Piotr 的快速响应。 unnest 转换解决方案很整洁。欣赏它。

以上是关于结构数组的 Presto 查询返回单个结构元素作为列而不是结构行的主要内容,如果未能解决你的问题,请参考以下文章

如何运行 Presto 查询查找行数组中元素的索引

在 Presto 中,如何检查我通过子查询获取的列表中是不是存在数组中的元素

等效于 hive 中 Presto 的 transform() 函数

presto访问 Azure blob storage

组合查询

MySQL ----- 组合查询 UNION(十五)