【问题标题】:Presto query Array of RowsPresto 查询行数组
【发布时间】:2023-09-29 16:49:01
【问题描述】:

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

{
.
.
`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 函数加入数组,但我不清楚这是否是您想要的结果?

标签: arrays hadoop hive presto


【解决方案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

【讨论】: