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_at
和 json_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
,也许可以转义该语法中的点,但我不确定如何转义。无论哪种方式,它看起来都不像是一种结构,它看起来更像一个地图。
我使用 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_at
和json_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
,也许可以转义该语法中的点,但我不确定如何转义。无论哪种方式,它看起来都不像是一种结构,它看起来更像一个地图。