Skip to content

Output Destination

Ingest outputs are configured under data_sinks: and optional schema_sinks: in skippr.yml.

yaml
pipelines:
  events:
    data_sink: data_sinks.landing
    schema_sink: schema_sinks.catalog

data_sinks:
  landing:
    Athena:
      s3_bucket: my-warehouse-bucket
      s3_prefix: bronze/events
      glue_database_name: bronze_events
      athena_workgroup_name: primary
      athena_results_s3_bucket: athena-results

schema_sinks:
  catalog:
    Glue:
      glue_database_name: bronze_events

data_sinks write landed data. schema_sinks manage destination catalog DDL where that is separate from the data sink. Query and modeling compile the same data_sinks plugin object.

Optional version: on a sink or schema block pins that connector to a specific release.

Connector reference:

Athena output configuration

VariableDefaultDescription
DATA_OUTPUT_S3_BUCKET(required)S3 bucket for destination Parquet files
DATA_OUTPUT_S3_PREFIXKey prefix for Parquet output
SCHEMA_OUTPUT_GLUE_DATABASE_NAME(required)AWS Glue database name. See Glue schema sink.
DATA_OUTPUT_ATHENA_WORKGROUP_NAMEAthena workgroup name
DATA_OUTPUT_ATHENA_RESULTS_S3_BUCKETS3 bucket for Athena query results
DATA_OUTPUT_MAX_ASYNC_UPLOADS16Maximum concurrent Parquet multipart uploads to S3
PARQUET_MULTIPART_PART_BYTES67108864Multipart upload part size (64 MB default)
GLUE_MAX_CONCURRENCY2Max concurrent Glue API calls (throttling control)

S3 output layout

Parquet files are written to:

s3://{DATA_OUTPUT_S3_BUCKET}/{DATA_OUTPUT_S3_PREFIX}/{namespace}/
  p_year={YYYY}/p_month={MM}/p_day={DD}/
    {segment_id}.parquet

Glue tables are created per namespace within the configured database. Hive-style partitions are registered automatically. For explicit catalog wiring, use a Glue schema sink.

AWS credentials

The output uses the standard AWS credential chain, same as the input. Both the output S3 bucket and Glue catalog must be accessible with the configured credentials.

File output

For local development, Skipprd also supports writing Parquet to local disk:

VariableDefaultDescription
DATA_OUTPUT_PATH(required)Output directory for Parquet files

Snowflake output

Writes compacted Parquet to Snowflake via stage upload and COPY INTO.

VariableDefaultDescription
SNOWFLAKE_ACCOUNT(required)Snowflake account identifier
SNOWFLAKE_USER(required)Snowflake login user
SNOWFLAKE_PASSWORDSnowflake login password (when not using key-pair auth)
SNOWFLAKE_PRIVATE_KEY_PATHPath to PKCS8 PEM private key for key-pair auth
SNOWFLAKE_WAREHOUSE(required)Compute warehouse name
SNOWFLAKE_DATABASE(required)Target database
SNOWFLAKE_SCHEMA(required)Target schema
SNOWFLAKE_ROLEOptional role to assume
SNOWFLAKE_STAGE@~Snowflake stage for file uploads

See the Snowflake connector docs for full details.

Postgres output

Writes batches to PostgreSQL with automatic schema and table creation.

VariableDefaultDescription
POSTGRES_HOSTlocalhostPostgreSQL host
POSTGRES_PORT5432PostgreSQL port
POSTGRES_USERDatabase user
POSTGRES_PASSWORDDatabase password
POSTGRES_DATABASETarget database name
POSTGRES_SCHEMApublicTarget schema
POSTGRES_SSLMODESSL mode (e.g. disable, require, prefer)

YAML equivalents: host, port, user, password, database, schema, sslmode, format. See the Postgres connector docs for full details.

Stdout output

Prints line-delimited JSON to standard output for debugging and piping.

VariableDefaultDescription
(none)Use DATA_OUTPUT_PLUGIN_NAME=Stdout or YAML Stdout: {}

See the Stdout connector docs for full details.

Deadletter outputs

Pipelines can optionally route deadletters to a separate output registry:

yaml
pipelines:
  analytics:
    data_sink: data_sinks.main
    deadletter_sink: deadletter_sinks.archive

deadletter_sinks uses the same plugin shapes as data_sinks and supports Athena, S3, File, and Snowflake.

  • If deadletter_sink is unset, deadletters are discarded.
  • If deadletter_sink points to an invalid registry entry, startup fails.
  • Deadletter Athena tables are named _dl_<pipeline> to keep their schema isolated from the primary table.

This site is source-available under PolyForm Shield 1.0.0