Sinks

Deliver streams straight into your own infrastructure, already corporate-action correct.

Destinations

StreamingKafka, Redpanda, Pulsar, AWS Kinesis
DatabasesPostgreSQL, ClickHouse, TimescaleDB
WarehousesSnowflake, BigQuery, Databricks, Redshift
Object storageS3, GCS, Azure Blob — Parquet, partitioned by day and instrument

Correct on write

Rows land with the multiplier already applied and the block it was valid at carried alongside. Your warehouse inherits the corporate-action logic rather than you reimplementing it in dbt — which is exactly where the incumbents’ arithmetic error gets copied into customer infrastructure today.

CREATE TABLE tape (  tape_sequence      UInt64,  token_symbol       LowCardinality(String),  venue              LowCardinality(String),  price              Decimal128(18),   -- USD per token  price_per_share    Decimal128(18),   -- USD per underlying share  multiplier         Decimal128(18),  session            LowCardinality(String),  underlying_market_open UInt8,  premium_bps        Decimal128(8),  block_number       UInt64,  transaction_hash   FixedString(66),  block_time         DateTime64(3, 'UTC'),  confirmation_state LowCardinality(String),  code_version       LowCardinality(String)) ENGINE = ReplacingMergeTree(tape_sequence)ORDER BY (token_symbol, block_time, tape_sequence);

ReplacingMergeTree keyed on the tape sequence makes reorg compensation idempotent: a corrected record replaces its predecessor without any deduplication logic on your side.

Backfill

A sink can be seeded from history and then transition to live through the same configuration. There is no separate backfill job to write or schedule, and no window where the two disagree.