UpdateTable method
Written by
Updated at April 24, 2026
Updates global secondary indexes and change data capture settings for a specified table.
You can only perform one of the following operations per request:
- Add a global secondary index to the table.
- Delete a global secondary index from the table.
- Enable/disable change data capture.
Request
The request contains data in JSON format.
{
"AttributeDefinitions": [
{
"AttributeName": "string",
"AttributeType": "string"
}
],
"BillingMode": "string",
"GlobalSecondaryIndexUpdates": [
{
"Create": {
"IndexName": "string",
"KeySchema": [
{
"AttributeName": "string",
"KeyType": "string"
}
],
"Projection": {
"NonKeyAttributes": [ "string" ],
"ProjectionType": "string"
}
},
"Delete": {
"IndexName": "string"
}
}
],
"StreamSpecification": {
"StreamEnabled": boolean,
"StreamViewType": "string"
},
"TableName": "string"
}
Parameters
| Parameter | Description |
|---|---|
TableName |
Name of the table to update. It may contain a path in the hierarchical directory structure in path/to/table format.Type: String Length: 3 to 255 characters. Template: [a-zA-Z0-9_.-]+ Required: Yes |
AttributeDefinitions |
Array of attributes describing the key schema for the table and indexes. Type: Array of AttributeDefinition objects.Required: No |
GlobalSecondaryIndexUpdates |
Array of operations describing actions on global secondary indexes:
When creating an index, specify the following parameters:
Required: No When deleting a table, you can specify just IndexName. |
StreamSpecification |
Description of the change data feed settings for a table:
Type: Object of the StreamSpecification type.Required: No |
Response
If successful, HTTP code 200 is returned.
You will get data in JSON format.
{
"TableDescription": {
"ArchivalSummary": {
"ArchivalBackupArn": "string",
"ArchivalDateTime": number,
"ArchivalReason": "string"
},
"AttributeDefinitions": [
{
"AttributeName": "string",
"AttributeType": "string"
}
],
"BillingModeSummary": {
"BillingMode": "string",
"LastUpdateToPayPerRequestDateTime": number
},
"CreationDateTime": number,
"GlobalTableVersion": "string",
"ItemCount": number,
"KeySchema": [
{
"AttributeName": "string",
"KeyType": "string"
}
],
"LatestStreamArn": "string",
"LatestStreamLabel": "string",
"Replicas": [
{
"KMSMainKeyId": "string",
"RegionName": "string",
"ReplicaStatus": "string",
"ReplicaStatusDescription": "string",
"ReplicaStatusPercentProgress": "string"
}
],
"RestoreSummary": {
"RestoreDateTime": number,
"RestoreInProgress": boolean,
"SourceBackupArn": "string",
"SourceTableArn": "string"
},
"SSEDescription": {
"InaccessibleEncryptionDateTime": number,
"KMSMainKeyArn": "string",
"SSEType": "string",
"Status": "string"
},
"StreamSpecification": {
"StreamEnabled": boolean,
"StreamViewType": "string"
},
"TableArn": "string",
"TableId": "string",
"TableName": "string",
"TableSizeBytes": number,
"TableStatus": "string"
}
}
Parameters
| Parameter | Description |
|---|---|
TableDescription |
Properties of the created table. Type: TableDescription type object. |
Errors
| Parameter | Description |
|---|---|
InternalServerError |
An internal error occurred on the server side. HTTP status code: 500 |
LimitExceededException |
Table operations limit exceeded. You can concurrently perform up to 50 operations on tables, including CreateTable, UpdateTable, DeleteTable, UpdateTimeToLive, RestoreTableFromBackup, and RestoreTableToPointInTime.HTTP status code: 400 |
ResourceInUseException |
Attempting to create a table with the existing name. HTTP status code: 400 |
ResourceNotFoundException |
The specified table does not exist or is still being created using the createTable method. HTTP status code: 400 |
ValidationException |
Attempt to enable change data capture if it is already enabled. Attempt to disable change data capture if it is disabled. Attempt to add an index with a name already taken. |
There may be some common errors as well shared by all methods.