在 DynamoDB 中使用排序键时出现“索引键类型不匹配”

Cli*_*ote 3 java amazon-dynamodb

我有一个包含以下索引的表:

  • 用户
    • id(字符串,主要)
    • 电子邮件(字符串,全局辅助)
    • expiresOn (Date (string), global secondary)
    • is_premium(布尔值)

我想拥有is_premium的范围/排序键expiresOn,因此我可以例如查询在今天之前或当天到期的所有帐户,并且具有 is_premium = true。

如果我只是查询今天/今天之前到期的所有帐户,但没有 is_premium=true,我将在结果中获得 90% 的表。

但是,如果我尝试在 上设置范围查询is_premium,则在尝试将记录保存到表时会出现以下错误:

com.amazonaws.AmazonServiceException:索引键的类型不匹配(服务:null;状态代码:400;错误代码:ValidationException;请求 ID:null)

在 com.amazonaws.services.dynamodbv2.local.embedded.DDBExceptionMappingInvocationHandler.handleDynamoDBLocalServiceException(DDBExceptionMappingInvocationHandler.java:76) 在 com.amazonaws.services.dynamodbv2.local.embedded.DDBExceptionMappingInvocationHandler.invoke(DDBException. .proxy.$Proxy70.putItem(Unknown Source) at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.doPutItem(DynamoDBMapper.java:1270) at com.amazonaws.services.dynamodbv2.datamodeling.DynamouteDBV2.datamodeling.DynamouteDBMapper$SaveObjectHandler.doPutItem(DynamoDBMapper.java:1270) DynamoDBMapper.java:879) 在 com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:1120) 在 com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save)(6:6DynamoDBMapper.save)在 com。amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:758)

我得到这个 dynamoDbMapper.save(order)

如果我删除排序/范围键,一切正常。

任何想法我做错了什么?错误是非常模棱两可的。

Eya*_* Ch 5

dynamodb 中的哈希/范围键不支持布尔字段。(仅支持字符串/数字/二进制)。

您需要将其转换为 STRING 或 NUMBER(或添加新列)。(如果这将是您的范围键,那么它可以是“真”/“假”或 0/1)。如果它是您的哈希键,那么它可能会更复杂。