繁体   English   中英

AWS Athena 查询 json 类数据

[英]AWS Athena query on json like data

我有一个存储了一些数据的 S3 存储桶。 我想使用 Athena 表查询这些数据。

S3文件的结构:

{
OuterKey1:"OuterValue1",
OuterKey2:"{
   InnerKey1:4.0,
   InnerKey2:"someString"
}",
OuterKey3:1625833855741
}

这个结构看起来像 json,但它不完全是 json,因为密钥没有引号

我使用Glue-crawler从 S3 文件夹创建表。 Glue-crawler 将此结构识别为 json。但它将所有值分类为具有嵌套结构的键的字符串。

我想查询嵌套结构,比如InnerKey1 = 5.0 ,但由于整个结构都是字符串,所以我无法查询。

尝试过的事情:

  1. 我尝试在查询中使用json_extract但由于该值在字符串中,因此返回空结果。
  2. 我尝试使用cast(col) as json 将值转换为 json但它只是在嵌套值的开头和结尾添加引号(忽略内部结构)
  3. 手动尝试将列类型转换为STRUCT而不是 String 但它给出了错误。

有没有办法查询这样的结构? S3 文件是从 ddb 条目准备的,并已存储为 txt 文件。

更多观察:

当我从 S3 文件的内部嵌套结构中删除引号并上传测试存储桶时,爬虫将列识别为STRUCT而不是字符串,并且我能够查询内部嵌套结构。 但是我无法控制源代码,所以我无法更改源 S3 文件夹中的结构。

确定的其他可能的解决方案是使用 ETL 作业来解析和清理数据。 但它随后需要存储这些数据(我不想要,因为它是冗余数据)

是否有任何可能的解决方案可以通过 Athena 查询实现?

Athena 有两个 JSON serdes ,但都要求数据有效JSON。JSON 函数还要求数据有效 JSON。您可以使用正则表达式函数来提取内容,但这可能会很好。

不幸的是,Glue 的爬虫往往会错误识别事物并且并不总是创建适用于 Athena 的表。 在大多数情况下,您最好手动设置表并使用分区投影

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM