App Engine Datastore Viewer, как показать количество записей с помощью GQL? - PullRequest
22 голосов
/ 12 февраля 2011

Я бы подумал это было бы легко для SQL-подобных!То, что я хочу, это эквивалент GQL:

select count(*) from foo;

и получить ответ, похожий на:

1972 records.

И я хочу сделать это в GQL из командной строки "msgstr "в веб-средстве просмотра хранилища данных.(Вы знаете, тот, который показывает 20 за раз и позволяет мне видеть «следующие 20»)

В любом случае - я уверен, что это просто умопомрачительно, я просто не могу найти правильныйсинтаксис.Любая помощь будет оценена.

Спасибо!

Ответы [ 5 ]

30 голосов
/ 04 сентября 2015

С прямой консолью хранилища данных нет прямого способа сделать это, но я только что понял, как сделать это косвенно, с ключевым словом OFFSET.

Итак, с учетом таблицымы будем вызывать foo с полем с именем type, которое мы хотим проверить на значения с именем "bar":

SELECT * FROM foo WHERE type="bar" OFFSET 1024

(здесь мы сделаем быструю игру "теплее, холоднее",двоичный стиль)

Допустим, запрос ничего не возвращает.Измените OFFSET на 512, затем на 256, 128, 64, ... вы поняли.То же самое в обратном порядке: переходите к 2048, 4096, 8192, 16384 и т. Д., Пока не увидите никаких записей, затем возвращайтесь.

Я только что сделал одну здесь на работе.Начал с 2048 года и заметил две записи.В таблице 2049.В более экстремальном случае (скажем, есть 3300 записей), вы могли бы начать с 2048, заметить, что есть много, перейти к 4096, нет ни одного ... Возьмите среднюю точку (1024 между 2048 и 4096 - 3072) и обратите внимание на васесть записи ... Оттуда вы можете добавить половину предыдущей средней точки (512), чтобы получить 3584, и ее нет.Сократить половину (256), чтобы получить 3328, но все еще ни одного.Еще раз опустим половину (128), чтобы получить 3200, и есть записи.Поднимитесь на половину последнего значения val (64), и все еще есть записи.Поднимитесь наполовину снова (с 32) до 3296 - все еще записи, но такие маленькие, что вы можете легко увидеть, что есть ровно 3300.

Хорошая вещь по сравнению со статистикой Datastore - узнать, сколько записей в таблице выможет ограничить его предложением WHERE.

12 голосов
/ 03 октября 2016

Я не думаю, что есть какой-либо прямой способ подсчитать количество сущностей через GQL.Однако вы можете получить счет непосредственно из приборной панели;

enter image description here

Подробнее - https://cloud.google.com/appengine/docs/python/console/managing-datastore

12 голосов
/ 13 февраля 2011

Как указано в других вопросах , похоже, что в GQL нет агрегатной функции count. GQL Reference также не говорит, что есть возможность сделать это, хотя прямо не говорит, что это невозможно.

В консоли разработки (локально работающей с вашим приложением) это выглядит так, как будто простое нажатие на кнопку «Список объектов» покажет вам список всех объектов определенного типа, и вы увидите «Результаты 1-10 из (некоторый номер»). ) ", чтобы получить общий счет в вашей среде разработки.

В производственном процессе вы можете использовать вкладку «Статистика хранилища данных» (ссылка прямо под средством просмотра хранилища данных), выбрать «Показать статистику для: (ваш тип сущности)», и она покажет вам общее количество сущностей, однако это не самый свежий вид данных (обновляется «хотя бы раз в день»).

Поскольку вы не можете запускать произвольный код в производственном режиме через браузер, я не думаю, что высказывание «использовать .count() для запроса» поможет, но если вы используете Remote API * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 219 * * * * * * * * * * * * * 10 * * 10 * 10 * print MyEntity.all().count() 1020 *

0 голосов
/ 15 февраля 2011

Невозможно получить общий счет в GQL.Вот способ получить счет с помощью python:

def count_models(model_class, max_fetch=1000):
  total = 0
  cursor = None
  while True:
    query = model_class.all(keys_only=True)
    if cursor: 
        query.with_cursor(cursor)
    results = query.fetch(max_fetch)
    total += len(results)
    print('still counting: ' + total)
    if (len(results) < max_fetch):
        return total
    cursor = query.cursor()

Вы можете запустить эту функцию с помощью remote_api_shell или добавить пользовательскую страницу на свой сайт администратора для выполнения этого запроса.Очевидно, что если у вас есть миллионы строк, вы будете ждать некоторое время.Возможно, вы сможете увеличить max_fetch, я не уверен, каков текущий предел выборки.

0 голосов
/ 12 февраля 2011

Это одна из тех удивительных вещей, которые хранилище данных просто не может сделать.Я думаю, что самый быстрый способ сделать это - выбрать __KEY__ из foo в Список, а затем подсчитать элементы в списке (чего нельзя сделать в веб-программе просмотра).Если вас устраивает статистика, которая может быть немного устаревшей, вы можете перейти на страницу статистики хранилища данных консоли администратора, которая расскажет вам, сколько объектов каждого типа было некоторое время назад.Кажется, что этой статистике обычно меньше 10 часов.К сожалению, вы не можете запросить их более конкретно.

...