如果需要,创建 DynamoDB 表 - AWS SDK for Java 2.x

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

如果需要,创建 DynamoDB 表

创建DynamoDbTable实例后,使用它在 DynamoDB 中一次性创建表。

创建表示例代码

以下示例基于Customer数据类创建 DynamoDB 表。

此示例创建了一个 DynamoDB 表,其Customer名称与类名相同,但表名可以是其他名称。无论您为表命名什么,都必须在其他应用程序中使用此名称才能使用该表。为了使用底层 DynamoDB 表,请在创建其他DynamoDbTable对象时为该table()方法提供此名称。

传递给该createTable方法的 Java lambda 参数允许您自定义表builder在此示例中,配置了预置吞吐量。如果您想在创建表时使用默认设置,请跳过生成器,如以下代码段所示。

customerDynamoDbTable.createTable();

使用默认设置时,未设置预置吞吐量的值。相反,该表的计费模式设置为按需

该示例DynamoDbWaiter在尝试打印出响应中收到的表名之前还使用了。创建表需要一些时间。因此,使用服务员意味着在使用表之前,您不必编写用于轮询 DynamoDB 服务的逻辑来查看表是否存在。

import com.example.dynamodb.Customer; import software.amazon.awssdk.core.internal.waiters.ResponseOrException; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable; import software.amazon.awssdk.enhanced.dynamodb.TableSchema; import software.amazon.awssdk.services.dynamodb.model.DescribeTableResponse; import software.amazon.awssdk.services.dynamodb.waiters.DynamoDbWaiter;

代码

public static void createCustomerTable(DynamoDbTable<Customer> customerDynamoDbTable, DynamoDbClient dynamoDbClient) { // Create the DynamoDB table by using the 'customerDynamoDbTable' DynamoDbTable instance. customerDynamoDbTable.createTable(builder -> builder .provisionedThroughput(b -> b .readCapacityUnits(10L) .writeCapacityUnits(10L) .build()) ); // The 'dynamoDbClient' instance that's passed to the builder for the DynamoDbWaiter is the same instance // that was passed to the builder of the DynamoDbEnhancedClient instance used to create the 'customerDynamoDbTable'. // This means that the same Region that was configured on the standard 'dynamoDbClient' instance is used for all service clients. try (DynamoDbWaiter waiter = DynamoDbWaiter.builder().client(dynamoDbClient).build()) { // DynamoDbWaiter is Autocloseable ResponseOrException<DescribeTableResponse> response = waiter .waitUntilTableExists(builder -> builder.tableName("Customer").build()) .matched(); DescribeTableResponse tableDescription = response.response().orElseThrow( () -> new RuntimeException("Customer table was not created.")); // The actual error can be inspected in response.exception() logger.info("Customer table was created."); } }
注意

当 DynamoDB 表是从数据类生成时,该表的属性名称以小写字母开头。如果您希望表的属性名称以大写字母开头,请使用@DynamoDbAttribute(NAME)注释并提供所需的名称作为参数。