本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用 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();
}