amazon-web-services - 如何过滤NULL?

标签 amazon-web-services amazon-dynamodb

"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"" }]"

如何在空的“方法”属性值上扫描或查询该问题? https://s.natalian.org/2019-04-29/null.mp4

最佳答案

不幸的是,DynamoDB 控制台提供了一个简单的 GUI,并假设您要执行的所有操作都具有相同的类型。当您在“NULL”类型的列上选择过滤器时,它只允许您执行存在或不存在。这是有道理的,因为仅包含 NULL 数据类型的列可以存在也可以不存在。

您在这里拥有的是一个包含多种数据类型的列(因为 NULL 是与 String 不同的数据类型)。有很多方法可以在这里过滤您想要的内容,但我认为您无法在控制台上使用它们。下面是一个关于如何通过 AWS CLI 过滤数据集的示例(注意:由于您的列是一个命名为保留字 method ,您需要使用表达式属性名称对其进行别名):

使用过滤器表达式

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

考虑避免这种情况的一个选项是更新您的逻辑以在将数据写入数据库时​​写入一些排序填充字符串值而不是空或空字符串(即“无”或“不适用”)。然后,您可以单独对字符串进行操作并搜索该值。

DynamoDB 当前不允许使用空字符串的字符串值,如果您尝试直接放置这些项目,则会出现错误。为了使这“更容易”,许多 SDK 为 DyanmoDB 项目的对象提供了映射器/转换器,这通常涉及将空字符串转换为 Null 类型,作为解决无空字符串规则的一种方式。

如果需要区分null"" ,当它们存储在 DyanmoDB 中时,您需要编写一些自定义逻辑来将空字符串编码/解码为唯一的字符串值(即 "__EMPTY_STRING")。

关于amazon-web-services - 如何过滤NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55898187/

相关文章:

amazon-web-services - AWS DynamoDB 是否会因条件表达式而失败的 Put Item(写入)操作消耗吞吐量或费用?

amazon-s3 - 如何创建 s3 存储桶、具有 S3 完全访问权限的 IAM 用户以及如何将用户凭据传递到我的应用程序?

mysql - AWS Glue 谓词下推条件无效

javascript - DynamoDB - 基于记录数量的条件放置

amazon-web-services - DynamoDB updateItem 失败

java - 如何将 dynamoDB BatchSave API 失败的批处理结果转换为 pojo 列表?

postgresql - RDS Postgres DB IAM generate_db_auth_token 不工作

c++ - aws 批处理上的非法指令

java - 如何通过 aws SDK Android 公开 S3 对象?

java - 使用java代码获取在AWS DynamoDb中创建的表