Connectors / Files & object stores

Apache Iceberg

source

Apache Iceberg source (REST/Glue/SQL/HMS catalogs; projection + filter pushdown, time travel, incremental snapshots)

Install

cargo install faucet-cli --features source-iceberg
faucet init --source iceberg
# Cargo.toml — use it as a library
cargo add faucet-source-iceberg

Starter config

source:
  type: iceberg
  config:
    catalog:
      type: rest    # one of: rest, glue, sql, hms
      # uri: null    # Catalog endpoint URI.
      # warehouse: null    # Object-storage warehouse root, e.g.
      # credential: null    # REST bearer token or other catalog-specific credential.
      # properties: {}    # Arbitrary catalog properties passed through to the catalog builder and the warehouse file IO (e.g.
      # --- Alternative variants — replace the block above with one of these ---
      # type: glue
      # uri: null
      # warehouse: null
      # credential: null
      # properties: {}
      #
      # type: sql
      # uri: null
      # warehouse: null
      # credential: null
      # properties: {}
      #
      # type: hms
      # uri: null
      # warehouse: null
      # credential: null
      # properties: {}
    table: ""    # REQUIRED — Table to read, as `namespace.table` (multi-level namespaces are dot-separated: `lake.analytics.events`).
    # columns: []    # Columns to read (projection).
    # filter: null    # Row filter pushed down to the scan, e.g.
    # snapshot_id: null    # Time travel: read this snapshot id instead of the current one.
    # as_of_timestamp: null    # Time travel: read the snapshot that was current at this RFC 3339 instant (e.g.
    # batch_size: 1000    # Arrow batch size (rows per page).
    # concurrency: 4    # Data files read concurrently.
    # mode: null    # How much of the table each run reads.
    # on_rewrite: null    # What an incremental run does when a snapshot since the bookmark rewrote existing data (`overwrite` / `delete`), or the b…
    # on_expired: null    # What an incremental run does when the bookmarked snapshot (or one between it and the current snapshot) has been expired …

Capabilities

Replay Non-deterministic replay
Exactly-once replay No
Incremental Yes
Dataset discovery Yes
Reports lag No
Compression No

Config fields

FieldTypeDefaultDescription
catalog
required
object — Catalog type and connection settings.
table
required
string — Table to read, as namespace.table (multi-level namespaces are dot-separated: lake.analytics.events).
columns array [] Columns to read (projection). Empty reads every column.
filter string — Row filter pushed down to the scan, e.g. status = 'active' and (amount >= 10 or vip is not null).
snapshot_id integer — Time travel: read this snapshot id instead of the current one. mode: full only; mutually exclusive with as_of_timestamp.
as_of_timestamp string — Time travel: read the snapshot that was current at this RFC 3339 instant (e.g. 2026-01-31T00:00:00Z). mode: full only.
batch_size integer 1000 Arrow batch size (rows per page). 0 emits one page per snapshot read.
concurrency integer 4 Data files read concurrently.
mode object full full (default) re-reads the table each run; incremental reads only data appended since the bookmarked snapshot.
on_rewrite object fail Incremental only: reaction to an overwrite / delete snapshot since the bookmark.
on_expired object fail Incremental only: reaction to a bookmarked snapshot that has expired.
Get started

Your first pipeline runs in five minutes.

Install the CLI, scaffold a config, and move real data — nothing external to stand up.

curl -LsSf https://github.com/faucet-hq/faucet-stream/releases/latest/download/faucet-cli-installer.sh | sh
brew install faucet-hq/faucet-stream/faucet-cli