Что такое допустимое ключевое-условное-выражение dynamodb для cli

Может кто-нибудь, пожалуйста, скажите мне, каким будет допустимое ключевое выражение условия. Я пытаюсь выполнить запрос к простой таблице MyKeyTable. Он имеет два «столбца», а именно Id и AnotherNumberThatICareAbout, которые имеют тип Long.

Я хотел бы увидеть все значения, которые я ввел. Поэтому я попытался:

aws dynamodb query --select ALL_ATTRIBUTES --table-name MyKeyTable
--endpoint http://localhost:8000 
--key-condition-expression "WHAT DO I PUT IN HERE?"

Какой хэш мне нужно ввести? Документы немного хромают в этом имхо. Любая помощь приветствуется, даже если это просто ссылка на хороший документ.


person Mark Dickinson    schedule 15.02.2016    source источник


Ответы (2)


Вот подход, основанный только на командной строке, который вы можете использовать без промежуточных файлов.

Во-первых, используйте заполнители значений для создания выражения ключевого условия, например,

--key-condition-expression "Id = :idValue"

(Не забывайте использовать префикс двоеточия для заполнителей!)

Затем создайте аргумент значений атрибутов-выражений. Обратите внимание, что он ожидает формат JSON. Хитрость, которую я всегда стараюсь забыть, заключается в том, что вы не можете просто подставить 42 для числа или «foo» для строки. Вы должны сообщить DynamoDb тип и значение. Ссылка документы AWS для полная разбивка того, как вы можете форматировать спецификацию значения, которая может быть довольно сложной, если вам это нужно.

Для Windows вы можете избежать кавычек, удвоив их, например,

--expression-attribute-values "{"":idValue"":{""N"":""42""}}"

Для MacOS/Linux вокруг JSON требуется одинарная кавычка:

--expression-attribute-values '{":idValue":{"N":"42"}}'
person Rick Riensche    schedule 02.09.2016
comment
Спасибо за это! Использование одинарных кавычек вокруг JSON может облегчить чтение: --expression-attribute-values '{":idValue":{"N":"42"}}' - person Josh Vickery; 29.12.2016
comment
Хм ... определенно согласен, что это более читабельно, только что попробовал, хотя готовился обновить этот ответ, и, по крайней мере, в Windows это не нравится - ломается после попадания в первую двойную кавычку - person Rick Riensche; 30.12.2016
comment
О, облом, это было на OS X и Linux. - person Josh Vickery; 04.01.2017
comment
одинарная кавычка спасла меня. - person RNA; 12.06.2018

создайте файл, содержащий ваши ключи: test.json

{
    "yourHashKeyName": {"S": "abc"},
    "YourRangeKey": {"S": "xyz"}  //optional
}

Бежать

aws dynamodb query --table-name "your table name" --key-conditions file://test.json

см.: http://docs.aws.amazon.com/cli/latest/reference/dynamodb/query.html

Для сканирования таблицы

aws dynamodb scan --table-name "you table name"

Нет необходимости передавать какие-либо ключи, так как мы сканируем всю таблицу (Примечание: она получит максимум 1 МБ данных)

см.: http://docs.aws.amazon.com/cli/latest/reference/dynamodb/scan.html

person Harshal Bulsara    schedule 15.02.2016
comment
MyHashKey - будет значением вашего хеш-ключа, и здесь я взял строку для справки, а abc будет значением хеш-ключа. - person Harshal Bulsara; 15.02.2016
comment
В своем вопросе вы ответили на вопрос, почему я это использовал, я также обновлю свой вопрос для сканирования. - person Harshal Bulsara; 15.02.2016
comment
Для этого вы можете использовать сканирование, я обновил ответ - person Harshal Bulsara; 15.02.2016
comment
Спасибо, сканирование действительно дает мне некоторые данные, но чтобы получить зеленую галочку, я хочу знать, как заставить мой запрос работать ;-) - person Mark Dickinson; 15.02.2016
comment
@MarkDickinson Я уже указал, что просто замените get-item в моем примере на запрос, я обновил ответ :) - person Harshal Bulsara; 15.02.2016
comment
--key не является допустимым аргументом для запроса - person Mark Dickinson; 15.02.2016
comment
@MarkDickinson Вы правы, это --key-conditions вместо ключа - person Harshal Bulsara; 15.02.2016
comment
Обратите внимание, что --key-conditions теперь считается устаревшим параметром. Я добавил ответ, который соответствует последнему и лучшему. Наслаждаться! - person Rick Riensche; 03.09.2016