
# 接口兼容性介绍
本章节介绍GeminiDB兼容DynamoDB接口支持的接口详情以及注意事项。
#### 使用须知
- GeminiDB兼容DynamoDB接口支持使用DynamoDB的API对表进行增删改操作，控制台只支持读操作。
- 非DynamoDB的API创建的表，无法在GeminiDB兼容DynamoDB接口中使用。
- 当前版本不支持流量统计、流量限制、事务功能（TransactWriteItems， TransactGetItems）。
- 当前版本不支持按需备份接口：CreateBackup、DescribeBackup、 DeleteBackup、 ListBackups、 RestoreTableFromBackup。
- 在DynamoDB中，哈希键（或分区键）决定项目存储在DynamoDB内部存储中的位置。DynamoDB使用专有的哈希函数，GeminiDB兼容DynamoDB接口使用的是Murmur3算法，这种差异会导致Scan操作返回的数据顺序不同。
- 表/索引名称中不能包含的字符有："."。
- 由于编码方式不同，GeminiDB兼容DynamoDB接口表中的每行数据不会严格限制400KB大小。
- DDL接口均为同步接口。
- 通常情况下，索引同步可在1秒内完成；在极端场景下，延迟最多延长至1\~2分钟。
 
#### 支持的表达式
GeminiDB兼容DynamoDB接口中的ConditionExpression支持的函数语法如下：
```
function ::=
    attribute_exists (path)
    | attribute_not_exists (path)
    | attribute_type (path, type)
    | begins_with (path, substr)
    | contains (path, operand)
contains(path,operand)中operand只能是属性值（即传入的value占位符）。
```
GeminiDB兼容DynamoDB接口中的UpdateExpression语法如下：
```
update-expression ::=
     [ SET action [, action] ... ]
     [ REMOVE action [, action] ...]
     [ ADD action [, action] ... ]
     [ DELETE action [, action] ...]
 set-action ::=
     path =value
 value ::=
     operand
     | operand '+' operand
     | operand '-' operand
 operand ::=
     path | function
 function ::=
     if_not_exists (path, value)
     | list_append (list1, list2)
 remove-action ::=
     path
 add-action ::=
     path value
 delete-action ::=
     path value
SET path = operand语法中，不支持operand是path的场景。
SET path = operand1 '+'|'-' operand2语法中，operand1必须等于path，operand2必须是属性值
SET path = if_not_exists (path, value)语法中，两个path必须相等，且value只能是表达式属性值。
所有的value只能是占位符,比如':placeholder'。
```
#### 不兼容的接口列表
表1接口列表 
| 接口名称                        |
|:---|
| BatchExecuteStatement       |
| CreateBackup                |
| CreateGlobalTable           |
| DeleteBackup                |
| DescribeBackup              |
| DescribeEndpoints           |
| DescribeExport              |
| DescribeGlobalTable         |
| DescribeGlobalTableSettings |
| DescribeImport              |
| DescribeLimits              |
| ExecuteStatement            |
| ExecuteTransaction          |
| ExportTableToPointInTime    |
| ImportTable                 |
| ListBackups                 |
| ListExports                 |
| ListGlobalTables            |
| ListImports                 |
| ListTagsOfResource          |
| PutResourcePolicy           |
| RestoreTableFromBackup      |
| RestoreTableToPointInTime   |
| TagResource                 |
| TransactGetItems            |
| TransactWriteItems          |
| UpdateGlobalTable           |
| UpdateGlobalTableSettings   |
   
#### 兼容的接口列表
表2接口列表 
| 接口名称                                                            |
|:---|
| [CreateTable]         |
| [UpdateTable]        |
| [DescribeTable]        |
| [ListTables]          |
| [DeleteTable]          |
| [PutItem]              |
| [UpdateItem]         |
| [GetItem]               |
| [DeleteItem]           |
| [BatchWriteItem]      |
| [BatchGetItem]         |
| [Query]                |
| [Scan]                 |
| [UpdateTimeToLive]    |
| [DescribeTimeToLive] |
| [DescribeStream]     |
| [GetRecords]           |
| [GetShardIterator]    |
| [ListStreams]            |
   
 表3CreateTable接口兼容性介绍 
| 接口名称        | 参数                           || 是否必选 | 是否支持 | 备注                                     |
|:---|:---|---|:---|:---|:---|
| CreateTable | 请求参数 | AttributeDefinitions   | 是    | 是    | -                                      |
| CreateTable | 请求参数 | KeySchema              | 是    | 是    | -                                      |
| CreateTable | 请求参数 | TableName              | 是    | 是    | Table Name 字符长度3\~48，正则表达式（\[\\w-\]+）。 |
| CreateTable | 请求参数 | BillingMode            | 否    | 否    | 计费属性，暂不支持。                             |
| CreateTable | 请求参数 | GlobalSecondaryIndexes | 否    | 是    | -                                      |
| CreateTable | 请求参数 | LocalSecondaryIndexes  | 否    | 是    | -                                      |
| CreateTable | 请求参数 | ProvisionedThroughput  | 是    | 是    | -                                      |
| CreateTable | 请求参数 | SSESpecification       | 否    | 否    | 当前版本不支持，规划中。                           |
| CreateTable | 请求参数 | StreamSpecification    | 否    | 是    | -                                      |
| CreateTable | 请求参数 | Tags                   | 否    | 否    | 当前版本不支持，规划中。                           |
| CreateTable | 返回参数 | TableDescription       | -    | 是    | -                                      |
   
 表4UpdateTable接口兼容性介绍 
| 接口名称        | 参数                                  || 是否必选 | 是否支持 | 备注                         |
|:---|:---|---|:---|:---|:---|
| UpdateTable | 请求参数 | AttributeDefinitions          | 否    | 是    | -                          |
| UpdateTable | 请求参数 | BillingMode                   | 否    | 否    | 计费属性，不予支持。                 |
| UpdateTable | 请求参数 | GlobalSecondaryIndexesUpdates | 是    | 是    | 支持Create和Delete，不支持Update。 |
| UpdateTable | 请求参数 | ProvisionedThroughput         | 否    | 否    | 计费属性，不予支持。                 |
| UpdateTable | 请求参数 | ReplicaUpdates                | 否    | 否    | 默认强一致性。                    |
| UpdateTable | 请求参数 | SSESpecification              | 否    | 否    | 当前版本不支持，规划中。               |
| UpdateTable | 请求参数 | StreamSpecification           | 否    | 是    | -                          |
| UpdateTable | 请求参数 | TableName                     | 是    | 是    | -                          |
| UpdateTable | 返回参数 | TableDescription              | -    | 是    | -                          |
   
 表5DescribeTable接口兼容性介绍 
| 接口名称          | 参数              || 是否必选 | 是否支持 | 备注              |
|:---|:---|---|:---|:---|:---|
| DescribeTable | 请求参数 | TableName | 是    | 是    | -               |
| DescribeTable | 返回参数 | Table     | -    | 是    | 不支持itemCount字段。 |
   
 表6ListTables接口兼容性介绍 
| 接口名称       | 参数                            || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| ListTables | 请求参数 | ExclusiveStartTableName | 否    | 是    | -  |
| ListTables | 请求参数 | Limit                   | 否    | 是    | -  |
| ListTables | 返回参数 | LastEvaluatedTableName  | -    | 是    | -  |
| ListTables | 返回参数 | TableNames              | -    | 是    | -  |
   
 表7DeleteTable接口兼容性介绍 
| 接口名称        | 参数                     || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| DeleteTable | 请求参数 | TableName        | 是    | 是    | -  |
| DeleteTable | 返回参数 | TableDescription | -    | 是    | -  |
   
 表8PutItem接口兼容性介绍 
| 接口名称    | 参数                                || 是否必选 | 是否支持 | 备注                               |
|:---|:---|---|:---|:---|:---|
| PutItem | 请求参数 | Item                        | 是    | 是    | -                                |
| PutItem | 请求参数 | TableName                   | 是    | 是    | -                                |
| PutItem | 请求参数 | ConditionalOperator         | 否    | 否    | 遗弃参数，见ConditionExpression。       |
| PutItem | 请求参数 | ConditionExpression         | 否    | 是    | -                                |
| PutItem | 请求参数 | Expected                    | 否    | 否    | 遗弃参数，见该接口中ConditionExpression字段。 |
| PutItem | 请求参数 | ExpressionAttributeNames    | 否    | 是    | -                                |
| PutItem | 请求参数 | ExpressionAttributeValues   | 否    | 是    | -                                |
| PutItem | 请求参数 | ReturnConsumedCapacity      | 否    | 否    | 计费属性，暂不支持。                       |
| PutItem | 请求参数 | ReturnItemCollectionMetrics | 否    | 否    | 统计属性，暂不支持。                       |
| PutItem | 请求参数 | ReturnValues                | 否    | 是    | -                                |
| PutItem | 返回参数 | Attributes                  | -    | 是    | -                                |
| PutItem | 返回参数 | ConsumedCapacity            | -    | 否    | 计费属性，暂不支持。                       |
| PutItem | 返回参数 | ItemCollectionMetrics       | -    | 否    | 统计属性，暂不支持。                       |
   
 表9UpdateItem接口兼容性介绍 
