Menu
Amazon DynamoDB
Developer Guide (API Version 2012-08-10)

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

The following C# example create,, updates, and deletes 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 .NET Code Samples.

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

namespace com.amazonaws.codesamples
{
    class LowLevelTableExample
    {
    private static AmazonDynamoDBClient client = new AmazonDynamoDBClient();
    private static string tableName = "ExampleTable";

    static void Main(string[] args)
    {

        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" //Partition key
                },
                new KeySchemaElement
                {
                    AttributeName = "ReplyDateTime",
                    KeyType = "RANGE" //Sort key
                }
            },
            ProvisionedThroughput = new ProvisionedThroughput
            {
                ReadCapacityUnits = 5,
                WriteCapacityUnits = 6
            },
            TableName = tableName
        };

        var response = client.CreateTable(request);

        var tableDescription = response.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);
            foreach (string name in response.TableNames)
                Console.WriteLine(name);

            lastTableNameEvaluated = response.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.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);

        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.Table.TableName,
                          res.Table.TableStatus);
                status = res.Table.TableStatus;
            }
            catch (ResourceNotFoundException)
            {
                // DescribeTable is eventually consistent. So you might
                // get resource not found. So we handle the potential exception.
            }
        } while (status != "ACTIVE");
    }
    }
}