2017-07-26 72 views
1

今天早上我们遇到了一个问题,它在敏锐的(其中496个)中创建了重复事件并试图删除它们。我有一个提取查询只返回这些事件。如果我在这一周的时间内运行,删除返回一个错误:删除少量Keen IO事件时出现“事件过多”错误

{"message": "There are too many events to perform this operation. You cannot delete a collection that has over 1000000 events. Your collection currently has 4834812 events.", "error_code": "TooManyEventsError”}

我已经收窄的时间表过去12小时的提取和获得预期的496个事件... 。把它切换到删除有点紧张。

我想清理这些事件,但要确保我不会删除我想保留的事件...。

我对提取和(即将执行)删除的过滤器有一个我想要删除的敏锐ID(keen.id)数组。但是,时间范围内的更多事件与过滤器不匹配。

让我感到震惊的是,最初我在过去的两天(或一周)内运行删除作为时间范围,并返回错误响应,因为时间范围内有超过100,000个事件。

如果缩小时间范围,我想确保它只删除我的过滤器中的ID列表,而不是时间范围内的所有事件。

回答

0

两件事情来检查:

  1. 确保你通过你的过滤器和时间表作为查询参数,而不是在内容主体。 DELETE请求的常见“陷阱”是尽管其他API请求(如查询和提取)允许您将查询参数放入请求的内容正文中,但DELETE API将完全忽略内容正文。这可能导致DELETE API将您的请求解释为删除整个集合的请求。

  2. 检查您的过滤器语法。第二个“难题”是,如果您在过滤器上使用语法或编码,它也可能导致它们被完全忽略,API再次可以解释为删除整个集合的请求。

实际上,如果您尝试删除集合而不是事件的子集,则会收到此错误。所以上面两件事中的一件可能是罪魁祸首。

下面是删除语法应该是什么:

https://api.keen.io/3.0/projects/PROJECT_ID/events/COLLECTION_NAME?api_key=MASTER_KEY&filters=YOUR_FILTERS_HERE&timeframe=this_7_days

最好的做法是通过改变这个请求到count request来测试你的过滤器&时间表语法。确保计数是你所期望的(例如,过滤1个事件并确保计数为1)。计数请求语法是:

https://api.keen.io/3.0/projects/PROJECT_ID/queries/count?api_key=READ_KEY&event_collection=COLLECTION_NAME

最后,因为删除是不可逆的,我建议你运行的提取,让你有删除的事件的额外副本。这样如果你不小心删除了错误的东西,你可以重新加载它们。提取语法看起来像:

https://api.keen.io/3.0/projects/PROJECT_ID/queries/extraction?api_key=READ_KEY&event_collection=COLLECTION_NAME&timeframe=this_7_days

后成功完成计数,并与特定的过滤器和时间表集提取,那么你可以继续运行删除请求。