でのソート・キーを使用しての「インデックスキーの型の不一致」私は、次のインデックスを持つテーブルがあります。DynamoDBの
- ユーザー
- ID(文字列、プライマリー)
- メール(文字列を、グローバルセカンダリ)
- expiresOn(日付(文字列)、グローバルセカンダリ)
- is_premium(ブール値)
私はis_premium
がexpiresOn
の範囲/ソート・キーも持っているしたいと思いますので、私は例えば今日の日付の前または上の有効期限が切れているすべてのアカウントを照会し、そのis_premium =真を持つことができます。
今日の前/次で期限切れになっているすべてのアカウントをis_premium = trueではなく照会しただけで、結果の90%がテーブルに表示されます。
しかし、私はis_premium
上で範囲クエリを設定しようとした場合、私はテーブルにレコードを保存しようとすると、私は次のエラーを取得する:
com.amazonaws.AmazonServiceException:インデックスキーの型の不一致を (サービス:NULL;ステータスコード:400;エラーコード:にValidationException; リクエストID:ヌル)
com.amazonaws.services.dynamodbv2.local.embedded.DDBExceptionMappingInvocationHandler.handleDynamoDBLocalServiceExceptionで(DDBExceptionMappingInvocationHandler.java:76) at com.amazonaws.services.dynamodbv2.local.embedded.DDBExceptionMappingInvocationHandler.invoke(DDBExceptionMappingInvocationHandler.java:58) (com.sun.proxy)$ Proxy70.putItem(不明なソース)at com.amazonaws.services.dynamodbv2 .datamodeling.DynamoDBMapper $ SaveObjectHandler.doPutItem(DynamoDBMapper.java:1270) でcom.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper $ 1.executeLowLevelRequest(DynamoDBMapper.java:879) com.amazonaws.services.dynamodbv2で。 datamodeling.DynamoDBMapper $ SaveObjectHandler.execute(DynamoDBMapper.java:1120) でcom.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:966) で10 com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:758)
私は、ソート/レンジキーを削除した場合、すべての作品dynamoDbMapper.save(order)
でこれを取得します。
私が間違っていることは何ですか?エラーは非常に曖昧です。
プレミアムにローカルのセカンダリインデックスを使用するなどの回避策がありますか? –
ブール値の代わりに0または1を使うのはどうですか? – birnbaum
@birnbaumそれはブール値を使用するだけでJavaの型安全性機能とうまく機能します。 –