Предположительно, ваш хак был примерно таким:
# Deleting all messages older than "earliest_date"
q = db.GqlQuery("SELECT * FROM Message WHERE create_date < :1", earliest_date)
results = q.fetch(1000)
while results:
db.delete(results)
results = q.fetch(1000, len(results))
Как вы говорите, если данных достаточно, вы получите время ожидания запроса до того, как оно пройдет через все записи. Вам придется повторно вызывать этот запрос несколько раз извне, чтобы убедиться, что все данные были удалены; достаточно легко сделать, но вряд ли идеально.
Консоль администратора, похоже, не предлагает никакой помощи, поскольку (исходя из моего собственного опыта работы с ней) она, по-видимому, позволяет только перечислять сущности определенного типа, а затем удалять постранично.
При тестировании мне приходилось очищать базу данных при запуске, чтобы избавиться от существующих данных.
Из этого я могу сделать вывод, что Google работает по принципу, что диск дешев, и поэтому данные, как правило, теряются (вместо индексов заменяются избыточные данные), а не удаляются. Учитывая, что в настоящее время каждому приложению доступно фиксированное количество данных (0,5 ГБ), это не сильно поможет пользователям, не использующим Google App Engine.