本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Sync
Sync
請求映射文件可讓您從 DynamoDB 資料表擷取所有結果,然後僅接收自上次查詢 (delta 更新) 以來變更的資料。 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
操作時使用的基礎資料表的分割區索引鍵。此欄位允許在資料表使用自訂分割區金鑰時執行Sync
操作。此為選用欄位。 deltaIndexName
-
用於
Sync
操作的索引。當資料表使用自訂分割區金鑰時,需要此索引才能在整個 Delta Store 資料表上啟用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
包含分頁權杖,您可以在另一個 request. AWS AppSync encrypts 中使用,並混淆從 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)) }