Aws Athena - 是否可以查询名称中带点的 JSON 属性

Aws Athena - is it possible to query a JSON property that has dots in name

我使用 Athena 查询存储在 S3 中 JSON 个对象中的数据。

一些 JSON 属性的名称中包含点,它们代表 Android 个应用程序名称。

属性 看起来是这样的:

{
  "MessageTime": "2019-09-24T16:07:16+00:00",
  "Memory": {
    "com.google.android.gms.maps": {
      "Min": 0,
      "Max": 0,
      "Avg": 0
    }
  }
}

该列的AWS Athenatable创建成功,可以查询了。 有没有办法在 SQL 查询中引用 Memory.com.google.android.gms.maps.Min 属性?

也许我可以在创建 table 等时以某种方式重命名此列?

我可以轻松查询其他嵌入式属性(名称中没有点)。

这取决于 table 的创建方式。

  • 如果有 Memory 类型的 string 列,您可以使用 json_extract 获取值:json_extract("Memory", '$[\'com.google.android.gms.maps\'].Min')
  • 如果有 Memory 类型的列 map<string,string> 您可以使用 element_atjson_extract 的组合:json_extract(element_at("Memory", 'com.google.android.gms.maps'), '$.Min')
  • 如果有 map<string,struct<Min:int,Max:int,Avg:int>> 类型的 Memory 列,您可以使用 element_at 和点来访问值:element_at("Memory", 'com.google.android.gms.maps').Min

我不确定如何将 Memory 列声明为 struct,也许可以转义该语法中的点,但我不确定如何转义。无论哪种方式,它看起来都不像是一种结构,它看起来更像一个地图。