AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
當我搭配 AWS AppSync 使用 DynamoDB 時,為什麼我的清單查詢會傳回錯誤的項目數量?
當我將 Amazon DynamoDB 與 AWS AppSync 搭配使用時,我的清單查詢傳回錯誤的項目數量。如何解決此錯誤?
簡短描述
當您搭配 AWS AppSync 和 Amazon DynamoDB 使用清單查詢時,DynamoDB 會在資料表上執行掃描作業,並傳回特定數量的評估項目。如果您在請求上提供 FilterExpression 作業,則 DynamoDB 只會將 FilterExpression 套用至這些評估的項目。
掃描檢查的項目數取決於您套用至查詢的限制變數。如果未套用任何限制,DynamoDB 會使用請求對應範本中設定的預設限制。掃描只會傳回已評估並符合篩選運算式的項目。若要傳回預期的項目數,您必須調整限制變數。
您可以增加對應範本的預設限制,或將限制變數新增至清單 GraphQL 查詢。但是,您可以評估的最大項目數為 1 MB。如果掃描作業超過 1 MB 的資料,則可以使用分頁來取得其餘資料。為了協助您查詢包含數千個項目的資料庫,您可以索引資料,以便依公用欄位篩選結果。
解決方案
增加預設限制
在下列範例中,針對 AWS Amplify 產生的 API 的對應範本,預設限制為 100:
#set( $limit = $util.defaultIfNull($context.args.limit, 100) ) #set( $ListRequest = { "version": "2018-05-29", "limit": $limit } )
若要評估更多項目,請變更對應範本中的預設限制。或者,將限制變數新增至清單查詢。例如,在下列清單查詢中,限制設定為 1000:
query MyQuery { listEmployees(limit: 1000) { items { id name company } } }
使用 AWS AppSync 分頁
若要使用 AWS AppSync 進行分頁,請將 nextToken 引數新增至您的 GraphQL 查詢。
查詢範例:
query MyQuery { listEmployees{ items { id name company } nextToken } }
**注意:**查詢返回的 nextToken 值為 null,或者是以 ey 開頭並以 = 結尾的長字串。此值代表最後一個評估的索引鍵。如果值為 null,則資料表中沒有其他項目可供評估。如果是一個長字串,則有更多的項目可供評估。
例如:
"nextToken": "eyJ2ZXJzaW9uIjoyLCJ0b2tlbiI6IkFRSUNBSGg5OUIvN3BjWU41eE96NDZJMW5GeGM4WUNGeG1acmFOMUpqajZLWkFDQ25BRkQxUjREaVVxMkd1aDZNZ2ZTMmhPMUFBQUNIVENDQWhrR0NTcUdTSWIzRFFFSEJxQ0NBZ293Z2dJR0FnRUFNSUlCL3dZSktvWklodmNOQVFjQk1CNEdDV0NHU0FGbEF3UUJMakFSQkF4c0RFY1ZZUGpaRDFxbDcxNENBUkNBZ2dIUWkwaGtJYytoU04vRFMzL3VQT2ZDMnpIV1dBVkg4LzU3TWFwMGZWSHVackt1VmV4emRvTVQrNml6VC9RdDRsSVNGN1pmc3NWTHVvcnJpRE1RZVE5ckNyd3J4dmNOY3ZZUzhTc21PRFFkaTUreVhQcDJ1OENaK29Sd2wrV3VoOGJ0YlBpQXQydjRNdmw2L09jRzRHV2RxRmFjeTFDRjRyK2FPd29velRTV3NqMTd4OUpwVi93cHVYc2tTN2R5TmYxa3JJS3hSL3BMWlY5M3JPSlVocEpDV2xEL3Y1UU5JdGJoOWpyaTI3N09LbUZsVlh3bDRna3hDa1kzeGZMNjZrM2dZY0hpbHlUOE1GUnBLU0VCTFE3RGEzSlJtUG8xUkJvQ051K3dBTkwwd09Vckp0N1BFb0QvTVRrenZDV1lCTXhVaUhaRDdrM3Y5a2FJS2NScHY0ajhuTDJ2Nk9EZ3plTjgwN1RtRFViM21rRUsrakRRcjUvd3ZQVW56cGFaN1RnR21yT21FaTlGQklOUnl6dk9rdDRWazZEaVU3RCtNYUJSdm5iNnR0VklPa2lDdFlhODRqenhlOFlFRUZGOElyTksrQm9yL28vdktxMVczSUxsU1VWWFd0N0hPWjV4TDBudHVTeGlBdW9ZK1Y0NEkzMXlPQkJ1T1AwMVpUek1TdGUvZCtIT1RRUEt2SGVGanF5Y0tpNGNTQUdZN3BobGs5eWJJem9hOTM0YldJOUFyRmF0WDY4UnkzTkF4cWNCbzh4ZklxZGZNN3Rlam02NldMT0Z6T3F6MDRrK1B0K0lXdWhOeS9CWEN2YXh2dk09In0="
若要取得資料表中的其餘項目,請使用 nextToken 做為查詢變數執行另一個查詢。繼續包含 nextToken 變數,直到評估完所有項目為止。
查詢範例:
query MyQuery { listEmployees(nextToken:"eyJ......="){ items { id name company } nextToken } }
索引您的資料
在下列範例查詢中,篩選運算式會設定為傳回一些以員工等於 AnyCompany 為基礎的項目:
query MyQuery { listEmployees(filter: {company: {eq: "AnyCompany"}}) { items { id name company } nextToken } }
若要根據公司列出所有員工,請為要查詢的欄位建立全域次要索引。例如,在 Amplify 中,您可以使用 @index 指令來定義次要索引:
type Employee @model{ id:ID name : String email : AWSEmail company: String @index(name:"employeeByCompany", queryField: "listEmployeesByCompany") }
在下列範例查詢中,針對公司欄位設定了 GSI employeeByCompany,而查詢定義為 listEmployeesByCompany:
query MyQuery { listEmployeesByCompany(company: "AnyCompany") { items { id name company } nextToken } }
您可以指定限制變數,以傳回資料庫中預定的項目數。例如,在下列查詢中,限制變數設定為 5:
query MyQuery { listEmployeesByCompany(company: "AnyCompany",limit:5) { items { id name company } nextToken } }
**備註:**設定限制變數只會傳回預期的項目數,即使您已套用其他 filterExpressions 亦是如此。例如,在下列查詢中,限制變數設定為 5,而篩選條件則等於 Mary Major:
query MyQuery { listEmployeesByCompany(company: "AnyCompany",limit:5) { name:{ eq:"Mary Major" } }) { items { id name company } nextToken } }
前面的查詢只返回 5 個等於 Mary Major 的項目。但是,可能有超過 5 個 Mary Major。
**備註:**索引查詢同樣一次最多會傳回 1 MB 的資料。對於較大的索引查詢,您可以使用分頁。
- 語言
- 中文 (繁體)

相關內容
AWS 官方已更新 2 年前