如何查询数组字段(AWS Glue)?

Posted

技术标签:

【中文标题】如何查询数组字段(AWS Glue)?【英文标题】:How to query an array field (AWS Glue)? 【发布时间】:2020-11-20 09:39:23 【问题描述】:

我在AWS Glue 有一张表,爬虫定义了一个字段为数组。 内容位于具有json 格式的S3 文件中。 表为TableA,字段为members

还有很多其他字段,例如字符串、布尔值、双精度,甚至结构。

我可以使用简单的查询来查询它们,例如:

SELECT
    content.my_boolean,
    content.my_string,
    content.my_struct.value
FROM schema.tableA;

问题是当我将content.members 添加到查询中时。 我得到的错误是:[Amazon](500310) Invalid operation: schema "content" does not exist.

Content 存在是因为我可以从 json(内容)的主键中选择其他字段。 可能与如何对Spectrum 中的数组字段执行查询有关。

有什么想法吗?

【问题讨论】:

您能提供CREATE TABLEstatement 和一些示例json 数据吗? 【参考方案1】:

您必须重命名表才能从外部架构中提取字段:

SELECT
    a.content.my_boolean,
    a.content.my_string,
    a.content.my_struct.value
FROM schema.tableA a;

我的数据也遇到了同样的问题,我真的不知道为什么它需要这个演员表,但它确实有效。如果你需要访问一个数组的元素,你必须像这样分解它:

SELECT member.<your-field>,
FROM schema.tableA a, a.content.members as member;

Reference

【讨论】:

感谢@Hyruma92,工作就像一个魅力!很好的解决方案:)【参考方案2】:

您需要创建一个胶水分类器。

选择 JSON 作为分类器类型

对于 JSON 路径输入以下内容:

$[*]

然后运行您的爬虫。它将推断您的架构并使用正确的字段填充您的表,而不仅仅是一个大数组。不确定这是否是您要找的东西,但我想我会把它放在这里以防其他人遇到与我相同的问题。

【讨论】:

以上是关于如何查询数组字段(AWS Glue)?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue 将字符串值从 postgres 转换为 json 数组

使用 AWS Glue Scala 查询 Athena(添加分区)

AWS Glue Crawler无法提取CSV标头

无法对 AWS Glue 作业脚本中的两个表进行连接和查询

何时通过 AWS Glue ETL 使用 Amazon Redshift 频谱来查询 Amazon S3 数据

如何使用 AWS Glue 将许多 CSV 文件转换为 Parquet