Я использую Dynamodb. У меня есть простая таблица сотрудников с такими полями, как идентификатор, имя, зарплата, додж и т. д. Что эквивалентно запросу select max(salary) from employee
в dynamodb?
Максимальное значение Dynamodb
Ответы (3)
Вы можете смоделировать свою схему примерно так:
employee_id
, как ключ разделаsalary
, как ключ сортировки таблицы или локального вторичного индекса.
Затем Query
ваша таблица для данного employee_id
, с ScanIndexForward
как false, и выберите первую возвращенную запись. Поскольку все строки с номером employee_id
хранятся в отсортированном виде, первой записью в порядке убывания будет строка с наибольшим значением salary
.
Вы также можете оставить Limit
равным 1, и в этом случае DynamoDB вернет только одну запись.
Соответствующая документация здесь.
person
ketan vijayvargiya
schedule
22.06.2016
Привет, @ketan.. спасибо за ваш ответ... я создал индекс для emoployee_name и зарплаты в качестве ключа сортировки и запросил как response = table.query( IndexName = 'Emp_Name-Salary-index', Limit = 1, ScanIndexForward = False, )... но это дает мне ошибку, так как необходимо использовать ключевое выражение. Я новичок в динамо. Пожалуйста, помогите мне, где я пропал.
- person arunapavan; 23.06.2016
Вы не указали employee_id. Поставь это тоже
- person ketan vijayvargiya; 23.06.2016
Кажется, это вернет только максимальную зарплату на сотрудника. Исходный SQL-запрос предназначен для «глобального максимума».
- person tedder42; 01.07.2018
@ketanvijayvargiya отличное замечание о лимите. Это значительно повышает производительность запроса.
- person RredCat; 19.11.2018
Я могу подтвердить слова @tedder42. Если вы хотите получить глобальный максимум с помощью этого метода, вам придется добавить поле с одинаковым значением для всех записей в вашей таблице (или, если у вас уже есть поле, одинаковое для всех записей, используйте его), а затем введите глобальный вторичный индекс, который использует недавно введенное постоянное поле в качестве ключа HASH и зарплату в качестве ключа RANGE. Оттуда можно выполнить шаги, описанные в этом решении. Обязательно используйте созданный глобальный вторичный индекс при запросе!
- person Zeust the Unoobian; 02.10.2019
В Dynamodb нет дешевого способа добиться этого. Не существует встроенной функции для определения максимального значения атрибута без извлечения всех элементов и расчета программным путем.
person
notionquest
schedule
22.06.2016
Есть ли другой способ получить тот же результат? Делать индексированный запрос заранее или около того?
- person Emil Vikström; 22.06.2016
Не уверен насчет boto3
, но inboto
можно запустить таким образом
from boto.dynamodb2.table import Table
table = Table("employee")
values = list(table.query_2(reverse=True, limit=1))
MAXVALUE = values[0][salary]
person
sameera sy
schedule
22.06.2016