Amazon web services Aws Athena-可以查询名称中有点的JSON属性吗

Amazon web services Aws Athena-可以查询名称中有点的JSON属性吗,amazon-web-services,amazon-athena,Amazon Web Services,Amazon Athena,我使用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 Athena表已成

我使用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 Athena表已成功创建并可以查询。 有没有办法在SQL查询中引用Memory.com.google.android.gms.maps.Min属性

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


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

这取决于创建表的方式

  • 如果存在类型为
    string
    Memory
    列,则可以使用该列获取值:
    json\u extract(“Memory”,“$[\'com.google.android.gms.maps\'].Min”)
  • 如果存在类型为
    map
    Memory
    列,则可以使用和的组合:
    json\u extract(元素位于(“Memory”、'com.google.android.gms.maps')、'$.Min')
  • 如果存在类型为
    map
    Memory
    列,则可以使用和点访问值:
    element_at(“Memory”,'com.google.android.gms.maps').Min

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

根据SQL标准,当引用带有点的列时,您需要
-引用名称。例如
选择“Memory.com.google.android.gms.maps.Min“从…
。尝试了之后,雅典娜返回-语法错误:第9:40行:列“…”无法解析当您
显示列时,该列是如何列出的?在这种情况下仅显示外部列名,我看到
内存
尝试
“内存”。.com.companyname.appname1。“.Min”
(或
“内存”。.com.google.android.gms.maps”“Min”
)。将
内存定义为
map
。感谢您的帮助。我必须使用双引号来访问字段,使用
json\u extract
json\u extract(“Memory”、'$[“com.google.android.gms.maps”].Min')