> ## Documentation Index
> Fetch the complete documentation index at: https://docs.risingwave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sink data from RisingWave to Amazon DynamoDB

> This guide describes how to sink data from RisingWave to DynamoDB using the DynamoDB sink connector in RisingWave.

[Amazon DynamoDB](https://aws.amazon.com/dynamodb/) is a fully managed, serverless, key-value NoSQL database designed to run high-performance applications at any scale. It provides consistent, single-digit millisecond response times and offers built-in security, backup and restore, and in-memory caching.

<Tip>
  **PREMIUM FEATURE**

  This is a premium feature. For a comprehensive overview of all premium features and their usage, please see [RisingWave premium features](/get-started/premium-features).
</Tip>

## Syntax

```sql theme={null}
CREATE SINK [ IF NOT EXISTS ] sink_name
[FROM sink_from | AS select_query]
WITH (
   connector = 'dynamodb',
   connector_parameter = 'value', ...
)
FORMAT data_format ENCODE data_encode [ (
    format_parameter = 'value'
) ];

```

## Parameters

| Field                               | Note                                                                                                                                                                                                                                                                                                                             |
| :---------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| table                               | **Required**. Name of the DynamoDB table where you want to write the data.                                                                                                                                                                                                                                                       |
| primary\_key                        | **Required**. A pair of columns representing the partition key and sort key of DynamoDB, e.g., key1,key2, separated by comma.                                                                                                                                                                                                    |
| aws.region                          | **Required**. AWS region where your DynamoDB table is hosted.                                                                                                                                                                                                                                                                    |
| aws.endpoint\_url                   | **Optional**. Custom endpoint URL for connecting to DynamoDB. Useful for testing with DynamoDB Local.                                                                                                                                                                                                                            |
| aws.credentials.access\_key\_id     | **Conditional**. AWS access key ID for accessing DynamoDB. Must be specified when using access key ID and secret key.                                                                                                                                                                                                            |
| aws.credentials.secret\_access\_key | **Conditional**. AWS secret access key for accessing DynamoDB. Must be specified when using access key ID and secret key.                                                                                                                                                                                                        |
| aws.credentials.role.arn            | **Conditional**. ARN of the IAM role to assume for accessing DynamoDB. Must be specified when using AssumeRole.                                                                                                                                                                                                                  |
| aws.credentials.role.external\_id   | **Conditional**. External ID for assuming the IAM role specified in aws.credentials.role.arn.                                                                                                                                                                                                                                    |
| aws.profile                         | **Optional**. The name of the AWS CLI profile to use for accessing DynamoDB. If specified, it overrides the default profile.                                                                                                                                                                                                     |
| dynamodb.max\_batch\_item\_nums     | **Optional**. The maximum number of items in the [`BatchWriteItem`](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html) operation. It must be larger than 1, and less than or equal to 25. The default is 25.                                                                                |
| dynamodb.max\_future\_send\_nums    | **Optional**. The maximum number of concurrent write futures in DynamoDB. It must be less than 360, and the default is 256. This is derived from user-defined `max_parallelism_units` (40000 by default). If the write throughput of RisingWave exceeds the `max_parallelism_units` set in DynamoDB, an error would be reported. |

## Partition key and sort key mapping

For the DynamoDB sink to function correctly, it is required that the source table in RisingWave has a composite primary key comprising two columns, corresponding to the partition key and sort key defined in the target DynamoDB table.

For example, if you are sinking data into a DynamoDB table named movies that is configured with a partition key title and a sort key year, you must ensure that the RisingWave table schema also defines a composite primary key with the same columns. Below is an example schema definition for the RisingWave table:

```sql theme={null}
CREATE TABLE IF NOT EXISTS movies (
    year integer,
    title varchar,
    description varchar,
    primary key (year, title)
);
```

This makes sure that the data structure in RisingWave aligns with the key definition in DynamoDB, thus preventing any further potential errors.

## Data type mapping

| RisingWave Data Type        | DynamoDB Data Type |
| :-------------------------- | :----------------- |
| boolean                     | Bool               |
| smallint                    | number (N)         |
| integer                     | number (N)         |
| bigint                      | number (N)         |
| numeric                     | number (N)         |
| real                        | number (N)         |
| double precision            | number (N)         |
| serial                      | number (N)         |
| character varying (varchar) | string (S)         |
| bytea                       | binary             |
| date                        | string (S)         |
| time without time zone      | string (S)         |
| timestamp without time zone | string (S)         |
| timestamp with time zone    | string (S)         |
| interval                    | string (S)         |
| struct                      | map (M)            |
| array                       | list (L)           |
| JSONB                       | string (S)         |

<Note>
  The `struct` datatype in RisingWave will map to `map (M)` in DynamoDB in a recursive way. Refer to [source code](https://github.com/risingwavelabs/risingwave/blob/88bb14aa6eb481f1dc0e92ee190bafad089d2afd/src/connector/src/sink/dynamodb.rs#L386) for details.
</Note>
