Create Global secondary indexes update_table
def check_gsi(tablename, indexname, region):
dynamoDB = boto3.client("dynamodb", region_name=region)
table = dynamoDB.describe_table(TableName=tablename)["Table"]
gsi = table.get("GlobalSecondaryIndexes", [])
for g in gsi:
if g["IndexName"] == indexname:
print(f"--- Exists - Global Secondary Index {indexname} ---")
return True
else:
return False
def create_gsi(tablename, indexname, region):
if check_gsi(tablename, indexname, region):
return
dynamoDB = boto3.client("dynamodb", region_name=region)
dynamoDB.update_table(
TableName=tablename,
AttributeDefinitions=[
{"AttributeName": "gsi_pk", "AttributeType": "S"},
{"AttributeName": "timestamp", "AttributeType":"N"},
],
GlobalSecondaryIndexUpdates=[
{
"Create": {
"IndexName": "gsi_time_all",
"KeySchema": [
{"AttributeName": "gsi_pk", "KeyType": "HASH"},
{"AttributeName": "timestamp", "KeyType": "RANGE"},
],
"Projection": {"ProjectionType": "ALL"} # The index contains all attributes from the base table item.
}
}
]
)
print(f"--- Added Global Secondary Index {indexname} ---")
dynamodb.put_item(
TableName=TABLE_NAME,
Item={
"bucket_name": {"S": bucket_name},
"timestamp": {"N": str(now_ms)},
"total_size_bytes": {"N": str(total_size)},
"gsi_pk": {"S": "ALL"},
},
)