google-app-engine - 避免和删除 bigquery 中的重复项

标签 google-app-engine google-bigquery

我们已经开始使用 bigquery 来记录我们游戏的事件。

我们从应用引擎节点收集事件,并时不时将它们放入任务队列中。

后端随后处理此队列并将事件上传到 bigquery。

今天,我们存储了来 self 们一款游戏的大约 6000 万个日常事件和来自另一款游戏的 600 万个日常事件。

我们还制作了 cron 作业来处理这些事件以收集各种游戏 KPI。 (即第二天留存率、活跃用户等)

一切都很顺利,但我们现在面临一个棘手的问题!

========问题一===================================== ==========

由于某些原因,队列任务的删除有时会失败。不是很频繁,但它经常发生并且经常爆发。

TransientFailureException 可能是原因...我说可能是因为我们正在以批处理模式删除流程事件。 IE。 ...

List<Boolean> Queue.deleteTask(List<TashHandle> taskstoDelete)

... 所以我们实际上不知道为什么我们无法删除任务。

我们今天添加了重试代码,将尝试再次删除那些失败的删除。

是否有处理此类问题的最佳实践?

=========问题2 ==================================== ===================

重复检测

以下 SQL 成功地为或更小的游戏找到重复项,但超出了资源 更大的那个。

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(我希望它们是单独的问题,以跳过这一步和混淆的机会):

内部查询或外部查询资源耗尽?

这个有用吗?

SELECT ts, eventId, userId, count(*) duplicates
FROM [analytics_davincigameserver.events_app1_v2_201308]
GROUP EACH BY ts, eventId, userId
HAVING duplicates > 1

如何减少基数?我猜你是按时间戳分组的,可能有太多不同的桶要分组。这样效果更好吗?

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

关于google-app-engine - 避免和删除 bigquery 中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18787447/

相关文章:

google-bigquery - 使用联接表中的引用在 BigQuery 中查询分区表

google-bigquery - 访问被拒绝 : Permission denied while getting Drive credentials

validation - 在插入 BigQuery 表之前检查数据是否已经存在(使用 Python)

python - 如何针对 Google Cloud SQL 运行 Django 管理命令

google-app-engine - Channel API 的计费是如何完成的?

php - 带有 php 的谷歌应用引擎不支持 mysqli

json - BigQuery 加载 JSON 错误 "Could not convert value to string"

sql - 我们如何从BigQuery中删除重复数据并将其保存到另一个具有很多属性的表中

java - 在Google AppEngine中的版本/后端之间共享 session

google-app-engine - Twilio TwiML XML 字符串而不是 url