本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用全域次要索引:.NET
您可以使用 AWS SDK for .NET 低階 API 建立含有一或多個全域次要索引的 Amazon DynamoDB 資料表、描述資料表上的索引,以及使用索引執行查詢。這些操作會映射至對應的 DynamoDB 操作。如需詳細資訊,請參閱《Amazon DynamoDB API 參考》。
下列是使用 .NET 低階 API 執行資料表操作的一般步驟。
-
建立
AmazonDynamoDBClient
類別的執行個體。 -
透過建立對應的請求物件,為操作提供必要及選用的參數。
例如,建立
CreateTableRequest
物件來建立資料表,以及建立QueryRequest
物件來查詢資料表或索引。 -
執行您在前一步驟中建立之用戶端所提供的適當方法。
建立具有全域次要索引的資料表
您可在建立資料表的同時建立全域次要索引。若要執行這項操作,請使用 CreateTable
,並提供一或多個全域次要索引的規格。以下 C# 程式碼範例會建立資料表來保存天氣資料的相關資訊。分割區索引鍵為 Location
,而排序索引鍵為 Date
。名為 PrecipIndex
的全域次要索引允許快速存取各個地點的降水資料。
以下是使用 .NET 低階 API 建立具有全域次要索引之資料表的步驟。
-
建立
AmazonDynamoDBClient
類別的執行個體。 -
建立
CreateTableRequest
類別的執行個體,以提供請求資訊。您必須提供資料表名稱、其主索引鍵,以及佈建的輸送量數值。對於全域次要索引,您必須提供索引名稱、其佈建的輸送量設定值、索引排序索引鍵的屬性定義、索引的索引鍵結構描述以及屬性投影。
-
以參數形式提供請求物件,以便執行
CreateTable
方法。
下列 C# 程式碼範例示範前述步驟。程式碼會建立具有全域次要索引 (PrecipIndex
) 的資料表 (WeatherData
)。索引分割區索引鍵是 Date
,而其排序索引鍵是 Precipitation
。所有的資料表屬性都會投影到索引。使用者可以查詢此索引以取得特定日期的天氣資料,可選擇依降水量排序資料。
因為 Precipitation
不是資料表的索引鍵屬性,所以其並非必要項目。不過,沒有 Precipitation
的 WeatherData
項目不會在 PrecipIndex
中顯示。
client = new AmazonDynamoDBClient(); string tableName = "WeatherData"; // Attribute definitions var attributeDefinitions = new List<AttributeDefinition>() { {new AttributeDefinition{ AttributeName = "Location", AttributeType = "S"}}, {new AttributeDefinition{ AttributeName = "Date", AttributeType = "S"}}, {new AttributeDefinition(){ AttributeName = "Precipitation", AttributeType = "N"} } }; // Table key schema var tableKeySchema = new List<KeySchemaElement>() { {new KeySchemaElement { AttributeName = "Location", KeyType = "HASH"}}, //Partition key {new KeySchemaElement { AttributeName = "Date", KeyType = "RANGE"} //Sort key } }; // PrecipIndex var precipIndex = new GlobalSecondaryIndex { IndexName = "PrecipIndex", ProvisionedThroughput = new ProvisionedThroughput { ReadCapacityUnits = (long)10, WriteCapacityUnits = (long)1 }, Projection = new Projection { ProjectionType = "ALL" } }; var indexKeySchema = new List<KeySchemaElement> { {new KeySchemaElement { AttributeName = "Date", KeyType = "HASH"}}, //Partition key {new KeySchemaElement{AttributeName = "Precipitation",KeyType = "RANGE"}} //Sort key }; precipIndex.KeySchema = indexKeySchema; CreateTableRequest createTableRequest = new CreateTableRequest { TableName = tableName, ProvisionedThroughput = new ProvisionedThroughput { ReadCapacityUnits = (long)5, WriteCapacityUnits = (long)1 }, AttributeDefinitions = attributeDefinitions, KeySchema = tableKeySchema, GlobalSecondaryIndexes = { precipIndex } }; CreateTableResponse response = client.CreateTable(createTableRequest); Console.WriteLine(response.CreateTableResult.TableDescription.TableName); Console.WriteLine(response.CreateTableResult.TableDescription.TableStatus);
您必須等到 DynamoDB 建立資料表,並將資料表狀態設定為 ACTIVE
。之後,您可以開始將資料項目放入資料表中。
使用全域次要索引描述資料表
若要取得資料表上全域次要索引的資訊,請使用 DescribeTable
。對於每個索引,您可以存取其名稱、索引鍵結構描述和投影屬性。
以下是使用 .NET 低階 API 存取資料表的全域次要索引資訊的步驟。
-
建立
AmazonDynamoDBClient
類別的執行個體。 -
以參數形式提供請求物件,以便執行
describeTable
方法。建立
DescribeTableRequest
類別的執行個體,以提供請求資訊。您必須提供資料表名稱。
下列 C# 程式碼範例示範前述步驟。
範例
client = new AmazonDynamoDBClient(); string tableName = "WeatherData"; DescribeTableResponse response = client.DescribeTable(new DescribeTableRequest { TableName = tableName}); List<GlobalSecondaryIndexDescription> globalSecondaryIndexes = response.DescribeTableResult.Table.GlobalSecondaryIndexes; // This code snippet will work for multiple indexes, even though // there is only one index in this example. foreach (GlobalSecondaryIndexDescription gsiDescription in globalSecondaryIndexes) { Console.WriteLine("Info for index " + gsiDescription.IndexName + ":"); foreach (KeySchemaElement kse in gsiDescription.KeySchema) { Console.WriteLine("\t" + kse.AttributeName + ": key type is " + kse.KeyType); } Projection projection = gsiDescription.Projection; Console.WriteLine("\tThe projection type is: " + projection.ProjectionType); if (projection.ProjectionType.ToString().Equals("INCLUDE")) { Console.WriteLine("\t\tThe non-key projected attributes are: " + projection.NonKeyAttributes); } }
查詢全域次要索引
您可以在全域次要索引上使用 Query
,與 Query
資料表的方式相同。您需要指定索引名稱、索引分割區索引鍵和排序索引鍵的查詢條件 (如存在),以及要傳回的屬性。在本例中,索引為 PrecipIndex
,其分割區索引鍵為 Date
,排序索引鍵為 Precipitation
。索引查詢會傳回特定日期的所有天氣資料,其中降水量大於零。
以下是使用 .NET 低階 API 查詢全域次要索引的步驟。
-
建立
AmazonDynamoDBClient
類別的執行個體。 -
建立
QueryRequest
類別的執行個體,以提供請求資訊。 -
以參數形式提供請求物件,以便執行
query
方法。
屬性名稱 Date
是 DynamoDB 保留字。因此,您必須使用表達式屬性名稱作為 KeyConditionExpression
中的預留位置。
下列 C# 程式碼範例示範前述步驟。
範例
client = new AmazonDynamoDBClient(); QueryRequest queryRequest = new QueryRequest { TableName = "WeatherData", IndexName = "PrecipIndex", KeyConditionExpression = "#dt = :v_date and Precipitation > :v_precip", ExpressionAttributeNames = new Dictionary<String, String> { {"#dt", "Date"} }, ExpressionAttributeValues = new Dictionary<string, AttributeValue> { {":v_date", new AttributeValue { S = "2013-08-01" }}, {":v_precip", new AttributeValue { N = "0" }} }, ScanIndexForward = true }; var result = client.Query(queryRequest); var items = result.Items; foreach (var currentItem in items) { foreach (string attr in currentItem.Keys) { Console.Write(attr + "---> "); if (attr == "Precipitation") { Console.WriteLine(currentItem[attr].N); } else { Console.WriteLine(currentItem[attr].S); } } Console.WriteLine(); }