| 接口名称       | 参数                                || 是否必选 | 是否支持 | 备注                            |
|:---|:---|---|:---|:---|:---|
| UpdateItem | 请求参数 | Key                         | 是    | 是    | -                             |
| UpdateItem | 请求参数 | TableName                   | 是    | 是    | -                             |
| UpdateItem | 请求参数 | AttributeUpdates            | 否    | 否    | 遗弃参数，见该接口中UpdateExpression字段。 |
| UpdateItem | 请求参数 | ConditionalOperator         | 否    | 否    | 遗弃参数，见该接口中UpdateExpression字段。 |
| UpdateItem | 请求参数 | ConditionExpression         | 否    | 是    | -                             |
| UpdateItem | 请求参数 | Expected                    | 否    | 否    | 遗弃参数，见该接口中UpdateExpression字段。 |
| UpdateItem | 请求参数 | ExpressionAttributeNames    | 否    | 是    | -                             |
| UpdateItem | 请求参数 | ExpressionAttributeValues   | 否    | 是    | -                             |
| UpdateItem | 请求参数 | ReturnConsumedCapacity      | 否    | 否    | 计费属性，暂不支持。                    |
| UpdateItem | 请求参数 | ReturnItemCollectionMetrics | 否    | 否    | 统计属性，暂不支持。                    |
| UpdateItem | 请求参数 | ReturnValues                | 否    | 是    | -                             |
| UpdateItem | 请求参数 | UpdateExpression            | 否    | 是    | -                             |
| UpdateItem | 返回参数 | Attributes                  | -    | 是    | -                             |
| UpdateItem | 返回参数 | ConsumedCapacity            | -    | 否    | 计费属性，暂不支持。                    |
| UpdateItem | 返回参数 | ItemCollectionMetrics       | -    | 否    | 统计属性，暂不支持。                    |
   
 表10GetItem接口兼容性介绍 
| 接口名称    | 参数                             || 是否必选 | 是否支持 | 备注                                |
|:---|:---|---|:---|:---|:---|
| GetItem | 请求参数 | Key                      | 是    | 是    | -                                 |
| GetItem | 请求参数 | TableName                | 是    | 是    | -                                 |
| GetItem | 请求参数 | AttributesToGet          | 否    | 否    | 遗弃参数，见该接口中ProjectionExpression字段。 |
| GetItem | 请求参数 | ConsistentRead           | 否    | 否    | 默认强一致性。                           |
| GetItem | 请求参数 | ExpressionAttributeNames | 否    | 是    | -                                 |
| GetItem | 请求参数 | ProjectionExpression     | 否    | 是    | -                                 |
| GetItem | 请求参数 | ReturnConsumedCapacity   | 否    | 否    | 计费属性，暂不支持。                        |
| GetItem | 返回参数 | ConsumedCapacity         | -    | 否    | 计费属性，暂不支持。                        |
| GetItem | 返回参数 | Item                     | -    | 是    | -                                 |
   
 表11DeleteItem接口兼容性介绍 
| 接口名称       | 参数                                || 是否必选 | 是否支持 | 备注                               |
|:---|:---|---|:---|:---|:---|
| DeleteItem | 请求参数 | Key                         | 是    | 是    | -                                |
| DeleteItem | 请求参数 | TableName                   | 是    | 是    | -                                |
| DeleteItem | 请求参数 | ConditionalOperator         | 否    | 否    | 遗弃参数，见该接口中ConditionExpression字段。 |
| DeleteItem | 请求参数 | ConditionExpression         | 否    | 是    | -                                |
| DeleteItem | 请求参数 | Expected                    | 否    | 否    | 遗弃参数，见该接口中ConditionExpression字段。 |
| DeleteItem | 请求参数 | ExpressionAttributeNames    | 否    | 是    | -                                |
| DeleteItem | 请求参数 | ExpressionAttributeValues   | 否    | 是    | -                                |
| DeleteItem | 请求参数 | ReturnConsumedCapacity      | 否    | 否    | 计费属性，暂不支持。                       |
| DeleteItem | 请求参数 | ReturnItemCollectionMetrics | 否    | 否    | 统计属性，暂不支持。                       |
| DeleteItem | 请求参数 | ReturnValues                | 否    | 是    | -                                |
| DeleteItem | 返回参数 | Attributes                  | -    | 是    | -                                |
| DeleteItem | 返回参数 | ConsumedCapacity            | -    | 否    | 计费属性，暂不支持。                       |
| DeleteItem | 返回参数 | ItemCollectionMetrics       | -    | 否    | 统计属性，暂不支持。                       |
   
 表12BatchWriteItem接口兼容性介绍 
