Amazon web services 如何过滤空值?

Amazon web services 如何过滤空值?,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,如何在空的方法属性值上扫描或查询该问题 我很确定没有办法使用控制台进行过滤。但我猜您真正想要的是在代码中使用这样的过滤器 DynamoDB有一种非常独特的存储空值的方法。有一种空数据类型,它基本上表示空值的概念,但实际上有点像布尔值 如果您有机会将该属性的数据类型更改为字符串或数字,我强烈建议您这样做。然后,您将能够使用过滤条件创建功能更强大的查询,以匹配所需内容 如果数据已经存在,并且您没有大量需要更新的项,我建议您创建一个新属性来表示您的数据和数据 只是跟进评论。如果喜欢使用映射器,可以自定

如何在空的方法属性值上扫描或查询该问题

我很确定没有办法使用控制台进行过滤。但我猜您真正想要的是在代码中使用这样的过滤器

DynamoDB有一种非常独特的存储空值的方法。有一种空数据类型,它基本上表示空值的概念,但实际上有点像布尔值

如果您有机会将该属性的数据类型更改为字符串或数字,我强烈建议您这样做。然后,您将能够使用过滤条件创建功能更强大的查询,以匹配所需内容

如果数据已经存在,并且您没有大量需要更新的项,我建议您创建一个新属性来表示您的数据和数据


只是跟进评论。如果喜欢使用映射器,可以自定义它封送某些可能为null/空的属性的方式。查看go sdk编码器实现的一些示例:

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

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

使用过滤器表达式 $aws dynamodb scan-表名plocal-筛选表达式'M=:null'-表达式属性值'{:null:{null:true}}'-表达式属性名称'{M:method}'

一个考虑避免这种情况的选项是在将数据写入数据库时,更新逻辑以编写一些填充填充字符串值,而不是空字符串或空字符串。然后,您可以单独操作字符串并在该值上搜索。p> DynamoDB目前不允许空字符串的字符串值,如果您尝试直接放置这些项,则会出现错误。为了简化这一过程,许多SDK都为DyanmoDB项的对象提供了映射器/转换器,这通常涉及将空字符串转换为空类型,以此作为绕过无空字符串规则的一种方法


如果需要区分null和,则需要编写一些自定义逻辑,以便将空字符串marshall/unmarshall转换为唯一的字符串值,即当它们存储在DyanmoDB中时为空字符串。

您的意思是方法是值为null的属性名吗?通常,DynamoDB不允许在属性上保存NULL值。当字符串为空时,dynamodbattribute.MarshallMap from将创建此NULL。可以将映射程序配置为生成自定义映射。当字符串为空dynamodbattribute.MarshallMap from创建此空值时,这不应该是问题[hendry@t480sdb]$aws-profile dd dynamodb scan-table name plocal-filter expression'method=:null'-表达式属性值'{:null:{null:true}'调用扫描操作时发生ValidationException错误:FilterExpression无效:属性名称是保留关键字;保留关键字:methodAh,method是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"" }]"