Connectors / Files & object stores
Apache Iceberg
sinkApache Iceberg sink (append; REST/Glue/SQL/HMS catalogs)
Install
cargo install faucet-cli --features sink-iceberg faucet init --sink iceberg
# Cargo.toml — use it as a library cargo add faucet-sink-iceberg
Starter config
sink:
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: {}
namespace: [] # REQUIRED — Multi-part namespace that contains the target table, e.g.
table: "" # REQUIRED — Name of the Iceberg table (without namespace), e.g.
# create_table: true # Create the table if it does not exist, inferring the schema from the first batch.
# partition_spec: [] # Partition fields applied when creating the table.
# write_mode: null # Write semantics for a sink.
# target_file_size_mb: 256 # Roll over to a new Parquet data file when the estimated file size (uncompressed Arrow bytes × 0.4) exceeds this threshol…
# parquet: { ... } # Parquet-level compression and encoding options.
# snapshot_properties: {} # Key-value pairs written into the Iceberg snapshot summary.
# batch_size: 10000 # Maximum records buffered in memory before flushing a write to the iceberg writer pipeline.
# cleanup_orphans_on_failure: false # Delete the Parquet data files this flush already uploaded when the snapshot commit *definitively* fails, so they do not accumulate as orphans.
Capabilities
| Delivery | Exactly-once (atomic watermark) |
|---|---|
| Write modes | append |
| Exactly-once writes | Yes |
| Schema evolution | Yes |
| Scoped cleanup | No |
| Staged bulk load | No |
| Run rollback | No |
| Compression | No |
Config fields
| Field | Type | Default | Description |
|---|---|---|---|
catalogrequired | object | — | Iceberg catalog connection settings. |
namespacerequired | array | — | Multi-part namespace that contains the target table, e.g. ["analytics", "events"]. Must be non-empty; no segment may be empty. |
tablerequired | string | — | Name of the Iceberg table (without namespace), e.g. "page_views". |
create_table | boolean | true | Create the table if it does not exist, inferring the schema from the first batch. When false, load_table is called at startup and an absent table causes a FaucetError::Sink immediately. |
partition_spec | array | [] | Partition fields applied when creating the table. Ignored on writes to an existing table (the table's existing spec is used). |
write_mode | object | append | Write semantics. Uses the shared faucet_core::WriteMode enum (append | upsert | delete). Only append is supported at runtime; non-append modes are rejected by IcebergSink::new with a FaucetError::Config. Upsert via equality-delete is tracked in #179. |
target_file_size_mb | integer | 256 | Roll over to a new Parquet data file when the estimated file size (uncompressed Arrow bytes × 0.4) exceeds this threshold. |
parquet | object | compression: snappy | Parquet codec settings. |
snapshot_properties | object | {} | Key-value pairs written into the Iceberg snapshot summary. |
batch_size | integer | 10000 | Maximum records buffered in memory before flushing a write to the iceberg writer pipeline. 0 = no limit (single batch). Default: 10 000. |
cleanup_orphans_on_failure | boolean | false | Delete the Parquet data files this flush already uploaded when the snapshot commit *definitively* fails, so they do not accumulate as orphans. |
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