Amazon DynamoDB
Developer Guide (API Version 2012-08-10)
« PreviousNext »
View the PDF for this guide.Go to the AWS Discussion Forum for this product.Go to the Kindle Store to download this guide in Kindle format.Did this page help you?  Yes | No |  Tell us about it...

Example: Create, Update, Delete, and List Tables Using the AWS SDK for .NET Low-Level API

The following C# example uses the AWS SDK for .NET low-level API to create, update, and delete a table (ExampleTable). It also lists all the tables in your account and gets the description of a specific table. The table update increases the provisioned throughput values. For step-by-step instructions to test the following sample, see Using the AWS SDK for .NET.

using System;
using System.Collections.Generic;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.Model;
using Amazon.Runtime;

namespace Amazon.DynamoDBv2.Documentation
{
  class Program
  {
    private static string tableName = "ExampleTable";
    private static AmazonDynamoDBClient client;

    static void Main(string[] args)
    {
      // You need client to send requests.
      var config = new AmazonDynamoDBConfig();
      config.ServiceURL = System.Configuration.ConfigurationManager.AppSettings["ServiceURL"];
      client = new AmazonDynamoDBClient(config);

      try
      {
        CreateExampleTable();
        ListMyTables();
        GetTableInformation();
        UpdateExampleTable();

        DeleteExampleTable();

        Console.WriteLine("To continue, press Enter");
        Console.ReadLine();
      }
      catch (AmazonDynamoDBException e) { Console.WriteLine(e.Message); }
      catch (AmazonServiceException e) { Console.WriteLine(e.Message); }
      catch (Exception e) { Console.WriteLine(e.Message); }
    }

    private static void CreateExampleTable()
    {
      Console.WriteLine("\n*** Creating table ***");
      var request = new CreateTableRequest
      {
        AttributeDefinitions = new List<AttributeDefinition>()
        {
          new AttributeDefinition
          {
            AttributeName = "Id",
            AttributeType = "N"
          },
          new AttributeDefinition
          {
            AttributeName = "ReplyDateTime",
            AttributeType = "N"
          }
        },
        KeySchema = new List<KeySchemaElement>
        {
          new KeySchemaElement
          {
            AttributeName = "Id",
            KeyType = "HASH"
          },
          new KeySchemaElement
          {
            AttributeName = "ReplyDateTime",
            KeyType = "RANGE"
          }
        },
        ProvisionedThroughput = new ProvisionedThroughput
        {
          ReadCapacityUnits = 5,
          WriteCapacityUnits = 6
        },
        TableName = tableName
      };

      var response = client.CreateTable(request);

      var result = response.CreateTableResult;
      var tableDescription = result.TableDescription;
      Console.WriteLine("{1}: {0} \t ReadsPerSec: {2} \t WritesPerSec: {3}",
                      tableDescription.TableStatus,
                      tableDescription.TableName,
                      tableDescription.ProvisionedThroughput.ReadCapacityUnits,
                      tableDescription.ProvisionedThroughput.WriteCapacityUnits);

      string status = tableDescription.TableStatus;
      Console.WriteLine(tableName + " - " + status);

      WaitUntilTableReady(tableName);

    }

    private static void ListMyTables()
    {
      Console.WriteLine("\n*** listing tables ***");
      string lastTableNameEvaluated = null;
      do
      {
        var request = new ListTablesRequest
        {
          Limit = 2,
          ExclusiveStartTableName = lastTableNameEvaluated
        };

        var response = client.ListTables(request);
        ListTablesResult result = response.ListTablesResult;
        foreach (string name in result.TableNames)
          Console.WriteLine(name);

        lastTableNameEvaluated = result.LastEvaluatedTableName;

      } while (lastTableNameEvaluated != null);
    }

    private static void GetTableInformation()
    {
      Console.WriteLine("\n*** Retrieving table information ***");
      var request = new DescribeTableRequest
      {
        TableName = tableName
      };

      var response = client.DescribeTable(request);

      TableDescription description = response.DescribeTableResult.Table;
      Console.WriteLine("Name: {0}", description.TableName);
      Console.WriteLine("# of items: {0}", description.ItemCount);
      Console.WriteLine("Provision Throughput (reads/sec): {0}",
                       description.ProvisionedThroughput.ReadCapacityUnits);
      Console.WriteLine("Provision Throughput (writes/sec): {0}",
                       description.ProvisionedThroughput.WriteCapacityUnits);

    }

    private static void UpdateExampleTable()
    {
      Console.WriteLine("\n*** Updating table ***");
      var request = new UpdateTableRequest()
      {
        TableName = tableName,
        ProvisionedThroughput = new ProvisionedThroughput()
        {
          ReadCapacityUnits = 6,
          WriteCapacityUnits = 7
        }
      };

      var response = client.UpdateTable(request);

      WaitUntilTableReady(tableName);
    }

    private static void DeleteExampleTable()
    {
      Console.WriteLine("\n*** Deleting table ***");
      var request = new DeleteTableRequest
      {
        TableName = tableName
      };

      var response = client.DeleteTable(request);

      var result = response.DeleteTableResult;
      Console.WriteLine("Table is being deleted...");
    }

    private static void WaitUntilTableReady(string tableName)
    {
      string status = null;
      // Let us wait until table is created. Call DescribeTable.
      do
      {
        System.Threading.Thread.Sleep(5000); // Wait 5 seconds.
        try
        {
          var res = client.DescribeTable(new DescribeTableRequest
          {
            TableName = tableName
          });

          Console.WriteLine("Table name: {0}, status: {1}",
                         res.DescribeTableResult.Table.TableName,
                         res.DescribeTableResult.Table.TableStatus);
          status = res.DescribeTableResult.Table.TableStatus;
        }
        catch (ResourceNotFoundException resouceNotFound)
        {
          // DescribeTable is eventually consistent. So you might
          // get resource not found. So we handle the potential exception.
        }
      } while (status != "ACTIVE");
    }
  }
}