Skip to main content

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

  1. A Turbo pipeline writes your data to an S3 bucket you own as Parquet files, using the S3 sink.
  2. Your warehouse reads those files with its own S3 ingestion feature, either continuously or on a schedule.
  3. 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.
See the S3 sink page for all parameters, the secret format, the file layout, and required IAM permissions.

Load into your warehouse

The examples below show the general shape of a load. Adapt names, credentials, and access configuration to your environment.
Create an external stage that points at the sink’s prefix, then copy the Parquet files into a table. Run the COPY INTO on a schedule, or wrap it in a Snowpipe for continuous loading.
For a worked example of scheduling S3 loads into Snowflake with Python, see the Snowflake guide.

Best practices

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.
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.
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.