Skip to content

Targets

Targets and load methods

Where loaded tables go, and how data gets there: files the warehouse reads itself, stages and bulk COPY.

The fastest load is rarely reading rows and inserting them. It’s letting the warehouse bulk-load files: straight from your bucket or folder when the data is already in files, or from a stage that SQLLoad fills with Parquet. SQLLoad picks that route wherever it loads the data exactly, and plan names the route for every table.

Data Into DuckDB Into Snowflake Into Databricks
Parquet files in S3 or a folder DuckDB reads them with read_parquet COPY from an external stage over the bucket Staged by SQLLoad in the volume, then COPY INTO
CSV, JSON, NDJSON files Read by SQLLoad, appended as Arrow COPY from an external stage over the bucket Read by SQLLoad, staged as Parquet in the volume, then COPY INTO
Postgres or Python rows Appended as Arrow Written as Parquet to the load_method’s stage, then COPY (or streamed or inserted, if the load_method says so) Written as Parquet to the volume, then COPY INTO

There are no silent fallbacks. If the route a table needs can’t be used, plan fails for that table and says how to fix it.

A target is where loaded tables go. It names a connection and where tables are placed in it. A project can have several targets, for example one per environment; each source loads into its destination, or the project’s default_target.

Connection kind Target writes Places tables with
snowflake Snowflake tables loader_schema, and optionally database
databricks Unity Catalog tables loader_schema, in the connection’s catalog
duckdb DuckDB tables loader_schema
s3, filesystem Parquet files, one folder per table path

A Snowflake, Databricks or DuckDB target places tables in a schema:

[connections.warehouse]
kind = "duckdb"
database = "shop.duckdb"
[targets.local]
connection = "warehouse"
loader_schema = "raw"
Key Meaning
connection A snowflake or duckdb connection.
loader_schema The schema for tables whose source sets no schema. Required.
database Overrides the connection’s database.

A source’s schema overrides loader_schema for its tables. A DuckDB connection’s database is a file path, or :memory:. A Snowflake connection also needs a load_method; see Snowflake.

Each kind has its own page: Snowflake, Databricks, DuckDB and Parquet files.