Отфильтрованное сканирование DynamoDB API не дает результатов

Итак, я запускаю сканирование таблицы DynamoDB с ~ 500 записями с помощью интерфейса командной строки AWS через Powershell, потому что инструменты AWS Powershell не поддерживают операции запроса / сканирования DDB. Я могу запустить команду без фильтров и получить все свои предметы:

& aws dynamodb scan --table-name "$table_name" --projection-expression "$item_key"

Это возвращает все 500+ значений $ item_key.

Проблема возникает, когда я пытаюсь отфильтровать сканирование:

& aws dynamodb scan --table-name "$table_name" --projection-expression "$item_key" --filter-expression "item_key_2 = `"$item_value`""

Это возвращает счетчик 0 и никаких элементов, даже если в таблице есть несколько значений, соответствующих $ item_value.

Что я здесь упускаю / делаю не так?


person DataBeast    schedule 01.07.2015    source источник
comment
Что такое item_key_2? Это переменная или имя поля? aws doco не очень полезен. Возможно, будет проще сохранять результаты в Psobject и фильтровать в PowerShell.   -  person Jan Chrbolka    schedule 02.07.2015
comment
Я просто выполнил полное сканирование таблицы и фильтрацию в Powershell. Я обнаружил, что встроенная фильтрация DynamoDB, описанная Дэвидом, слишком неуклюжа для работы. Кроме того, это не экономит много времени, так как фильтрованное сканирование все равно извлекает все строки перед фильтрацией.   -  person DataBeast    schedule 20.07.2015


Ответы (1)


Предположим, что $item_value здесь расширяется до foobar. Это выражение фильтра ищет элементы, атрибуты item_key_2 и foobar которых имеют одинаковое значение:

{
  "item_key": "...",
  "item_key_2": "It's a match!",
  "foobar": "It's a match!"
}

Чтобы сравнить item_key_2 с буквальным значением, вам нужно сделать:

aws dynamodb scan \
    --table-name "$table_name" \
    --filter-expression "item_key_2 = :value" \
    --expression-attribute-values "{`":value`":{`"S`":`"$item_value`"}}"

:(

person David Murray    schedule 02.07.2015