

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 視需要建立 DynamoDB 資料表
<a name="ddb-en-client-gs-ddbtable"></a>

建立`DynamoDbTable`執行個體之後，請使用它在 DynamoDB 中執行資料表的*一次性*建立。

## 建立資料表範例程式碼
<a name="ddb-en-client-gs-ddbtable-createex"></a>

下列範例會根據`Customer`資料類別建立 DynamoDB 資料表。

此範例會使用與類別名稱`Customer`相同的名稱建立 DynamoDB 資料表，但資料表名稱可以是其他名稱。無論您如何命名資料表，您都必須在其他應用程式中使用此名稱，才能使用資料表。每當您建立另一個`DynamoDbTable`物件時，請將此名稱提供給 `table()`方法，以便使用基礎 DynamoDB 資料表。

Java lambda 參數 `builder`傳遞至 `createTable`方法可讓您[自訂資料表](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/enhanced/dynamodb/model/CreateTableEnhancedRequest.Builder.html)。在此範例中，已設定[佈建輸送量](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.ProvisionedThroughput.Manual)。如果您想要在建立資料表時使用預設設定，請略過建置器，如下列程式碼片段所示。

```
customerTable.createTable();
```

使用預設設定時，不會設定佈建輸送量的值。而是將資料表的計費模式設定為[隨需](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.OnDemand)。

此範例也會在嘗試列印回應中收到的資料表名稱`[DynamoDbWaiter](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/dynamodb/waiters/DynamoDbWaiter.html)`之前，使用 。建立資料表需要一些時間。因此，使用等待程式表示您不需要撰寫輪詢 DynamoDB 服務的邏輯，即可在使用資料表之前查看資料表是否存在。

### 匯入
<a name="ddb-en-client-gs-ddbtable-imports"></a>

```
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.enhanced.dynamodb.model.CreateTableEnhancedRequest;
import software.amazon.awssdk.services.dynamodb.model.DescribeTableResponse;
import software.amazon.awssdk.services.dynamodb.waiters.DynamoDbWaiter;
```

### Code
<a name="ddb-en-client-gs-ddbtable-code"></a>

```
 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)`註釋](ddb-en-client-adv-features-inex-attr.md)，並提供您想要做為參數的名稱。