DynamoDB operations
Every DynamoDB operation Overcast declares — 21 of 28 implemented — with status, behaviour notes and a link to the AWS API reference for each.
21 of 28 listed operations are implemented. Back to DynamoDB.
Summary
| Category | ✅ Supported | ❌ Unsupported |
|---|---|---|
| Table management | 7 | 1 |
| Item operations | 6 | |
| Query & scan | 2 | |
| Transactions | 2 | |
| Tags | 3 | |
| Streams interoperability | 1 | |
| Global tables | 6 |
Endpoints
Table management
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
CreateTable | ✅ Supported | Includes GSI/LSI definitions; AttributeDefinitions must name exactly the key attributes of the table and its indexes — an unused definition or an undefined key attribute is a ValidationException with AWS’s wording; an omitted BillingMode defaults to PROVISIONED, which requires ProvisionedThroughput on the table and on every GSI, while PAY_PER_REQUEST rejects it | docs |
DeleteTable | ✅ Supported | docs | |
DescribeTable | ✅ Supported | docs | |
ListTables | ✅ Supported | Region-scoped — lists only tables in the request’s region; Limit (default/max 100) and ExclusiveStartTableName honored; LastEvaluatedTableName echoed when more tables remain | docs |
UpdateTable | ✅ Supported | BillingMode, ProvisionedThroughput, GSI create/delete/update-throughput, AttributeDefinitions, StreamSpecification | docs |
DescribeTimeToLive | ✅ Supported | Reports all four TimeToLiveStatus values — a change is ENABLING/DISABLING until it settles; AttributeName is omitted only once the table has settled on DISABLED | docs |
UpdateTimeToLive | ✅ Supported | TTL-based item expiry, with the sweeper deleting expired items hourly once the status reaches ENABLED; the change is asynchronous as on AWS, and both members of TimeToLiveSpecification are required (AttributeName 1..255). A second UpdateTimeToLive inside the transition window, re-enabling an ENABLED table (renaming the attribute included) and disabling a DISABLED one are each a ValidationException, so the attribute name only changes by disabling first. Overcast settles in 30 seconds where AWS takes up to an hour | docs |
RestoreTableFromBackup | ❌ Unsupported | docs |
Item operations
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
PutItem | ✅ Supported | Includes ConditionExpression, ReturnValues (ALL_OLD); key attributes must be present, non-empty and carry their declared AttributeDefinitions type, while non-key attributes stay schemaless; an item over 400 KB by AWS’s size accounting is rejected; records AWS/DynamoDB CloudWatch metrics SuccessfulRequestLatency, ConsumedWriteCapacityUnits, UserErrors/SystemErrors; a reserved word used as a bare attribute name in an expression is rejected, as AWS does — reach it through ExpressionAttributeNames | docs |
GetItem | ✅ Supported | Includes ProjectionExpression; a Key must name exactly the key schema’s attributes with their declared types and no empty values; records SuccessfulRequestLatency, ConsumedReadCapacityUnits, UserErrors/SystemErrors; a reserved word used as a bare attribute name in an expression is rejected, as AWS does — reach it through ExpressionAttributeNames | docs |
UpdateItem | ✅ Supported | SET/REMOVE/ADD/DELETE clauses; all ReturnValues variants; upsert; a Key must name exactly the key schema’s attributes with their declared types and no empty values; an update whose result would exceed 400 KB is rejected; records SuccessfulRequestLatency, ConsumedWriteCapacityUnits, UserErrors/SystemErrors; a reserved word used as a bare attribute name in an expression is rejected, as AWS does — reach it through ExpressionAttributeNames | docs |
DeleteItem | ✅ Supported | ConditionExpression, ReturnValues (ALL_OLD); a Key must name exactly the key schema’s attributes with their declared types and no empty values; records SuccessfulRequestLatency, ConsumedWriteCapacityUnits, UserErrors/SystemErrors; a reserved word used as a bare attribute name in an expression is rejected, as AWS does — reach it through ExpressionAttributeNames | docs |
BatchGetItem | ✅ Supported | Up to 100 keys across tables — more is a ValidationException; every key is checked against its table’s key schema before any read; records SuccessfulRequestLatency/ConsumedReadCapacityUnits per table touched | docs |
BatchWriteItem | ✅ Supported | Up to 25 put/delete operations; every item and key is checked against its table’s key schema before any write is applied, and two operations on one item or an item over 400 KB reject the whole batch; records SuccessfulRequestLatency/ConsumedWriteCapacityUnits per table touched | docs |
Query & scan
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
Query | ✅ Supported | KeyConditionExpression (the key schema of the table or index queried, in either order: an equality on its partition key plus at most one condition on its sort key — =, <, <=, >, >=, BETWEEN or begins_with. Parentheses are accepted and change no meaning. A sort-key-only condition, a condition on a non-key attribute, and two conditions on one key are each rejected with AWS’s own message; values type-checked against the declared key types), FilterExpression, Limit (applied before FilterExpression per AWS semantics), ExclusiveStartKey/LastEvaluatedKey pagination, ScanIndexForward, Select=COUNT; ConsistentRead=true on a GSI is rejected as AWS does; records SuccessfulRequestLatency and ConsumedReadCapacityUnits (with GlobalSecondaryIndexName when IndexName names a real GSI); a reserved word used as a bare attribute name in an expression is rejected, as AWS does — reach it through ExpressionAttributeNames | docs |
Scan | ✅ Supported | FilterExpression, Limit (applied before FilterExpression per AWS semantics), ExclusiveStartKey/LastEvaluatedKey pagination, parallel scan (Segment/TotalSegments, with Segment >= TotalSegments rejected), Select=COUNT; ConsistentRead=true on a GSI is rejected as AWS does; records SuccessfulRequestLatency and ConsumedReadCapacityUnits (with GlobalSecondaryIndexName when IndexName names a real GSI); a reserved word used as a bare attribute name in an expression is rejected, as AWS does — reach it through ExpressionAttributeNames | docs |
Transactions
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
TransactGetItems | ✅ Supported | Up to 100 items across tables; every key is checked against its table’s key schema; records SuccessfulRequestLatency/ConsumedReadCapacityUnits per table (2x weighted, matching AWS’s transactional-read capacity accounting) | docs |
TransactWriteItems | ✅ Supported | Put, Update, Delete, ConditionCheck; all-or-nothing; a key-schema mismatch or two operations on one item is a ValidationException raised before anything is applied, not a cancellation reason, while a Put over 400 KB cancels the transaction with a ValidationError reason; records SuccessfulRequestLatency/ConsumedWriteCapacityUnits per table (2x weighted, matching AWS’s transactional-write capacity accounting) | docs |
Tags
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
TagResource | ✅ Supported | Merges tags; max 50; validates key/value lengths | docs |
ListTagsOfResource | ✅ Supported | Returns tags as Key/Value array | docs |
UntagResource | ✅ Supported | Removes specified keys; idempotent on missing keys | docs |
Streams interoperability
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
GetShardIterator | ✅ Supported | TRIM_HORIZON, LATEST, AT/AFTER_SEQUENCE_NUMBER | docs |
Global tables
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
CreateGlobalTable | ❌ Unsupported | Overcast emulates a single region | docs |
DescribeGlobalTable | ❌ Unsupported | Overcast emulates a single region | docs |
DescribeGlobalTableSettings | ❌ Unsupported | Overcast emulates a single region | docs |
ListGlobalTables | ❌ Unsupported | Overcast emulates a single region | docs |
UpdateGlobalTable | ❌ Unsupported | Overcast emulates a single region | docs |
UpdateGlobalTableSettings | ❌ Unsupported | Overcast emulates a single region | docs |
Related
- DynamoDB — quick start, what works, and the differences from AWS
- All service pages