| 接口名称           | 参数                                || 是否必选 | 是否支持 | 备注         |
|:---|:---|---|:---|:---|:---|
| BatchWriteItem | 请求参数 | RequestItems                | 是    | 是    | -          |
| BatchWriteItem | 请求参数 | ReturnConsumedCapacity      | 否    | 否    | 计费属性，暂不支持。 |
| BatchWriteItem | 请求参数 | ReturnItemCollectionMetrics | 否    | 否    | 统计属性，暂不支持。 |
| BatchWriteItem | 返回参数 | ConsumedCapacity            | -    | 否    | 计费属性，暂不支持。 |
| BatchWriteItem | 返回参数 | ItemCollectionMetrics       | -    | 否    | 统计属性，暂不支持。 |
| BatchWriteItem | 返回参数 | UnprocessedItems            | -    | 是    | -          |
   
 表13BatchGetItem接口兼容性介绍 
| 接口名称         | 参数                           || 是否必选 | 是否支持 | 备注         |
|:---|:---|---|:---|:---|:---|
| BatchGetItem | 请求参数 | RequestItems           | 是    | 是    | 无          |
| BatchGetItem | 请求参数 | ReturnConsumedCapacity | 否    | 否    | 计费属性，暂不支持。 |
| BatchGetItem | 返回参数 | ConsumedCapacity       | -    | 否    | 计费属性，暂不支持。 |
| BatchGetItem | 返回参数 | Responses              | -    | 是    | -          |
| BatchGetItem | 返回参数 | UnprocessedKeys        | -    | 是    | -          |
   
 表14Query接口兼容性介绍 
| 接口名称  | 参数                              || 是否必选 | 是否支持 | 备注                                  |
|:---|:---|---|:---|:---|:---|
| Query | 请求参数 | TableName                 | 是    | 是    | -                                   |
| Query | 请求参数 | AttributesToGet           | 否    | 否    | 遗弃参数，见该接口中ProjectionExpression字段。   |
| Query | 请求参数 | ConditionalOperator       | 否    | 否    | 遗弃参数，见该接口中ProjectionExpression字段。   |
| Query | 请求参数 | ConsistentRead            | 否    | 否    | 默认强一致性。                             |
| Query | 请求参数 | ExclusiveStartKey         | 否    | 是    | -                                   |
| Query | 请求参数 | ExpressionAttributeNames  | 否    | 是    | -                                   |
| Query | 请求参数 | ExpressionAttributeValues | 否    | 是    | -                                   |
| Query | 请求参数 | FilterExpression          | 否    | 是    | -                                   |
| Query | 请求参数 | IndexName                 | 否    | 是    | -                                   |
| Query | 请求参数 | KeyConditionExpression    | 否    | 是    | -                                   |
| Query | 请求参数 | KeyConditions             | 否    | 否    | 遗弃参数，见该接口中KeyConditionExpression字段。 |
| Query | 请求参数 | Limit                     | 否    | 是    | -                                   |
| Query | 请求参数 | ProjectionExpression      | 否    | 是    | -                                   |
| Query | 请求参数 | QueryFilter               | 否    | 否    | 遗弃参数，见该接口中FilterExpression字段。       |
| Query | 请求参数 | ReturnConsumedCapacity    | 否    | 否    | 计费属性，暂不支持。                          |
| Query | 请求参数 | ScanIndexForward          | 否    | 是    | -                                   |
| Query | 请求参数 | Select                    | 否    | 是    | 不支持Count。                           |
| Query | 返回参数 | ConsumedCapacity          | -    | 否    | 计费属性，暂不支持。                          |
| Query | 返回参数 | Count                     | -    | 是    | -                                   |
| Query | 返回参数 | Items                     | -    | 是    | -                                   |
| Query | 返回参数 | LastEvaluatedKey          | -    | 是    | -                                   |
| Query | 返回参数 | ScannedCount              | -    | 是    | -                                   |
   
 表15Scan接口兼容性介绍 
