如何查询数组字段(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 TABLE
statement 和一些示例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(添加分区)