Amazon web services Aws Athena-可以查询名称中有点的JSON属性吗
我使用Athena查询S3中JSON对象中存储的数据 一些JSON属性的名称中包含点,它们表示Android应用程序名称 该属性的外观如下所示: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表已成
{
"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')