ตอนนี้คุณมี CategoryIndex แล้ว คุณสามารถใช้เพื่อเรียกหนังสือทุกเล่มเฉพาะหมวดหมู่ได้ การใช้ดัชนีรองเพื่อสืบค้นตารางคล้ายคลึงกับการใช้การเรียกใช้ API การสืบค้น ตอนนี้ คุณจะต้องเพิ่มชื่อดัชนีลงในการเรียกใช้ API
เมื่อคุณเพิ่มดัชนีรองโดยรวมลงในตารางที่มีอยู่ DynamoDB จะเติมดัชนีแบบอะซิงโครนัสด้วยรายการที่มีอยู่ในตาราง ดัชนีจะพร้อมสำหรับการสืบค้นหลังจากที่เติมรายการทั้งหมดแล้ว เวลาที่ใช้ในการเติมข้อมูลนั้นจะแตกต่างกันไปตามขนาดของตาราง
คุณสามารถใช้สคริปต์ query_with_index.py เพื่อสืบค้นกับดัชนีใหม่ได้ เรียกใช้สคริปต์ในเทอร์มินัลด้วยคำสั่งต่อไปนี้
$ python query_with_index.py
คำสั่งดังกล่าวจะเรียกใช้สคริปต์ต่อไปนี้ในการเรียกหนังสือทุกเล่มในร้านที่มี หมวดหมู่ สืบสวนสอบสวน
import time
import boto3
from boto3.dynamodb.conditions import Key
# Boto3 is the AWS SDK library for Python.
# The "resources" interface allows for a higher-level abstraction than the low-level client interface.
# For more details, go to http://boto3.readthedocs.io/en/latest/guide/resources.html
dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
table = dynamodb.Table('Books')
# When adding a global secondary index to an existing table, you cannot query the index until it has been backfilled.
# This portion of the script waits until the index is in the “ACTIVE” status, indicating it is ready to be queried.
while True:
if not table.global_secondary_indexes or table.global_secondary_indexes[0]['IndexStatus'] != 'ACTIVE':
print('Waiting for index to backfill...')
time.sleep(5)
table.reload()
else:
break
# When making a Query call, you use the KeyConditionExpression parameter to specify the hash key on which you want to query.
# If you want to use a specific index, you also need to pass the IndexName in our API call.
resp = table.query(
# Add the name of the index you want to use in your query.
IndexName="CategoryIndex",
KeyConditionExpression=Key('Category').eq('Suspense'),
)
print("The query returned the following items:")
for item in resp['Items']:
print(item)
โปรดทราบว่า มีสคริปต์ส่วนหนึ่งที่จะรอจนกว่าดัชนีจะพร้อมทำการสืบค้น
คุณจะเห็นผลลัพธ์ต่อไปนี้ในเทอร์มินัลของคุณ:
$ python query_with_index.py
The query returned the following items:
{'Title': 'The Firm', 'Formats': {'Hardcover': 'Q7QWE3U2', 'Paperback': 'ZVZAYY4F', 'Audiobook': 'DJ9KS9NM'}, 'Author': 'John Grisham', 'Category': 'Suspense'}
{'Title': 'The Rainmaker', 'Formats': {'Hardcover': 'J4SUKVGU', 'Paperback': 'D7YF4FCX'}, 'Author': 'John Grisham', 'Category': 'Suspense'}
{'Title': 'Along Came a Spider', 'Formats': {'Hardcover': 'C9NR6RJ7', 'Paperback': '37JVGDZG', 'Audiobook': '6348WX3U'}, 'Author': 'James Patterson', 'Category': 'Suspense'}
การสืบค้นจะส่งคืนหนังสือ 3 เล่มตามผู้แต่ง 2 คน ส่วนนี้คือรูปแบบการสืบค้นที่อาจจะยากสำหรับสคีมาคีย์หลักของตารางของคุณ แต่ง่ายต่อการนำไปใช้กับความสามารถของดัชนีรอง
ในโมดูลถัดไป คุณจะได้เรียนรู้วิธีการอัปเดตคุณลักษณะของรายการที่มีอยู่ในตาราง โดยใช้ API UpdateItem