根据 TTL 过滤记录
Filtering records on the basis of TTL
在我的 DynamoDb table 中,我将 TTL 列名称设置为“ttl”。我正在使用下面提到的 Java 代码在 ttl 上应用过滤器但出现异常。 “无效的 FilterExpression:属性名称是保留关键字;保留关键字:ttl(服务:AmazonDynamoDBv2;”还有其他方法可以在 TTL 列上应用过滤器吗?
Map<String, Object> expressionAttributeValues = new HashMap<String, Object>();
String key = ":ttlvalue";
expressionAttributeValues.put(key, 1614643859);
query.withFilterExpression("ttl" + "=" + key);
query.withValueMap(expressionAttributeValues);
要在 Dynamo 表达式中使用保留关键字,我们需要使用占位符字符串并在 NameMap 中替换该字符串
所以,而不是
.withFilterExpression("ttl = :v_ttl")
我们可以使用
.withFilterExpression("#ttl_key = :v_ttl")
和
.withNameMap(new NameMap().with("#ttl_key","ttl"))
将#ttl_key
替换为ttl
这是 table 上的完整示例,分区键为 'pk' 和 ttl 列。
Table table = dynamodB.getTable("test");
QuerySpec querySpec = new QuerySpec()
.withKeyConditionExpression("pk = :v_pk")
.withFilterExpression("#ttl_key = :v_ttl")
.withNameMap(new NameMap().with("#ttl_key","ttl"))
.withValueMap(new ValueMap().withString(":v_pk", "5").withNumber(":v_ttl", 100));
ItemCollection<QueryOutcome> items = table.query(querySpec);
Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().toJSONPretty());
}
在我的 DynamoDb table 中,我将 TTL 列名称设置为“ttl”。我正在使用下面提到的 Java 代码在 ttl 上应用过滤器但出现异常。 “无效的 FilterExpression:属性名称是保留关键字;保留关键字:ttl(服务:AmazonDynamoDBv2;”还有其他方法可以在 TTL 列上应用过滤器吗?
Map<String, Object> expressionAttributeValues = new HashMap<String, Object>();
String key = ":ttlvalue";
expressionAttributeValues.put(key, 1614643859);
query.withFilterExpression("ttl" + "=" + key);
query.withValueMap(expressionAttributeValues);
要在 Dynamo 表达式中使用保留关键字,我们需要使用占位符字符串并在 NameMap 中替换该字符串
所以,而不是
.withFilterExpression("ttl = :v_ttl")
我们可以使用
.withFilterExpression("#ttl_key = :v_ttl")
和
.withNameMap(new NameMap().with("#ttl_key","ttl"))
将#ttl_key
替换为ttl
这是 table 上的完整示例,分区键为 'pk' 和 ttl 列。
Table table = dynamodB.getTable("test");
QuerySpec querySpec = new QuerySpec()
.withKeyConditionExpression("pk = :v_pk")
.withFilterExpression("#ttl_key = :v_ttl")
.withNameMap(new NameMap().with("#ttl_key","ttl"))
.withValueMap(new ValueMap().withString(":v_pk", "5").withNumber(":v_ttl", 100));
ItemCollection<QueryOutcome> items = table.query(querySpec);
Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next().toJSONPretty());
}