Overview
You can get Goldsky data into any data warehouse that can ingest from Amazon S3. Turbo pipelines write to S3 with the S3 sink, and your warehouse loads those files with its built-in S3 ingestion. You don’t need a third-party connector such as Fivetran. The S3 sink writes standard Apache Parquet files with optional Hive-style partitioning. Every major warehouse reads Parquet from S3 natively, so this pattern works with Snowflake, Databricks, BigQuery, Redshift, and others.Goldsky doesn’t have a native sink for these warehouses. S3 acts as the
intermediary. Batch loading from S3 is often cheaper than streaming into a
warehouse, because streaming inserts typically require compute that is
always on.
How it works
- A Turbo pipeline writes your data to an S3 bucket you own as Parquet files, using the S3 sink.
- Your warehouse reads those files with its own S3 ingestion feature, either continuously or on a schedule.
- You query the data in your warehouse alongside the rest of your analytics.
Supported data warehouses
Any warehouse or query engine that reads Parquet from S3 fits this pattern. Popular options include:
Refer to your warehouse’s documentation for the exact setup, including how to grant it read access to your bucket.
Set up the pipeline
Configure an S3 sink that writes Parquet to a bucket your warehouse can read. Partitioning by date (dt) lets your warehouse load new data incrementally and prune scans.
Load into your warehouse
The examples below show the general shape of a load. Adapt names, credentials, and access configuration to your environment.- Snowflake
- Databricks
Create an external stage that points at the sink’s prefix, then copy the
Parquet files into a table. Run the For a worked example of scheduling S3 loads into Snowflake with Python, see the Snowflake guide.
COPY INTO on a schedule, or wrap it
in a Snowpipe for continuous loading.Best practices
Deduplicate on the primary key
Deduplicate on the primary key
Turbo sinks deliver data at least once, so a restart can write the same
rows to S3 again. Deduplicate on the transform’s
primary_key (for
example id) in your warehouse, either with a MERGE during loading or
in a downstream model.Partition by date
Partition by date
A
dt partition column lets your warehouse load only new partitions and
skip old files. Add more partition columns only when your queries
consistently filter on them, because too many partitions produce many
small files.Use zstd compression
Use zstd compression
Set
compression: zstd on the S3 sink to reduce storage and transfer
costs. Check that your warehouse supports zstd-compressed Parquet; Snowflake
and Databricks both do.