Как отфильтровать по NULL? - PullRequest
       31

Как отфильтровать по NULL?

2 голосов
/ 29 апреля 2019
"order (S)","method (NULL)","time (L)"
"/1553695740/Bar","true","[  { ""N"" : ""1556593200"" },  { ""N"" : ""1556859600"" }]"
"/1556439461/adasd","true","[  { ""N"" : ""1556593200"" },  { ""N"" : ""1556679600"" }]"
"/1556516482/Foobar","cheque","[  { ""N"" : ""1556766000"" }]"

Как мне отсканировать или запросить по этому вопросу пустые значения атрибута "method"?https://s.natalian.org/2019-04-29/null.mp4

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

К сожалению, консоль DynamoDB предлагает простой графический интерфейс и предполагает, что все операции, которые вы хотите выполнить, имеют одинаковый тип.Когда вы выбираете фильтры для столбцов типа «NULL», он только позволяет вам делать, существует или не существует.Это имеет смысл, поскольку столбец, содержащий только типы данных NULL, может существовать или не существовать.

Здесь имеется столбец, содержащий несколько типов данных (поскольку NULL - это тип данных, отличный от String).Есть много способов отфильтровать то, что вы хотите здесь, но я не верю, что они доступны вам на консоли.Вот пример того, как вы можете фильтровать набор данных через интерфейс командной строки AWS (примечание: поскольку ваш столбец является зарезервированным словом method, вам нужно будет присвоить ему псевдоним с именем атрибута выражения):

Использование выражений фильтра

$ aws dynamodb scan --table-name plocal --filter-expression '#M = :null' --expression-attribute-values '{":null":{"NULL":true}}' --expression-attribute-names '{"#M":"method"}'

Чтобы избежать этого, можно рассмотреть вариант обновления вашей логики для записи некоторого значения строки заполнителя сортировки вместо пустой или пустой строки при записи данных в базу данных (т. Е. "Нет "или" N / A ").Тогда вы можете работать только со строками и искать по этому значению.

DynamoDB в настоящее время не допускает строковые значения пустой строки и выдаст вам ошибки, если вы попытаетесь поместить эти элементы напрямую.Чтобы сделать это «проще», многие из SDK предоставили средства отображения / преобразования объектов в элементы DyanmoDB, и это обычно включает преобразование пустых строк в типы Null как способ обойти правило отсутствия пустых строк.

Если вам нужно различить null и "", вам нужно будет написать некоторую пользовательскую логику для маршаллирования / отмены маршалирования пустых строк в уникальное строковое значение (то есть "__EMPTY_STRING"), когда они хранятся вDyanmoDB.

2 голосов
/ 29 апреля 2019

Я почти уверен, что нет способа фильтровать с помощью консоли. Но я предполагаю, что вы действительно хотите использовать такой фильтр в коде.

DynamoDB имеет очень специфический способ хранения NULL. Существует тип данных «NULL», который в основном представляет концепцию с нулевыми значениями, но на самом деле он похож на логическое значение.

Если у вас есть возможность изменить тип данных этого атрибута на строковый или числовой, я настоятельно рекомендую это сделать. Тогда вы сможете создавать гораздо более мощные запросы с условиями фильтра, соответствующими вашим ожиданиям.

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

Просто следите за комментариями. Если вы предпочитаете использовать маппер, вы можете настроить, каким образом он будет маршалировать определенные атрибуты, которые могут быть пустыми или пустыми. Взгляните на реализацию кодера go sdk для некоторых примеров: https://git.codingcafe.org/Mirrors/aws/aws-sdk-go/blob/9b5aaeba7a51edcf3f87bda525a08b04b90d2ef8/service/dynamodb/dynamodbattribute/encode.go

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