有没有办法在 AWS Athena 中展平结构字段?

Posted

技术标签:

【中文标题】有没有办法在 AWS Athena 中展平结构字段?【英文标题】:Is there a way to flatten a struct field in AWS Athena? 【发布时间】:2020-08-24 14:13:15 【问题描述】:

我正在尝试编写一个 Athena 查询,它允许我在 select 语句中扩展一个结构。

假设我有一个表 my_table,它看起来像:

id string,
metadata struct<field1:varchar,field2:int>

我知道通过将名称 field1 放在查询中,我可以从结构中提取字段,但我想要更通用的东西,例如 metadata.*,因此架构可以是抽象的。

这可以通过 Python 和一些库轻松完成,但想检查 Athena 内部是否有任何事情可以完成。

谢谢!

【问题讨论】:

【参考方案1】:

如果select results.id, results.scores.* from my_table results 之类的东西可以工作,我希望它,但不幸的是它没有。

您要求的是“通用所有字段参考”。 它自 Presto 323 起在 Presto 中可用。 您可以从https://trino.io/download.html 下载最新的 Presto 版本。

不幸的是,Athena 目前基于 Presto .172(3 年前发布),因此该功能不可用。在 Athena 升级之前,您无法在 SQL 级别应用任何解决方法。您需要在从 Athena 读取数据的应用程序中对此进行补偿。或者,您可以deploy recent Presto version on AWS easily。

【讨论】:

Athena 引擎 2 现在基于 presto 0.217,但这仍然是 0.323,所以没有骰子!

以上是关于有没有办法在 AWS Athena 中展平结构字段?的主要内容,如果未能解决你的问题,请参考以下文章

来自字符串字段的 AWS Athena json_extract 查询返回空值

在 AWS Athena 中查询第一个非空值的动态 JSON 字段

AWS Athena 上的偏移量

aws athena & java - 在结构类型列中获取数据

如何在 AWS Athena 中转换时区

AWS DMS:如何处理 Presto/Athena 中的 TIMESTAMP_MICROS parquet 字段