2017-07-26 34 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

後成功完成計數,並與特定的過濾器和時間表集提取,那麼你可以繼續運行刪除請求。