Boto3 > DynamoDBクライアント > Service Resourceメソッド ドキュメント概要部分翻訳(4/5)


Boto3 > DynamoDB 各クラスのドキュメントについて、メソッドの概要部だけDeeplに突っ込んで翻訳しました。


[Clientクラス](https://qiita.com/Mohrey/items/6dca843de5e2b75a7f7b)
[Pagenatorクラス](https://qiita.com/Mohrey/items/d0bebf9e1b2289151df0)
[Waitersクラス](https://qiita.com/Mohrey/items/f1377d7bc59a65074b09)
ServiceResourceクラス（この記事）
[Tableクラス](https://qiita.com/Mohrey/items/cd32e836ff1c7e7aaba4)


各メソッドの説明文のみ翻訳しています。引数とレスポンスもリファレンスにはまとまっていますが、その部分は翻訳してません。あくまでざっと全体を見て何ができるか、必要なメソッドはどれかを拾うために使ってください。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#service-resource

___

## Service Resource

`class DynamoDB.ServiceResource`
Amazon DynamoDBを表すリソースです。

>`import boto3`
`dynamodb = boto3.resource('dynamodb')`

これらは、リソースの利用可能なアクションです。

* batch_get_item()
* batch_write_item()
* create_table()
* get_available_subresources()

以下は、リソースの利用可能なサブリソースです。
* Table()

以下は、リソースの利用可能なコレクションです。
* table

### Actions
アクションはリソースに対する操作を呼び出します。識別子や一部の属性から設定された引数の受け渡しを自動的に行うことができる。アクションの詳細については、[Resources Introduction Guide](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/resources.html#actions-intro)を参照してください。


#### `batch_get_item(**kwargs)`

BatchGetItem操作は、1つまたは複数のテーブルから1つまたは複数のアイテムの属性を返します。要求された項目は、主キーによって識別されます。
1 回の操作で最大 16 MB のデータを取得でき、その中には最大 100 個の項目が含まれることがあります。BatchGetItem は、応答サイズの制限を超えた場合、テーブルのプロビジョニングされたスループットを超えた場合、または内部処理の失敗が発生した場合に、部分的な結果を返します。部分的な結果が返された場合、この操作は UnprocessedKeys の値を返します。この値を使用して、取得する次の項目から操作を再試行することができます。

>Warning
100以上のアイテムを要求した場合、BatchGetItemは "Too many items requested for the BatchGetItem call "というメッセージとともにValidationExceptionを返します。

例えば、100件の検索を要求した場合、各項目のサイズが300KBであれば、システムは52件を返します（16MBの制限を超えないように）。また、適切なUnprocessedKeysの値も返されるので、次のページの結果を取得することができます。必要であれば、アプリケーションに独自のロジックを組み込んで、結果のページを1つのデータセットにまとめることができます。

リクエストに含まれるすべてのテーブルでプロビジョニングされたスループットが不十分なため、どの項目も処理できない場合は、BatchGetItem は ProvisionedThroughputExceededException を返します。少なくとも 1 つの項目の処理が成功した場合、BatchGetItem は正常に終了し、未読項目のキーは UnprocessedKeys に返されます。

>Warning
DynamoDBが未処理のアイテムを返した場合、それらのアイテムに対してバッチ処理を再試行する必要があります。ただし、指数関数バックオフアルゴリズムを使用することを強く推奨します。バッチ処理をすぐに再試行すると、個々のテーブルのスロットルにより、読み取りまたは書き込み要求が失敗する可能性があります。指数関数的バックオフを使用してバッチ操作を遅らせると、バッチ内の個々の要求が成功する可能性が非常に高くなります。

詳細については、Amazon DynamoDB開発者ガイドの[Batch Operations and Error Handling](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#BatchOperations)を参照してください。

デフォルトでは、BatchGetItem はリクエスト内のすべてのテーブルに対して最終的に一貫性のある読み取りを実行します。代わりに一貫性のある読み込みを行いたい場合は、 任意のテーブルあるいはすべてのテーブルで ConsistntRead を true に設定します。

レスポンスの待ち時間を最小限にするために、BatchGetItem は項目を並列に取得します。
アプリケーションを設計する際には、DynamoDBは特定の順序でアイテムを返さないことを念頭に置いてください。項目ごとの応答を解析するために、ProjectionExpressionパラメータにリクエストの項目の主キー値を含めます。
リクエストされたアイテムが存在しない場合、それは結果で返されません。存在しない項目に対する要求では、読み取りの種類に応じて最小限の読み取り容量単位が消費されます。詳細については、Amazon DynamoDB開発者ガイドの[Walking with Tables](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations)を参照してください。
See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BatchGetItem)


#### `batch_write_item(**kwargs)`
BatchWriteItem操作は、1つまたは複数のテーブルに複数の項目を置いたり、削除したりする。BatchWriteItemを1回呼び出すと、最大25個のアイテムのputまたはdelete操作からなる、最大16MBのデータをネットワーク経由で転送することができる。個々のアイテムは最大400KBまで保存できますが、API呼び出しのためにDynamoDBのJSON形式で送信されている間は、アイテムの表現が400KBより大きくなる可能性があることに注意することが重要です。この区別の詳細については、[命名規則とデータ型](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html)を参照してください。

>Note
BatchWriteItemでは、アイテムを更新することはできません。項目を更新するには、UpdateItemアクションを使用します。

BatchWriteItem で指定された個々の PutItem と DeleteItem 操作はアトミックであるが、BatchWriteItem 全体としてはアトミックではない。テーブルのプロビジョニングされたスループットを超えるか、内部処理の失敗が発生したため、要求された操作が失敗した場合、失敗した操作はUnprocessedItems応答パラメータで返される。要求を調査し、オプションで再送信することができます。通常、BatchWriteItemをループで呼び出す。各反復は、未処理の項目をチェックし、すべての項目が処理されるまで、それらの未処理項目で新しい BatchWriteItem 要求を送信します。
リクエスト内のすべてのテーブルでプロビジョニングされたスループットが不十分なため、どのアイテムも処理できない場合、BatchWriteItem は ProvisionedThroughputExceededException を返します。

>Warning
DynamoDBが未処理のアイテムを返した場合、それらのアイテムに対してバッチ処理を再試行する必要があります。ただし、指数関数的バックオフアルゴリズムを使用することを強く推奨します。バッチ処理をすぐに再試行すると、個々のテーブルのスロットルにより、読み取りまたは書き込みの基礎となる要求が失敗する可能性があります。指数関数的バックオフを使用してバッチ操作を遅らせると、バッチ内の個々の要求が成功する可能性が非常に高くなります。
詳細については、Amazon DynamoDB開発者ガイドの[Batch Operations and Error Handling](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ErrorHandling.html#Programming.Errors.BatchOperations)を参照してください。

BatchWriteItemを使うと、Amazon EMRなどの大量のデータの書き込みや削除、他のデータベースからDynamoDBへのデータコピーなどを効率的に行うことができます。これらの大規模な操作のパフォーマンスを向上させるために、BatchWriteItemは個々のPutItemやDeleteItemの呼び出しと同じように動作しません。例えば、個々のputやdeleteのリクエストに条件を指定することはできませんし、BatchWriteItemはレスポンスで削除されたアイテムを返しません。
並行処理をサポートするプログラミング言語を使用している場合、スレッドを使用して項目を並行して書き込むことができます。アプリケーションには、スレッドを管理するために必要なロジックが含まれている必要があります。スレッドをサポートしない言語では、指定した項目を一度に更新または削除する必要があります。どちらの場合でも、BatchWriteItem は指定された put および delete 操作を並列に実行するので、アプリケーションに複雑さをもたらすことなく、スレッドプールアプローチのパワーを得ることができます。
並列処理により待ち時間は短縮されますが、指定されたputとdeleteの各要求は、並列処理してもしなくても同じ数の書き込み容量ユニットを消費します。存在しないアイテムに対する削除操作では、1つの書き込み容量ユニットを消費します。
以下のいずれかに該当する場合、DynamoDBはバッチライト操作をすべて拒否します。

・BatchWriteItemリクエストで指定された1つ以上のテーブルが存在しない。
・リクエストのアイテムに指定されたプライマリーキー属性が、対応するテーブルのプライマリーキースキーマの属性と一致しない。
同じ BatchWriteItem リクエストで同じアイテムに対して複数の操作を実行しようとした。たとえば、同じ BatchWriteItem 要求で同じアイテムを配置および削除することはできません。
・あなたのリクエストには、同一のハッシュキーと範囲キーを持つアイテムが少なくとも2つ含まれています（これは本質的に2つのput操作です）。
・バッチ内の要求が25個以上ある。
・バッチ内の個々のアイテムが 400 KB を超えている。
・リクエストの合計サイズが 16 MB を超えている。
See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/BatchWriteItem)

#### `create_table(**kwargs)`
CreateTable操作は、アカウントに新しいテーブルを追加します。Amazon Web Services のアカウントでは、テーブル名は各リージョンで一意でなければなりません。つまり、異なるリージョンでテーブルを作成しても、同じ名前のテーブルを2つ持つことができます。

>CreateTableは非同期処理です。CreateTableのリクエストを受けると、DynamoDBは直ちにTableStatusがCREATINGであるレスポンスを返します。テーブルが作成されると、DynamoDBはTableStatusをACTIVEに設定します。ACTIVEテーブルに対してのみ、読み取りと書き込みの操作を行うことができます。
CreateTable操作の一部として、オプションで新しいテーブルにセカンダリインデックスを定義することができます。セカンダリインデックスを持つ複数のテーブルを作成する場合、テーブルを順番に作成する必要があります。セカンダリインデックスを持つテーブルは、常に 1 つだけ CREATING 状態にすることができます。

DescribeTable 操作を使用すると、テーブルの状態を確認することができます。
See also: [AWS API Documentation](https://docs.aws.amazon.com/goto/WebAPI/dynamodb-2012-08-10/CreateTable)



### サブリソース
サブリソースは、子リソースの新しいインスタンスを作成するメソッドです。このリソースの識別子は、子リソースに引き継がれます。サブリソースの詳細については、[Resources Introduction Guide](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/resources.html#subresources-intro)を参照してください。

`get_available_subresources()`
このリソースで利用可能なすべてのサブリソースの一覧を返します。