Você pode usar a API de baixo nível do AWS SDK for .NET para criar uma tabela do Amazon DynamoDB com um ou mais índices secundários globais na tabela e executar consultas usando os índices. Essas operações são mapeadas nas operações do DynamoDB correspondentes. Para obter mais informações, consulte a Referência de API do Amazon DynamoDB.
Veja a seguir as etapas comuns para operações de tabela usando a API de baixo nível do .NET.
-
Crie uma instância da classe
AmazonDynamoDBClient
. -
Forneça os parâmetros obrigatórios e opcionais para a operação, criando os objetos de solicitação correspondentes.
Por exemplo, crie um objeto
CreateTableRequest
para criar uma tabela e um objetoQueryRequest
para consultar uma tabela ou um índice. -
Execute o método apropriado fornecido pelo cliente que você criou na etapa anterior.
Tópicos
Criar uma tabela com um índice secundário global
Você pode criar índices secundários globais ao mesmo tempo em que cria uma tabela. Para fazer isso, use CreateTable
e forneça suas especificações para um ou mais índices secundários globais. O exemplo de código C#a seguir cria uma tabela para armazenar informações sobre dados climáticos. A chave de partição é Location
e a chave de classificação é Date
. Um índice secundário global chamado PrecipIndex
permite acesso rápido aos dados de precipitação de vários locais.
Veja a seguir as etapas necessárias para criar uma tabela com um índice secundário global usando a API de baixo nível do .NET.
-
Crie uma instância da classe
AmazonDynamoDBClient
. -
Crie uma instância da classe
CreateTableRequest
para fornecer as informações solicitadas.Você deve fornecer o nome da tabela, sua chave primária e os valores de throughput provisionado. Para o índice secundário global, você deve fornecer o nome do índice, suas configurações de throughput provisionado, as definições de atributo da chave de classificação do índice, o esquema de chaves do índice e a projeção do atributo.
-
Execute o método
CreateTable
fornecendo o objeto de solicitação como um parâmetro.
O exemplo de código C# a seguir demonstra as etapas anteriores. O código cria uma tabela (WeatherData
) com um índice secundário global (PrecipIndex
). A chave de partição do índice é Date
e a chave de classificação é Precipitation
. Todos os atributos da tabela estão projetados no índice. Os usuários podem consultar esse índice para obter dados climáticos de uma data específica, opcionalmente, classificar os dados por quantidade de precipitação.
Como Precipitation
não é um atributo de chave para a tabela, ele não é necessário. No entanto, os itens de WeatherData
sem Precipitation
não aparecem no 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);
Você deve aguardar até que o DynamoDB crie a tabela e defina o status dessa tabela como ACTIVE
. Depois disso, você poderá começar a inserir itens de dados na tabela.
Descrever uma tabela com um índice secundário global
Para obter mais informações sobre índices secundários globais em uma tabela, use DescribeTable
. Para cada índice, você pode acessar seu nome, esquema de chaves e atributos projetados.
Veja a seguir as etapas para acessar informações do índice secundário global para uma tabela usando a API de baixo nível do .NET.
-
Crie uma instância da classe
AmazonDynamoDBClient
. -
Execute o método
describeTable
fornecendo o objeto de solicitação como um parâmetro.Crie uma instância da classe
DescribeTableRequest
para fornecer as informações solicitadas. Você deve fornecer o nome da tabela.
O exemplo de código C# a seguir demonstra as etapas anteriores.
exemplo
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);
}
}
Consultar um índice secundário global
Você pode usar Query
em um índice secundário global de forma semelhante ao uso de Query
em uma tabela. Você precisa especificar o nome do índice, os critérios de consulta da chave de partição e da chave de classificação (se houver) do índice, e os atributos que você deseja retornar. Neste exemplo, o índice é PrecipIndex
, que tem uma chave de partição Date
e uma chave de classificação Precipitation
. A consulta de índice retorna todos os dados climáticos de uma data específica, na qual a precipitação é maior que zero.
Veja a seguir as etapas para consultar um índice secundário global usando a API de baixo nível do .NET.
-
Crie uma instância da classe
AmazonDynamoDBClient
. -
Crie uma instância da classe
QueryRequest
para fornecer as informações solicitadas. -
Execute o método
query
fornecendo o objeto de solicitação como um parâmetro.
O nome do atributo Date
é uma palavra reservada do DynamoDB. Portanto, use um nome de atributo de expressão como um espaço reservado na KeyConditionExpression
.
O exemplo de código C# a seguir demonstra as etapas anteriores.
exemplo
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();
}