
# GeminiDB Serverless使用与约束
本章节介绍GeminiDB Serverless使用与约束。
#### 使用须知
- GeminiDB Serverless兼容DynamoDB接口，支持使用GeminiDB兼容DynamoDB接口的API对表进行增删改操作，控制台只支持DDL操作。
- 当前版本不支持事务功能（TransactWriteItems， TransactGetItems）。
- 当前版本不支持按需备份接口：CreateBackup、DescribeBackup、 DeleteBackup、 ListBackups、 RestoreTableFromBackup。
- 表/索引名称中不能包含的字符有："."。
- DDL接口均为同步接口。
 
#### 支持的表达式
GeminiDB兼容DynamoDB接口中的ConditionExpression、FilterExpression支持的函数语法如下：
```
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接口列表 
| 接口名称                                                             |
|:---|
| [CreateTable]         |
| [UpdateTable]        |
| [DescribeTable]        |
| [ListTables]          |
| [DeleteTable]          |
| [PutItem]              |
| [UpdateItem]         |
| [GetItem]               |
| [DeleteItem]           |
| [BatchWriteItem]      |
| [BatchGetItem]         |
| [Query]                |
| [Scan]                 |
| [UpdateTimeToLive]    |
| [DescribeTimeToLive] |
   
 表2CreateTable接口兼容性介绍 
| 接口名称        | 参数                           || 是否必选 | 是否支持 | 备注                                     |
|:---|:---|---|:---|:---|:---|
| 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       | -    | 是    | -                                      |
   
 表3UpdateTable接口兼容性介绍 
| 接口名称        | 参数                                  || 是否必选 | 是否支持 | 备注      |
|:---|:---|---|:---|:---|:---|
| UpdateTable | 请求参数 | AttributeDefinitions          | 否    | 是    | -       |
| UpdateTable | 请求参数 | BillingMode                   | 否    | 是    | -       |
| UpdateTable | 请求参数 | GlobalSecondaryIndexesUpdates | 是    | 是    | -       |
| UpdateTable | 请求参数 | ProvisionedThroughput         | 否    | 否    | -       |
| UpdateTable | 请求参数 | ReplicaUpdates                | 否    | 否    | 默认强一致性。 |
| UpdateTable | 请求参数 | SSESpecification              | 否    | 否    | -       |
| UpdateTable | 请求参数 | StreamSpecification           | 否    | 是    | -       |
| UpdateTable | 请求参数 | TableName                     | 是    | 是    | -       |
| UpdateTable | 返回参数 | TableDescription              | -    | 是    | -       |
   
 表4DescribeTable接口兼容性介绍 
| 接口名称          | 参数              || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| DescribeTable | 请求参数 | TableName | 是    | 是    | -  |
| DescribeTable | 返回参数 | Table     | -    | 是    | -  |
   
 表5ListTables接口兼容性介绍 
| 接口名称       | 参数                            || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| ListTables | 请求参数 | ExclusiveStartTableName | 否    | 是    | -  |
| ListTables | 请求参数 | Limit                   | 否    | 是    | -  |
| ListTables | 返回参数 | LastEvaluatedTableName  | -    | 是    | -  |
| ListTables | 返回参数 | TableNames              | -    | 是    | -  |
   
 表6DeleteTable接口兼容性介绍 
| 接口名称        | 参数                     || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| DeleteTable | 请求参数 | TableName        | 是    | 是    | -  |
| DeleteTable | 返回参数 | TableDescription | -    | 是    | -  |
   
 表7PutItem接口兼容性介绍 
| 接口名称    | 参数                                || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| PutItem | 请求参数 | Item                        | 是    | 是    | -  |
| PutItem | 请求参数 | TableName                   | 是    | 是    | -  |
| PutItem | 请求参数 | ConditionalOperator         | 否    | 是    | -  |
| PutItem | 请求参数 | ConditionExpression         | 否    | 是    | -  |
| PutItem | 请求参数 | Expected                    | 否    | 是    | -  |
| PutItem | 请求参数 | ExpressionAttributeNames    | 否    | 是    | -  |
| PutItem | 请求参数 | ExpressionAttributeValues   | 否    | 是    | -  |
| PutItem | 请求参数 | ReturnConsumedCapacity      | 否    | 是    | -  |
| PutItem | 请求参数 | ReturnItemCollectionMetrics | 否    | 是    | -  |
| PutItem | 请求参数 | ReturnValues                | 否    | 是    | -  |
| PutItem | 返回参数 | Attributes                  | -    | 是    | -  |
| PutItem | 返回参数 | ConsumedCapacity            | -    | 是    | -  |
| PutItem | 返回参数 | ItemCollectionMetrics       | -    | 否    | -  |
   
 表8UpdateItem接口兼容性介绍 
| 接口名称       | 参数                                || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| UpdateItem | 请求参数 | Key                         | 是    | 是    | -  |
| UpdateItem | 请求参数 | TableName                   | 是    | 是    | -  |
| UpdateItem | 请求参数 | AttributeUpdates            | 否    | 是    | -  |
| UpdateItem | 请求参数 | ConditionalOperator         | 否    | 是    | -  |
| UpdateItem | 请求参数 | ConditionExpression         | 否    | 是    | -  |
| UpdateItem | 请求参数 | Expected                    | 否    | 是    | -  |
| UpdateItem | 请求参数 | ExpressionAttributeNames    | 否    | 是    | -  |
| UpdateItem | 请求参数 | ExpressionAttributeValues   | 否    | 是    | -  |
| UpdateItem | 请求参数 | ReturnConsumedCapacity      | 否    | 是    | -  |
| UpdateItem | 请求参数 | ReturnItemCollectionMetrics | 否    | 否    | -  |
| UpdateItem | 请求参数 | ReturnValues                | 否    | 是    | -  |
| UpdateItem | 请求参数 | UpdateExpression            | 否    | 是    | -  |
| UpdateItem | 返回参数 | Attributes                  | -    | 是    | -  |
| UpdateItem | 返回参数 | ConsumedCapacity            | -    | 是    | -  |
| UpdateItem | 返回参数 | ItemCollectionMetrics       | -    | 否    | -  |
   
 表9GetItem接口兼容性介绍 
| 接口名称    | 参数                             || 是否必选 | 是否支持 | 备注      |
|:---|:---|---|:---|:---|:---|
| GetItem | 请求参数 | Key                      | 是    | 是    | -       |
| GetItem | 请求参数 | TableName                | 是    | 是    | -       |
| GetItem | 请求参数 | AttributesToGet          | 否    | 是    | -       |
| GetItem | 请求参数 | ConsistentRead           | 否    | 否    | 默认强一致性。 |
| GetItem | 请求参数 | ExpressionAttributeNames | 否    | 是    | -       |
| GetItem | 请求参数 | ProjectionExpression     | 否    | 是    | -       |
| GetItem | 请求参数 | ReturnConsumedCapacity   | 否    | 是    | -       |
| GetItem | 返回参数 | ConsumedCapacity         | -    | 是    | -       |
| GetItem | 返回参数 | Item                     | -    | 是    | -       |
   
 表10DeleteItem接口兼容性介绍 
| 接口名称       | 参数                                || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| DeleteItem | 请求参数 | Key                         | 是    | 是    | -  |
| DeleteItem | 请求参数 | TableName                   | 是    | 是    | -  |
| DeleteItem | 请求参数 | ConditionalOperator         | 否    | 是    | -  |
| DeleteItem | 请求参数 | ConditionExpression         | 否    | 是    | -  |
| DeleteItem | 请求参数 | Expected                    | 否    | 是    | -  |
| DeleteItem | 请求参数 | ExpressionAttributeNames    | 否    | 是    | -  |
| DeleteItem | 请求参数 | ExpressionAttributeValues   | 否    | 是    | -  |
| DeleteItem | 请求参数 | ReturnConsumedCapacity      | 否    | 是    | -  |
| DeleteItem | 请求参数 | ReturnItemCollectionMetrics | 否    | 否    | -  |
| DeleteItem | 请求参数 | ReturnValues                | 否    | 是    | -  |
| DeleteItem | 返回参数 | Attributes                  | -    | 是    | -  |
| DeleteItem | 返回参数 | ConsumedCapacity            | -    | 是    | -  |
| DeleteItem | 返回参数 | ItemCollectionMetrics       | -    | 否    | -  |
   
 表11BatchWriteItem接口兼容性介绍 
| 接口名称           | 参数                                || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| BatchWriteItem | 请求参数 | RequestItems                | 是    | 是    | -  |
| BatchWriteItem | 请求参数 | ReturnConsumedCapacity      | 否    | 是    | -  |
| BatchWriteItem | 请求参数 | ReturnItemCollectionMetrics | 否    | 否    | -  |
| BatchWriteItem | 返回参数 | ConsumedCapacity            | -    | 是    | -  |
| BatchWriteItem | 返回参数 | ItemCollectionMetrics       | -    | 否    | -  |
| BatchWriteItem | 返回参数 | UnprocessedItems            | -    | 是    | -  |
   
 表12BatchGetItem接口兼容性介绍 
| 接口名称         | 参数                           || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| BatchGetItem | 请求参数 | RequestItems           | 是    | 是    | 无  |
| BatchGetItem | 请求参数 | ReturnConsumedCapacity | 否    | 是    | -  |
| BatchGetItem | 返回参数 | ConsumedCapacity       | -    | 是    | -  |
| BatchGetItem | 返回参数 | Responses              | -    | 是    | -  |
| BatchGetItem | 返回参数 | UnprocessedKeys        | -    | 是    | -  |
   
 表13Query接口兼容性介绍 
| 接口名称  | 参数                              || 是否必选 | 是否支持 | 备注      |
|:---|:---|---|:---|:---|:---|
| Query | 请求参数 | TableName                 | 是    | 是    | -       |
| Query | 请求参数 | AttributesToGet           | 否    | 是    | -       |
| Query | 请求参数 | ConditionalOperator       | 否    | 是    | -       |
| Query | 请求参数 | ConsistentRead            | 否    | 否    | 默认强一致性。 |
| Query | 请求参数 | ExclusiveStartKey         | 否    | 是    | -       |
| Query | 请求参数 | ExpressionAttributeNames  | 否    | 是    | -       |
| Query | 请求参数 | ExpressionAttributeValues | 否    | 是    | -       |
| Query | 请求参数 | FilterExpression          | 否    | 是    | -       |
| Query | 请求参数 | IndexName                 | 否    | 是    | -       |
| Query | 请求参数 | KeyConditionExpression    | 否    | 是    | -       |
| Query | 请求参数 | KeyConditions             | 否    | 否    | -       |
| Query | 请求参数 | Limit                     | 否    | 是    | -       |
| Query | 请求参数 | ProjectionExpression      | 否    | 是    | -       |
| Query | 请求参数 | QueryFilter               | 否    | 是    | -       |
| Query | 请求参数 | ReturnConsumedCapacity    | 否    | 是    | -       |
| Query | 请求参数 | ScanIndexForward          | 否    | 是    | -       |
| Query | 请求参数 | Select                    | 否    | 是    | -       |
| Query | 返回参数 | ConsumedCapacity          | -    | 是    | -       |
| Query | 返回参数 | Count                     | -    | 是    | -       |
| Query | 返回参数 | Items                     | -    | 是    | -       |
| Query | 返回参数 | LastEvaluatedKey          | -    | 是    | -       |
| Query | 返回参数 | ScannedCount              | -    | 是    | -       |
   
 表14Scan接口兼容性介绍 
| 接口名称 | 参数                              || 是否必选 | 是否支持 | 备注      |
|:---|:---|---|:---|:---|:---|
| Scan | 请求参数 | TableName                 | 是    | 是    | -       |
| Scan | 请求参数 | AttributesToGet           | 否    | 是    | -       |
| Scan | 请求参数 | ConditionalOperator       | 否    | 是    | -       |
| Scan | 请求参数 | ConsistentRead            | 否    | 否    | 默认强一致性。 |
| Scan | 请求参数 | ExclusiveStartKey         | 否    | 是    | -       |
| Scan | 请求参数 | ExpressionAttributeNames  | 否    | 是    | -       |
| Scan | 请求参数 | ExpressionAttributeValues | 否    | 是    | -       |
| Scan | 请求参数 | FilterExpression          | 否    | 是    | -       |
| Scan | 请求参数 | IndexName                 | 否    | 是    | -       |
| Scan | 请求参数 | Limit                     | 否    | 是    | -       |
| Scan | 请求参数 | ProjectionExpression      | 否    | 是    | -       |
| Scan | 请求参数 | ReturnConsumedCapacity    | 否    | 是    | -       |
| Scan | 请求参数 | ScanFilter                | 否    | 是    | -       |
| Scan | 请求参数 | Segment                   | 否    | 是    | -       |
| Scan | 请求参数 | Select                    | 否    | 是    | -       |
| Scan | 请求参数 | TotalSegments             | 否    | 是    | -       |
| Scan | 返回参数 | ConsumedCapacity          | 否    | 是    | -       |
| Scan | 返回参数 | Count                     | -    | 是    | -       |
| Scan | 返回参数 | Items                     | -    | 是    | -       |
| Scan | 返回参数 | LastEvaluatedKey          | -    | 是    | -       |
| Scan | 返回参数 | ScannedCount              | -    | 是    | -       |
   
 表15UpdateTimeToLive接口兼容性介绍 
| 接口名称             | 参数                            || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| UpdateTimeToLive | 请求参数 | TableName               | 是    | 是    | -  |
| UpdateTimeToLive | 请求参数 | TimeToLiveSpecification | 是    | 是    | -  |
| UpdateTimeToLive | 返回参数 | TimeToLiveSpecification | -    | 是    | -  |
   
 表16DescribeTimeToLive接口兼容性介绍 
| 接口名称               | 参数                            || 是否必选 | 是否支持 | 备注 |
|:---|:---|---|:---|:---|:---|
| DescribeTimeToLive | 请求参数 | TableName               | 是    | 是    | -  |
| DescribeTimeToLive | 返回参数 | TimeToLiveSpecification | -    | 是    | -  |
   
