json - 在 Athena 中读取不一致的嵌套 JSON
问题描述
在 Athena 中,我正在将一些嵌套的 JSON 文件读入表中。实际包含嵌套 JSON 的字段在原始数据中的不同文件中具有不一致的字段数量。
有时数据看起来像这样:
{
"id": "9f1e07b4",
"date": "05/20/2018 02:30:53.110 AM",
"data": {
"a": "asd",
"b": "adf",
"body": {
"sid": {
"uif": "yes",
"sidd": "no",
"state": "idle"
}
},
"category": "scene"
}
}
其他时候数据看起来像这样:
{
"id": "9f1e07b4",
"date": "05/20/2018 02:30:45.436 AM",
"data": {
"a": "event",
"b": "state",
"body": {
"persona": {
"one": {
"movement": "idle"
}
}
},
"category": "scene"
}
}
其他时候,“body”字段包含“sid”结构和“persona”结构。
如您所见,“body”中给出的字段并不总是一致的。我试图在我的 CREATE EXTERNAL TABLE 查询中添加所有可能的字段及其结构。但是,当我在 Athena 中“预览表”时,包含“正文”字段的“数据”列仍然没有填充并保持空白。
在 CREATE TABLE DDL 中,有没有办法表明我想用空值填充每个文件的嵌套 JSON 中不存在的所有列?
此外,查询中字段的“名称”不必与原始 JSON 中的键值相对应。雅典娜似乎只是在阅读结构而不是其他任何东西。有没有办法直接指示哪个 JSON 键对应于哪个 Athena 字段名称?这样,如果一个文件的“正文”中缺少某些字段,Athena 可以知道缺少哪个字段并将其填充为空?
解决方案
推荐阅读
- azure - Azure AAD App can access Admin App without granting permission using a token
- android - 无法解决方法 addAll() 和 Clear()
- typescript - 在 RxJS 中订阅子 Observable 的订阅
- obiee - 运行代理失败,如何解决这个问题?
- javascript - 这是 Chrome 错误吗?我该如何解决?:它会跳过开瓶器功能中的一些警告注释
- asp.net-core - 如何在 .net 核心中创建本地化 url?
- ios - 如何使用 fastlane 更新过期的证书?
- svg - FontForge:将字体的单个字形批量导出到 svg 文件中?
- google-sheets - 当查询中有 sum 函数时,如何对查询结果(列交换)重新排序?
- python - python和serialreadline之间的字符串比较