【发布时间】:2016-10-19 08:08:36
【问题描述】:
我将我的 Firebase 项目连接到 BigQuery,并在今天收到了所有昨天的事件。
我有一个具有整数参数的用户定义事件。 以及字符串类型的用户属性“user_job”(例如“Pilot”、“Mechanic”、“Programmer”……) 我想知道按用户作业分组的整数参数的平均值。
是否有提取该信息的 SQL 查询?
我知道 SQL,但我的问题是数据以某种方式嵌套在 RECORD 中,我不知道如何处理。 如果每个事件是一行,每个用户属性是一列,我就不会有这个问题。如果是这样,我可以这样写:
SELECT AVG( param ), user_job FROM table WHERE event_type = "my_event" GROUP BY user_job
但用户属性位于 RECORD(数组?)内,并且 RECORD 内还有多个事件。
或者,使用 SQL 查询可能是处理此类请求的错误方法。如果是这样,有人可以指点我的方向。 我看到 BigQuery 中有 user defined functions。那么我是否应该创建一个用户定义的函数,将 Firebase BigQuery 行转换为上面写的平面结构,这是正确的方法吗?
更新: 我运行了来自 Sara 和 Elliot 的查询,并且在两种情况下处理的字节都相同(这是成本)。 Saras 查询比 Elliots 运行得更快,但这可能是随机的机会(而且 google 对数据收费,而不是时间)。 尽管如此,我还是将 Elliots 的答案标记为最终答案,因为根据文档,标准 SQL 是推荐的答案。 我仍然不知道这一切与 UDF 相比如何,可能会对其进行测试。
更新 2: 我使用 UDF 实现对其进行了测试,该实现为每个 round_completed 事件发出一个新行(语言、硬币)。与 Sara 和 Elliot 发布的纯 SQL 解决方案相比,它运行时间更长,处理的数据更多。
|_Solution___|_Time___|_Data Processed___|
|Sara |2.1s |399 KB |
|Elliot |2.4s |399 KB |
|UDF |3.4s |437 KB |
*请注意,时间可能是一个不好的指标,因为不知道谷歌数据中心在给定时间的繁忙程度。最后,处理的数据越少,成本就越低。我还是把时间加进去了,也许有点用处。
【问题讨论】:
-
我现在使用用户定义的函数让它工作。循环遍历所有用户属性和所有事件。我不知道这是否正确,并会在月底看到它的成本。但它有效。
标签: firebase google-bigquery firebase-analytics