Select 并计算 athena 中的数组键
Select and count array keys in athena
我有很多行数据表示我的数据库中的事件。每行都有一个包含键和值数组的“有效负载”列。我可以使用
轻松解析一个值
Select
payload.keyname
from Database
但我正在尝试获取在给定日期出现的所有键的列表和计数。
| payload |
|{id=a, gameid=x, gametype=1, sponserid=null} |
|{id=b, gameid=y, gametype=2, action=jump, sponserid=null}|
|{id=c, gameid=z, action=jump, sponserid=null} |
期望的输出
| Key |Count|
|id | 3 |
|game | 3 |
|gametype | 2 |
|action | 2 |
|sponserid| 2 |
有没有什么方法可以轻松查询数组中的键?比如
Select
payload.*, count(*)
from Database
group by payload.*
您可以使用 cross join unnest
。 unnest 将“展开”地图和 return 每个带有键、值列的地图条目的一行。如果你想计算每个键的出现次数,你可以按键分组。例如
select key, count(*)
from mydb cross join unnest(payload) A(key, value)
group by 1
有关详细信息,请参阅 the docs。
----- 编辑 ----
如果您的列已经是行格式,您可以改为:
select payload.keyname, count(*)
from mydb cross join payload
group by 1
您可以使用 map_keys
函数从 payload
中提取键并取消嵌套。
select key, count(1) as count
from database.table, unnest(map_keys(payload)) as X(key)
group by 1
我有很多行数据表示我的数据库中的事件。每行都有一个包含键和值数组的“有效负载”列。我可以使用
轻松解析一个值Select
payload.keyname
from Database
但我正在尝试获取在给定日期出现的所有键的列表和计数。
| payload |
|{id=a, gameid=x, gametype=1, sponserid=null} |
|{id=b, gameid=y, gametype=2, action=jump, sponserid=null}|
|{id=c, gameid=z, action=jump, sponserid=null} |
期望的输出
| Key |Count|
|id | 3 |
|game | 3 |
|gametype | 2 |
|action | 2 |
|sponserid| 2 |
有没有什么方法可以轻松查询数组中的键?比如
Select
payload.*, count(*)
from Database
group by payload.*
您可以使用 cross join unnest
。 unnest 将“展开”地图和 return 每个带有键、值列的地图条目的一行。如果你想计算每个键的出现次数,你可以按键分组。例如
select key, count(*)
from mydb cross join unnest(payload) A(key, value)
group by 1
有关详细信息,请参阅 the docs。
----- 编辑 ----
如果您的列已经是行格式,您可以改为:
select payload.keyname, count(*)
from mydb cross join payload
group by 1
您可以使用 map_keys
函数从 payload
中提取键并取消嵌套。
select key, count(1) as count
from database.table, unnest(map_keys(payload)) as X(key)
group by 1