本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Sync
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" : { ... } }
欄位定義如下:
同步欄位
-
version
-
範本定義的版本。目前僅支援
2018-05-29
。此值為必填。 -
operation
-
要執行 DynamoDB 支援作業。若要執行
Sync
操作,這必須設定為Sync
。此值為必填。 -
filter
-
可用於在傳回 DynamoDB 結果之前篩選結果的篩選器。如需篩選條件的詳細資訊,請參閱篩選條件。此欄位為選用欄位。
-
limit
-
單次可評估的項目數量上限。此欄位為選用欄位。如果省略此值,預設限制將設為
100
個項目。此欄位的最大值為1000
個項目。 -
nextToken
-
分頁字符將繼續先前的查詢。這會是從先前查詢所取得的。此欄位為選用欄位。
-
lastSync
-
上次成功啟動
Sync
操作的時間 (以毫秒為單位)。如果指定此值,只會傳回lastSync
之後變更的項目。這個欄位是選用的,而且只有在初始Sync
操作擷取所有頁面之後才能填入。如果省略此值,將傳回 Base 資料表的結果,否則會傳回 Delta 資料表的結果。 basePartitionKey
-
執行
Sync
作業時使用的 Base 資料表的資料分割索引鍵。此欄位允許在Sync
資料表使用自訂分割區索引鍵時執行作業。此為選用欄位。 deltaIndexName
-
用於
Sync
作業的索引。當資料表使用自訂分割區索引鍵時,需要此索引才能在整個 delta 儲存資料表上啟用Sync
作業。作Sync
業將在 GSI (建立於gsi_ds_pk
和gsi_ds_sk
) 上執行。此欄位為選用欄位。
DynamoDB 同步傳回的結果會自動轉換為 GraphQL 和JSON原始類型,並可在對應內容 () 中使用。$context.result
如需 DynamoDB 類型轉換的詳細資訊,請參閱類型系統 (回應對映)。
如需有關回應對映範本的詳細資訊,請參閱解析器對映範本概觀。
結果的結構如下:
{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10, startedAt = 1550000000000 }
欄位定義如下:
-
items
-
包含同步傳回項目的清單。
-
nextToken
-
如果可能有更多結果,則
nextToken
包含您可以在另一個請求中使用的分頁令牌。 AWS AppSync 加密和混淆從 DynamoDB 傳回的分頁權杖。這樣可確保資料表的資料不會不慎洩漏給發起人。此外,這些分頁字符在不同解析程式之間無法使用。 -
scannedCount
-
DynamoDB 在套用篩選器運算式 (如果存在) 之前擷取的項目數。
-
startedAt
-
開始同步操作時,可以在本機存放並在另一個請求中做為
lastSync
引數的時間 (以 epoch 毫秒為單位)。如果請求中包含分頁字符,則該值將與請求針對第一頁結果傳回的值相同。
範例
下列範例是 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)) }