Skip to content

Getting Started

Introduction

SQLLoad loads data into your warehouse, and shows you how before it changes anything.

SQLLoad loads data into your warehouse, and shows you how before it changes anything.

System Source Target
Postgres ✓ (incl. CDC) ✓
Snowflake ✓ ✓
BigQuery ✓ preview
Databricks ✓
ClickHouse preview
DuckDB ✓
MotherDuck beta²
Files ✓ Parquet, CSV, JSON (S3, local folder, SFTP) ✓ Parquet, CSV (S3, local folder)
Google Sheets ✓
HTTP APIs and Python ✓
ODBC databases¹ ✓

¹ In the published wheels from 0.39.0; before that, in builds with the odbc feature.

² From 0.34.0, through a separate DuckDB 1.5 process: install sqlload[motherduck].

See the connector matrix for every combination and write strategy. To stream Kafka topics into Snowflake continuously, use the separate Kafka exporter.

sqlload plan shows each table’s columns, write strategy and route before apply and load run. Where Snowflake or DuckDB can load files exactly by itself, the files never pass through SQLLoad. SQLLoad is written in Rust. Python is needed only for Python sources.

$ sqlload copy orders/ duckdb://shop.duckdb#raw.orders
✓ Plan complete 1 selected, 1 object to create, 1 to load (sqlload plan shows the tree)
created raw.orders 9 columns
loaded raw.orders 3 rows 0.0s
✓ Completed 1 loaded, 3 rows, 0.1s
├── slowest raw.orders 0.0s
└── peak memory 73.7 MiB
Step Command Result
Check a project sqlload debug Validates sqlload.toml and tests every connection.
Preview sqlload plan Every table, column, type mapping, write strategy, route and cursor. Changes nothing.
Create tables sqlload apply Creates or changes destination tables. Never loads data.
Load sqlload load Loads the selected tables, committing large loads along the way.
Copy one table sqlload copy One table, once, between two connections or URIs. No sqlload.toml needed.
Check declarations sqlload contract Compares declared columns with live tables, or adopts live columns.
Logged positions sqlload logged-state Inspects or corrects the run log of state = "logged" tables.
  • The live table is the schema. SQLLoad stores no copy of your schema. Each run reads the destination table’s columns, or the columns you declare, and diffs them. See Contracts and schema changes.
  • Cursors come from the data. An incremental table continues from the destination’s maximum of its cursor_column. Only positions the data can’t carry, such as an API sync token, go in an opt-in, append-only run log. See Cursors and state.
  • No silent fallbacks. A load method that can’t be used, or files a warehouse can’t load exactly, fail at plan with the fix, instead of quietly taking a slower route.