1

今天早上我们遇到了一个问题,它在敏锐中创建了重复事件(其中 496 个)并试图删除它们。我有一个提取查询,它只返回那些事件。如果我在本周的时间段内运行它,删除会返回错误:

{"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)。但是,时间范围内还有许多与过滤器不匹配的事件。

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

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

4

1 回答 1

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

最佳实践是通过将此请求更改为计数请求来测试您的过滤器和时间框架语法。确保计数符合您的预期(例如过滤 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

使用您设置的特定过滤器和时间范围成功完成计数和提取后,您可以继续运行删除请求。

于 2017-07-26T22:05:59.153 回答