Avoiding and removing duplicates in bigquery
我们已经开始使用bigquery记录游戏中的事件。
我们从Appengine节点收集事件,然后将它们分块放入队列中,然后将其放入任务队列中。
然后,后端正在处理此队列,并将事件上载到bigquery。
今天,我们从一项游戏中每天存储大约6000万个事件,从另一个游戏中存储600万个事件。
我们还安排了cron工作来处理这些事件,以收集各种游戏KPI。 (即第二天的保留时间,活跃用户等)
一切都变得很顺利,但我们现在确实面临着一个棘手的问题!
========问题1 ======================================= ==========
由于某种原因,删除队列任务有时会失败。它不是很常见,但是经常发生并且经常爆发。
TransientFailureException可能是原因...我说可能是因为我们正在批处理模式下删除流程事件。 IE。 ...
1 | List<Boolean> Queue.deleteTask(List<TashHandle> taskstoDelete) |
...所以我们实际上不知道为什么我们无法删除任务。
我们今天添加了重试代码,该代码将尝试再次删除那些失败的删除操作。
是否有解决此类问题的最佳实践?
=========问题2 ===================================== ===================
重复检测
以下SQL成功地找到了或更小的游戏的副本,但超出了资源
大的。
1 2 3 4 5 6 7 8 | SELECT DATE(ts) date, SUM(duplicates) - COUNT(duplicates) as duplicates FROM ( SELECT ts, eventId, userId, count(*) duplicates FROM [analytics_davincigameserver.events_app1_v2_201308] GROUP EACH BY ts, eventId, userId HAVING duplicates > 1 ) GROUP EACH BY date |
即使对于我们更大的游戏,也有办法检测重复吗?
IE。一个查询,表明bigquery将能够处理我们每天的6000万行并查找重复项。
预先感谢!
第2个问题(我希望它们是单独的问题,以跳过此步骤和造成混乱的机会):
内部查询或外部查询是否用尽资源?
这项工作吗?
1 2 3 4 | SELECT ts, eventId, userId, count(*) duplicates FROM [analytics_davincigameserver.events_app1_v2_201308] GROUP EACH BY ts, eventId, userId HAVING duplicates > 1 |
如何减少基数?我猜是因为您要按时间戳分组,所以可能有太多不同的存储桶要分组。这样效果更好吗?
1 2 3 4 5 | SELECT ts, eventId, userId, count(*) duplicates FROM [analytics_davincigameserver.events_app1_v2_201308] WHERE ABS(HASH(ts) % 10) = 1 GROUP EACH BY ts, eventId, userId HAVING duplicates > 1 |