createTable method
- required List<
AttributeDefinition> attributeDefinitions, - required List<
KeySchemaElement> keySchema, - required String tableName,
- BillingMode? billingMode,
- List<
GlobalSecondaryIndex> ? globalSecondaryIndexes, - List<
LocalSecondaryIndex> ? localSecondaryIndexes, - ProvisionedThroughput? provisionedThroughput,
- SSESpecification? sSESpecification,
- StreamSpecification? streamSpecification,
- List<
Tag> ? tags,
The CreateTable
operation adds a new table to your account.
In an AWS account, table names must be unique within each Region. That is,
you can have two tables with same name if you create the tables in
different Regions.
CreateTable
is an asynchronous operation. Upon receiving a
CreateTable
request, DynamoDB immediately returns a response
with a TableStatus
of CREATING
. After the table
is created, DynamoDB sets the TableStatus
to
ACTIVE
. You can perform read and write operations only on an
ACTIVE
table.
You can optionally define secondary indexes on the new table, as part of
the CreateTable
operation. If you want to create multiple
tables with secondary indexes on them, you must create the tables
sequentially. Only one table with secondary indexes can be in the
CREATING
state at any given time.
You can use the DescribeTable
action to check the table
status.
May throw ResourceInUseException. May throw LimitExceededException. May throw InternalServerError.
Parameter attributeDefinitions
:
An array of attributes that describe the key schema for the table and
indexes.
Parameter keySchema
:
Specifies the attributes that make up the primary key for a table or an
index. The attributes in KeySchema
must also be defined in
the AttributeDefinitions
array. For more information, see Data
Model in the Amazon DynamoDB Developer Guide.
Each KeySchemaElement
in the array is composed of:
-
AttributeName
- The name of this key attribute. -
KeyType
- The role that the key attribute will assume:-
HASH
- partition key -
RANGE
- sort key
-
Implementation
Future<CreateTableOutput> createTable({
required List<AttributeDefinition> attributeDefinitions,
required List<KeySchemaElement> keySchema,
required String tableName,
BillingMode? billingMode,
List<GlobalSecondaryIndex>? globalSecondaryIndexes,
List<LocalSecondaryIndex>? localSecondaryIndexes,
ProvisionedThroughput? provisionedThroughput,
SSESpecification? sSESpecification,
StreamSpecification? streamSpecification,
List<Tag>? tags,
}) async {
ArgumentError.checkNotNull(attributeDefinitions, 'attributeDefinitions');
ArgumentError.checkNotNull(keySchema, 'keySchema');
ArgumentError.checkNotNull(tableName, 'tableName');
_s.validateStringLength(
'tableName',
tableName,
3,
255,
isRequired: true,
);
final headers = <String, String>{
'Content-Type': 'application/x-amz-json-1.0',
'X-Amz-Target': 'DynamoDB_20120810.CreateTable'
};
final jsonResponse = await _protocol.send(
method: 'POST',
requestUri: '/',
exceptionFnMap: _exceptionFns,
// TODO queryParams
headers: headers,
payload: {
'AttributeDefinitions': attributeDefinitions,
'KeySchema': keySchema,
'TableName': tableName,
if (billingMode != null) 'BillingMode': billingMode.toValue(),
if (globalSecondaryIndexes != null)
'GlobalSecondaryIndexes': globalSecondaryIndexes,
if (localSecondaryIndexes != null)
'LocalSecondaryIndexes': localSecondaryIndexes,
if (provisionedThroughput != null)
'ProvisionedThroughput': provisionedThroughput,
if (sSESpecification != null) 'SSESpecification': sSESpecification,
if (streamSpecification != null)
'StreamSpecification': streamSpecification,
if (tags != null) 'Tags': tags,
},
);
return CreateTableOutput.fromJson(jsonResponse.body);
}