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

How to query an array field (AWS Glue)?

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

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

我可以使用 simpel 查询来查询它们,例如:

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(内容)中的主键 select 其他字段。 可能与如何对 Spectrum.

中的数组字段执行查询有关

有什么想法吗?

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

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

您需要创建胶水分类器。

Select JSON 作为分类器类型

并为 JSON 路径输入以下内容:

$[*]

然后 运行 您的抓取工具。它将推断您的模式并使用正确的字段而不是一个大数组填充您的 table。不确定这是否是您要找的东西,但我想我会把它放在这里,以防其他人遇到我遇到的同样问题。