1. ホーム
  2. データベース
  3. マイサク

[解決済み】DynamoDB : 提供されたキー要素がスキーマと一致しません。

2021-12-28 20:19:15

質問

テーブルユーザー id (HashKey), name, email

ハッシュキー以外のフィールドに依存する項目を取得したい

例えば、emailが'[email protected]'であるユーザーを取得したい。

botoで試しています。

user = users.get_item(email='[email protected]')

しかし、私はエラーが表示されます。

'The provided key element does not match the schema'

解決方法は?

ハッシュキー以外のフィールドを問い合わせるには、Global Secondary Index (GSI)を使用する必要があります。以下を見てください。 このAWSの記事 をご覧ください。

2015年2月にUPDATEしました。 既存のテーブルにGSIを追加することが可能になりました。詳細は アマゾンドキュメント をご覧ください。

悲しいかな 既存のDynamoDBテーブルにGSIを追加することはできません。 ので、本当にクエリを実行する必要がある場合は、新しいテーブルを作成してデータを移植する必要があります。

からの DynamoDB FAQ :

<ブロッククオート

Q: DynamoDBテーブルのグローバルセカンダリインデックスを作成するにはどうすればよいですか?

テーブルに関連するすべての GSI は、テーブル作成時に指定する必要があります。現時点では、テーブルを作成した後にGSIを追加することはできません。テーブルとそのインデックスの作成に関する詳細な手順については、以下を参照してください。 こちら . を作成することができます。 5つのグローバルセカンダリーインデックス テーブルごとに

あなたがあなたのデータを移植したくない場合は、メインデータテーブルへのルックアップとして使用するために、ハッシュキーと親レコードのハッシュとして電子メールを持つ第2のDynamoDBテーブルを作成することを考えることができますが、あなたが想像できるようにこれは必ずしも最適なソリューションではなく、それはあなたのマスターテーブルと同期してそれを保つために独自の頭痛を持って来るようにします。