如何查询数组字段(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)?的主要内容,如果未能解决你的问题,请参考以下文章