| 接口名称 | 参数                              || 是否必选 | 是否支持 | 备注                                |
|:---|:---|---|:---|:---|:---|
| Scan | 请求参数 | TableName                 | 是    | 是    | -                                 |
| Scan | 请求参数 | AttributesToGet           | 否    | 否    | 遗弃参数，见该接口中ProjectionExpression字段。 |
| Scan | 请求参数 | ConditionalOperator       | 否    | 否    | 遗弃参数，见该接口中ConditionExpression字段。  |
| Scan | 请求参数 | ConsistentRead            | 否    | 否    | 默认强一致性。                           |
| Scan | 请求参数 | ExclusiveStartKey         | 否    | 是    | -                                 |
| Scan | 请求参数 | ExpressionAttributeNames  | 否    | 是    | -                                 |
| Scan | 请求参数 | ExpressionAttributeValues | 否    | 是    | -                                 |
| Scan | 请求参数 | FilterExpression          | 否    | 是    | -                                 |
| Scan | 请求参数 | IndexName                 | 否    | 是    | -                                 |
| Scan | 请求参数 | Limit                     | 否    | 是    | -                                 |
| Scan | 请求参数 | ProjectionExpression      | 否    | 是    | -                                 |
| Scan | 请求参数 | ReturnConsumedCapacity    | 否    | 否    | 计费属性，暂不支持。                        |
| Scan | 请求参数 | ScanFilter                | 否    | 否    | 遗弃参数，该接口中FilterExpression字段。      |
| Scan | 请求参数 | Segment                   | 否    | 是    | -                                 |
| Scan | 请求参数 | Select                    | 否    | 是    | 不支持Count类型。                       |
| Scan | 请求参数 | TotalSegments             | 否    | 是    | -                                 |
| Scan | 返回参数 | ConsumedCapacity          | 否    | 否    | 计费属性，暂不支持。                        |
| Scan | 返回参数 | Count                     | -    | 是    | -                                 |
| Scan | 返回参数 | Items                     | -    | 是    | -                                 |
| Scan | 返回参数 | LastEvaluatedKey          | -    | 是    | -                                 |
| Scan | 返回参数 | ScannedCount              | -    | 是    | -                                 |
   
 表16UpdateTimeToLive接口兼容性介绍 
| 接口名称             | 参数                            || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| UpdateTimeToLive | 请求参数 | TableName               | 是    | 是    | -  |
| UpdateTimeToLive | 请求参数 | TimeToLiveSpecification | 是    | 是    | -  |
| UpdateTimeToLive | 返回参数 | TimeToLiveSpecification | -    | 是    | -  |
   
 表17DescribeTimeToLive接口兼容性介绍 
| 接口名称               | 参数                            || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| DescribeTimeToLive | 请求参数 | TableName               | 是    | 是    | -  |
| DescribeTimeToLive | 返回参数 | TimeToLiveSpecification | -    | 是    | -  |
   
 表18DescribeStream接口兼容性介绍 
| 接口名称           | 参数                          || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| DescribeStream | 请求参数 | StreamArn             | 是    | 是    | -  |
| DescribeStream | 请求参数 | ExclusiveStartShardId | 否    | 是    | -  |
| DescribeStream | 请求参数 | Limit                 | 否    | 是    | -  |
| DescribeStream | 请求参数 | ShardFilter           | 否    | 是    | -  |
| DescribeStream | 返回参数 | StreamDescription     | -    | 是    | -  |
   
 表19GetRecords接口兼容性介绍 
| 接口名称       | 参数                      || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| GetRecords | 请求参数 | ShardIterator     | 是    | 是    | -  |
| GetRecords | 请求参数 | Limit             | 否    | 是    | -  |
| GetRecords | 返回参数 | NextShardIterator | -    | 是    | -  |
| GetRecords | 返回参数 | Records           | -    | 是    | -  |
   
 表20GetShardIterator接口兼容性介绍 
| 接口名称             | 参数                      || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| GetShardIterator | 请求参数 | ShardId           | 是    | 是    | -  |
| GetShardIterator | 请求参数 | ShardIteratorType | 是    | 是    | -  |
| GetShardIterator | 请求参数 | StreamArn         | 是    | 是    | -  |
| GetShardIterator | 请求参数 | SequenceNumber    | 否    | 是    | -  |
| GetShardIterator | 返回参数 | ShardIterator     | -    | 是    | -  |
   
 表21ListStreams接口兼容性介绍 
| 接口名称        | 参数                            || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| ListStreams | 请求参数 | ExclusiveStartStreamArn | 否    | 是    | -  |
| ListStreams | 请求参数 | Limit                   | 否    | 是    | -  |
| ListStreams | 请求参数 | TableName               | 否    | 是    | -  |
| ListStreams | 返回参数 | Streams                 | -    | 是    | -  |
| ListStreams | 返回参数 | LastEvaluatedStreamArn  | -    | 是    | -  |
   
