使用 AWS CLI 查詢 DynamoDB GSI
查詢 global secondary index 就是一個平常的 aws dynamodb query 再加一個旗標:--index-name。key condition 接著鎖定的是索引的 key,而非表格的 — 這裡 AlbumTitle-index 讓我們能依專輯抓取歌曲,這是 base table(Artist + SongTitle)不做 scan 就無法服務的存取模式。
Code
aws dynamodb query \
--table-name 'Music' \
--index-name 'AlbumTitle-index' \
--key-condition-expression '#hashKey = :hashKeyValue' \
--expression-attribute-names '{"#hashKey":"AlbumTitle"}' \
--expression-attribute-values '{":hashKeyValue":{"S":"Danzon"}}'輸出是以 DynamoDB JSON 表示的符合項目:
{
"Items": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
],
"Count": 2,
"ScannedCount": 2
}說明
--index-name— 指名要查詢的 GSI(--table-name仍為必需)。--key-condition-expression使用索引的 partition(與選用的 sort)key — 這裡是AlbumTitle— 運算子與表格查詢相同。- 僅最終一致 — GSI 從 base table 非同步複製。對 GSI 查詢加上
--consistent-read並不會升級它;它會以ValidationException失敗。(local secondary index 確實支援強一致。) - 你只會拿到已投影的屬性 — GSI 查詢回傳索引所投影的內容(
ALL、KEYS_ONLY,或INCLUDE列出的屬性),且無法從 base table 取回其餘部分。 - GSI 中 key 並非唯一 — 許多項目可共用同一個索引 key,而缺少索引 key 屬性的項目就是不會出現(也就是 sparse-index 模式)。
- 分頁是自動的 — CLI 在幕後追蹤服務的分頁 token 並印出合併後的結果。以
--max-items限制輸出(會出現一個NextToken;以--starting-token續讀),或以--no-paginate進行單一服務呼叫。
改用視覺化操作
DynamoDB Expression Builder 會為索引查詢建立 key condition 與 name/value map,並交給你一個可直接執行的 CLI 指令。
想在表單中瀏覽表格的索引並執行 GSI 查詢 — 分頁格線、複製為 CLI — 下載 DynoTable。
相關範例
- 在 Node.js 中查詢 DynamoDB GSI — 以 AWS SDK v3 執行相同的索引查詢。
- 在 Python 中查詢 DynamoDB GSI — 以 boto3 執行相同的索引查詢。
- 使用 AWS CLI 執行 DynamoDB Query — 查詢 base table。
- GSI vs. LSI — 哪種索引型別適合該存取模式。
- 為什麼 GSI 是最終一致 — 複製延遲的說明。
- "The table does not have the specified index" — 索引名稱不符(GSI 名稱區分大小寫)。
- "Consistent reads are not supported on global secondary indexes" — 為什麼 consistent-read 旗標在 GSI 上會失敗。
References
- Query — Amazon DynamoDB API Reference
- query — AWS CLI Command Reference
- Using Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Using AWS CLI pagination options — AWS CLI User Guide
最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。