Snowflake is a cloud data warehouse that separates compute from storage. The Snowflake destination lets you load data from any Dataddo source into your Snowflake tables and keep it up to date on a schedule.
Authorize Connection to Snowflake
Prerequisites
- A running Snowflake account reachable by Dataddo. If your account uses a network policy, allow the Dataddo IPs in it.
- A Snowflake user (or role) with
USAGE,SELECT,INSERT,UPDATE,DELETE, andCREATE TABLEon the target schema. Dataddo creates tables in the schema when a flow first runs, so the role needsCREATE TABLE. - To keep permissions on tables that Dataddo creates later, apply a future grant:
GRANT SELECT, INSERT, UPDATE, DELETE ON FUTURE TABLES IN SCHEMA your_schema TO ROLE dataddo_role;
Create the authorizer
In Authorizers, click Authorize New Service and select Snowflake, then fill in the fields:
| Field | Description |
|---|---|
| A name for this authorizer in Dataddo | A label so you can recognize the connection later. |
| Account identifier | The identifier Snowflake assigned to your account, such as myorg-account123 or xy12345.us-east-2. |
| Database | Name of the database to write to, in uppercase. |
| Authentication Method | Password-based or Key pair. Default: Password-based. |
| Username | The Snowflake user Dataddo connects as. |
| Password | The user's password. Required for password-based authentication. |
| Certificate | The certificate used for key-pair authentication. Upload or generate it under Settings, Security. Required for key-pair authentication. |
| Schema | The schema inside the database. Use uppercase. Default: PUBLIC. |
| Warehouse | The virtual warehouse used for queries. If left blank, the account's default warehouse is used. |
| Region | Usually left blank. Deprecated: prefer putting the region in the account identifier. |
| Session Role | Usually left blank. The default role for sessions Dataddo opens. |
Click Save. Dataddo validates the connection.
Create a Snowflake Destination
Go to Destinations, click Create Destination, and select Snowflake. Give the destination a name, choose the authorizer you created, and click Save.
Write Modes
The write mode decides how each flow run changes the target table. Snowflake offers the standard set below, and the default is insert. Which modes are available, and whether you can switch modes on an existing flow, can depend on the table's current state.
| Mode | Meaning | Composite Key |
|---|---|---|
insert |
Appends new rows on every run. | No |
insert_ignore |
Appends rows, skipping rows that already exist. | Yes |
truncate_insert |
Empties the table, then writes the current data. | No |
upsert |
Inserts new rows and updates existing rows matched by the Composite Key. | Yes |
update |
Updates existing rows matched by the Composite Key; fails rows with no match. | Yes |
update_ignore |
Updates matched rows, skipping rows with no match. | Yes |
delete |
Deletes rows matched by the Composite Key. | Yes |
Composite Key
The Composite Key is the set of columns whose combined values identify each row. Every mode except insert and truncate_insert needs one. You can select up to 4 columns.
Table Naming
Snowflake stores identifiers in uppercase, so Dataddo works in case-sensitive mode. Use uppercase for the schema and table name.
- Schema: uppercase letters, underscores, and hyphens only.
- Table name: uppercase, starts with a letter or an underscore, and contains only letters, numbers, underscores, and dollar signs.
- You can put date-range patterns such as
{{1d1}}in the table name.
Dataddo creates the table on the first write if it does not exist.
How to Create a Flow to Snowflake
- Go to Flows and click Create Flow.
- Add one or more sources.
- Add Snowflake as the destination and pick the authorizer.
- Choose a write mode, and a Composite Key for modes that need one.
- Set the schema and the table name in uppercase.
- Set the schedule and click Save.
Troubleshooting
Table name is not in uppercase
The flow's table name contains lowercase letters. Rewrite the table name in uppercase, delete the table in Snowflake, and restart the flow.
No active warehouse
The authorizer has no warehouse set. Reauthorize the Snowflake connection with the correct warehouse name and restart the flow.
Current role has no privileges on the table
A future grant was not applied, so a table Dataddo created has no privileges. Set the grants, including the future grant shown in Prerequisites, delete the table in Snowflake, and restart the flow.
Dataddo IP is not allowed to access Snowflake
Snowflake's network policy blocks Dataddo. Add the Dataddo IPs to the allowed list and restart the flow.