如果需要,创建 DynamoDB 表 - Amazon SDK for Java 2.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

如果需要,创建 DynamoDB 表

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

创建表示例代码

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

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

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

customerTable.createTable();

使用默认设置时,不会设置预置吞吐量的值。取而代之的是,表的计费模式将设置为按需

该示例还在尝试打印出响应中收到的表名称之前使用了 DynamoDbWaiter。创建表需要一些时间。因此,使用 waiter 意味着您不必编写在使用表之前轮询 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> customerTable, DynamoDbClient standardClient) { // Create the DynamoDB table using the 'customerTable' DynamoDbTable instance. customerTable.createTable(builder -> builder .provisionedThroughput(b -> b .readCapacityUnits(10L) .writeCapacityUnits(10L) .build()) ); // The DynamoDbClient instance (named 'standardClient') passed to the builder for the DynamoDbWaiter is the same instance // that was passed to the builder of the DynamoDbEnhancedClient instance that we created previously. // By using the same instance, it ensures that the same Region that was configured on the standard DynamoDbClient // instance is used for other service clients that accept a DynamoDbClient during construction. try (DynamoDbWaiter waiter = DynamoDbWaiter.builder().client(standardClient).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) 注释并提供所需的名称作为参数。