Как сделать GROUP BY в App Engine - PullRequest
       34

Как сделать GROUP BY в App Engine

3 голосов
/ 09 февраля 2012

Есть ли какой-нибудь способ GROUP BY в App Engine, с помощью методов GQL или Query?

Я провел некоторое исследование и прочитал, что в GQL нет GROUP BY, и, похоже, его нет и в Query классе.

Если есть какой-либо ресурс или какой-либо подход к реализации с Python , пожалуйста, дайте мне знать.


EDIT

Я также читал, что можно сделать GROUP BY с Map Reduce . Если у кого-то есть опыт, помощь будет принята.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 09 февраля 2012

Нет, хранилище данных не поддерживает какую-либо обработку или агрегирование на стороне базы данных.Решение состоит в том, чтобы сделать всю пост-обработку в памяти.Два способа сделать это в каждом запросе или с map уменьшить .Любое решение всегда будет возвращать все строки в вашем запросе, но способ получения этих строк различен.

2 голосов
/ 09 февраля 2012

Вы не можете выполнять GROUP BY запросов с библиотеками appengine. Это сбой NoSQL архитектур баз данных в общем (одной из реализаций Google BigTable).

В зависимости от того, что вы можете делать с GROUP BY, альтернативный подход может удовлетворить ваши потребности. Для каждого «типа» модели, с которой вы запрашиваете свой GROUP BY, создайте класс db.Model для представления каждого из них. Затем запросите эти классы напрямую.

В качестве альтернативы, если вы заранее знаете значения возвращаемых групп, вы можете Query # filter () для каждого из этих значений и обрабатывать эти запросы как свои GROUP BY ed наборы.

1 голос
/ 09 февраля 2012

Полагаю, что решение в конечном итоге зависит от того, что вы планируете делать с сгруппированными данными. Если требование группировки заключается в упрощении вывода в коде HTML, это можно решить путем перегруппировки данных в шаблоне.

Для вычислений или какого-либо другого вида агрегирования вам необходимо сделать это в памяти.

...