

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Sync
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-sync"></a>

`Sync` 請求映射文件可讓您從 DynamoDB 資料表擷取所有結果，然後只接收自上次查詢後變更的資料 （差異更新）。 `Sync` 請求只能對版本控制的 DynamoDB 資料來源提出。您可以指定下列項目：
+ 排除結果的篩選結果
+ 要傳回多少項目
+ 分頁字符
+ 上次起始 `Sync` 操作時

`Sync` 映射文件結構如下：

```
{
    "version" : "2018-05-29",
    "operation" : "Sync",
    "basePartitionKey": "Base Tables PartitionKey",
    "deltaIndexName": "delta-index-name",
    "limit" : 10,
    "nextToken" : "aPaginationToken",
    "lastSync" :  1550000000000,
    "filter" : {
        ...
    }
}
```

欄位定義如下：

## 同步欄位
<a name="sync-list"></a>

### 同步欄位清單
<a name="sync-list-col"></a>

** `version` **  
範本定義的版本。目前僅支援 `2018-05-29`。此值為必填。

** `operation` **  
要執行的 DynamoDB 操作。若要執行 `Sync` 操作，這必須設定為 `Sync`。此值為必填。

** `filter` **  
在傳回 DynamoDB 的結果之前，可用來篩選結果的篩選條件。如需篩選條件的詳細資訊，請參閱[篩選條件](aws-appsync-resolver-mapping-template-reference-dynamodb-filter.md)。此欄位為選用欄位。

** `limit` **  
單次可評估的項目數量上限。此欄位為選用欄位。如果省略此值，預設限制將設為 `100` 個項目。此欄位的最大值為 `1000` 個項目。

** `nextToken` **  
分頁字符將繼續先前的查詢。這會是從先前查詢所取得的。此欄位為選用欄位。

** `lastSync` **  
上次成功啟動 `Sync` 操作的時間 (以毫秒為單位)。如果指定此值，只會傳回 `lastSync` 之後變更的項目。這個欄位是選用的，而且只有在初始 `Sync` 操作擷取所有頁面之後才能填入。如果省略此值，將傳回 *Base* 資料表的結果，否則會傳回 *Delta* 資料表的結果。

**`basePartitionKey`**  
執行`Sync`操作時使用之 *Base* 資料表的分割區索引鍵。此欄位允許在資料表使用自訂分割區索引鍵時執行`Sync`操作。此為選用欄位。

**`deltaIndexName`**  
用於 `Sync`操作的索引。當資料表使用自訂分割區索引鍵時，需要此索引才能在整個差異存放區資料表上啟用`Sync`操作。`Sync` 操作將在 GSI 上執行 （在 `gsi_ds_pk`和 上建立`gsi_ds_sk`)。此欄位為選用欄位。

DynamoDB 同步傳回的結果會自動轉換為 GraphQL 和 JSON 基本類型，並可在映射內容中使用 (`$context.result`)。

如需 DynamoDB 類型轉換的詳細資訊，請參閱[類型系統 （回應映射）](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)。

如需回應映射範本的詳細資訊，請參閱[解析程式映射範本概觀](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview)。

結果的結構如下：

```
{
    items = [ ... ],
    nextToken = "a pagination token",
    scannedCount = 10,
    startedAt = 1550000000000
}
```

欄位定義如下：

** `items` **  
包含同步傳回項目的清單。

** `nextToken` **  
如果結果可能更多， `nextToken` 包含一個分頁字符，您可以在另一個請求中使用。 AWS AppSync 會加密和混淆從 DynamoDB 傳回的分頁字符。這樣可確保資料表的資料不會不慎洩漏給發起人。此外，這些分頁字符在不同解析程式之間無法使用。

** `scannedCount` **  
在套用篩選條件表達式 （如果有） 之前，DynamoDB 擷取的項目數量。

** `startedAt` **  
開始同步操作時，可以在本機存放並在另一個請求中做為 `lastSync` 引數的時間 (以 epoch 毫秒為單位)。如果請求中包含分頁字符，則該值將與請求針對第一頁結果傳回的值相同。

## 範例
<a name="id14"></a>

下列範例是 GraphQL 查詢的映射範本：`syncPosts(nextToken: String, lastSync: AWSTimestamp)`。

在此範例中，如果省略 `lastSync`，則會傳回 Base 資料表中的所有項目。如果提供 `lastSync`，只會傳回自 `lastSync` 變更之 Delta Sync 資料表中的項目。

```
{
    "version" : "2018-05-29",
    "operation" : "Sync",
    "limit": 100,
    "nextToken": $util.toJson($util.defaultIfNull($ctx.args.nextToken, null)),
    "lastSync": $util.toJson($util.defaultIfNull($ctx.args.lastSync, null))
}
```