Операции с запросами Dynamodb - PullRequest
       15

Операции с запросами Dynamodb

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

Можно ли работать с " ИЛИ ", " И " Операциями запроса в DynamoDB?

Мне нужно знать, есть ли в DynamoDB что-то вроде "where fname = xxxx OR lname = xxxx "из SQL-запросов? В Rails

Спасибо.

Ответы [ 4 ]

6 голосов
/ 24 февраля 2012

В общем, нет.

DynamoDB позволяет осуществлять эффективный поиск только по первичному (хэш-ключу) ключу, а также при необходимости запросу диапазона по «ключу диапазона». Другие атрибуты не индексируются.

Вы можете использовать запрос Scan, чтобы прочитать фильтр всей таблицы по набору атрибутов, но это относительно дорогой и медленный вариант для больших таблиц.

Вы можете имитировать И, создав первичный ключ, который включает в себя оба запрашиваемых значения, и ИЛИ, создав дубликаты таблиц, каждая из которых использует один атрибут в качестве своего первичного ключа, и запросив обе таблицы параллельно с BatchGetItem

1 голос
/ 30 марта 2012

Как упомянул BCoates, ответ НЕТ.

Если вы хотите последовательного чтения, вы не можете использовать BatchGetItem.

0 голосов
/ 16 ноября 2017

Хотя такой вещи, как "ИЛИ" , "И" , не существует, но вы все равно можете имитировать SQL-запросы, используя scan и filterexpression .

Но помните, что если вы используете сканирование, то это означает, что вся таблица будет извлечена и затем обработана, также сканирование не всегда сканирует всю таблицу за одну итерацию. так что вы можете пропустить некоторые предметы. поэтому этот метод, как правило, избегают, так как он очень дорогой. но здесь есть фрагмент кода Python3 с использованием API Boto3, который может имитировать SQL-запрос, который вы хотите

response = table.scan(
FilterExpression=Attr('fname').eq('xxxxx') | Attr('lname').eq('xxxxx'))

фильтрация выражений также различных операторов, таких как &, ~

0 голосов
/ 05 ноября 2015

Нет, невозможно использовать оператор «ИЛИ», например, в KeyConditionExpression: '#hashkey =: hk_val AND #rangekey>: rk_val',

в нем используется И Оператор для сопоставления ключа для бота HASH и RANGE.

Поэтому мы не можем использовать ИЛИ в Динамо ДБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...