Presto 查询行数组

Posted

技术标签:

【中文标题】Presto 查询行数组【英文标题】:Presto query Array of Rows 【发布时间】:2018-01-03 22:02:07 【问题描述】:

所以我有一个配置单元外部表,其架构如下所示:


.
.
`x` string,
`y` ARRAY<struct<age:string,cId:string,dmt:string>>,
`z` string

所以基本上我需要查询一个列(列“y”),它是嵌套 json 的数组, 我可以从 hive 中看到“y”列的数据,但该列中的数据似乎对 presto 不可见,即使 presto 知道该字段的架构,如下所示:

array(row(age varchar,cid varchar,dmt varchar))

如您所见,presto 已经知道该字段是行数组。

注意事项:

1.该表是hive外部表。

2.我通过使用 ODBC 驱动程序获取字段“y”的架构,但数据都是空的,但是我可以在 hive 中看到类似这样的内容: ["age":"12","cId":"bx21hdg","dmt":"120"]

3.Presto 查询 hivemetastore 的架构。

4.表格以拼花格式存储。

那么我如何才能在字段“y”中查看我的数据?

【问题讨论】:

您是尝试通过 ODBC 驱动程序还是使用 Presto CLI 进行查询? Presto 允许您使用 unnest 函数加入数组,但我不清楚这是否是您想要的结果? 【参考方案1】:

请尝试以下。这应该在 Presto 中工作。

"如果数组元素是行数据类型,则结果是一个表,元素数据类型中的每个行字段对应一列。结果表列数据类型匹配对应的数组元素行字段数据类型"

select
    y,age,cid,dmt
from
    table
    cross join UNNEST(y)  AS  nested_data(age,cid,dmt)
参考:https://www.ibm.com/support/knowledgecenter/en/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0055064.html

【讨论】:

以上是关于Presto 查询行数组的主要内容,如果未能解决你的问题,请参考以下文章

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

Presto:如果原始查询未返回任何行,则返回另一个表或虚拟值/表

Presto 数组包含来自另一列的值(超集 SQL 查询)

Presto

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

EMR-Presto 和 Athena 的查询结果差异