Skip to main content
Version: 3.0

Apache Iceberg Nodes

Append rows to Apache Iceberg tables on S3 or Google Cloud Storage, one atomic snapshot per execution, committed through an Iceberg REST catalog or AWS Glue.

Needs
An Apache Iceberg connection
Operations
Append to Table
Limits
Appends only; batch rows with a Buffer node

Apache Iceberg nodes write pipeline rows into Iceberg tables that Spark, Trino, Athena, Snowflake, BigQuery and DuckDB read through the same catalog. They connect through your configured Apache Iceberg connections.

Configuration Quick Reference​

FieldWhat you chooseDetails
ParametersConnection, Function, Function Parameters, Timeout OverrideSelect the connection profile, function, configure function parameters with expression support, and optionally override timeout.
SettingsDescription, Timeout (seconds), Retry on Timeout, Retry on Fail, On ErrorNode description, maximum execution time, retry behavior on timeout or failure, and error handling strategy. All execution settings default to pipeline-level values.

Table Operations​

Apache Iceberg Append to Table Node​

Apache Iceberg Append to Table nodeApache Iceberg Append to Table node

Apache Iceberg Append to Table Node

Write pipeline rows into an Iceberg table as one snapshot, committed through the catalog. The rows of an execution land together or not at all, and are queryable from every engine as soon as the node finishes. The first write creates the table.

Supported Function Types:

Function NamePurposeCommon Use Cases
Append to TableAppend rows to an Iceberg tableStreaming UNS readings into a lakehouse table queried from Trino or Athena

Node Configuration​

ParameterTypeRequiredDescription
ConnectionSelectionYesApache Iceberg connection profile to use
FunctionSelectionYesAppend to Table function from the selected connection
Function ParametersDynamicVariesAuto-populated from the function schema (namespace, table, data, columns, partitionColumn, partitionBy). See your Apache Iceberg connection functions for full parameter details.
Timeout OverrideNumber (seconds)NoOverride the default function timeout

data takes one row (an object) or a batch (an array of objects). Bind it to the rows an upstream node produces, for example {{ $node["Buffer"].result }}.

Batch rows before the node

Every execution writes a data file, a manifest, a manifest list and a new metadata file, and adds a snapshot. Put a Buffer node in front so each write carries hundreds of rows, not one, and expire old snapshots in your catalog or engine.

Output Structure​

{
"result": {
"table": "plant_ops.sensor_readings",
"committed": true,
"created": false,
"snapshotId": "4417203518092265113",
"sequenceNumber": 43,
"rowsWritten": 500,
"dataFiles": 1,
"bytesWritten": 18432,
"parseFailures": 0,
"snapshots": 43
},
"_metadata": { "success": true, "functionId": "<function-id>", "durationMs": 820, "timestamp": "2026-11-02T08:00:00Z" }
}
FieldTypeDescription
result.tablestringThe table's namespace and name
result.committedbooleanWhether rows were committed; false only when the input carried no rows
result.createdbooleanWhether this execution created the table (when committed)
result.snapshotIdstringThe snapshot this execution committed, as text (Iceberg snapshot IDs are larger than a JSON number keeps exactly); on a replay, the snapshot that already holds its rows (when committed)
result.sequenceNumbernumberThe sequence number of snapshotId (when committed)
result.rowsWrittennumberRows written; 0 on a replay
result.dataFilesnumberData files this execution added (when committed, and not on a replay)
result.bytesWrittennumberSize of the data files this execution added (when committed, and not on a replay)
result.parseFailuresnumberValues that did not parse as their column's type and were written as null. The first failure in each column of a table is also logged as a warning
result.snapshotsnumberSnapshots the table holds after this execution (when committed). Each execution adds one; expire old snapshots in your catalog or engine
result.alreadyCommittedbooleanPresent and true when this execution is a replay of a write the table already holds: nothing was written
result.ignoredFieldsarrayRow fields left out because no column matches them; present only when there are some. The first time each field is left out is also logged as a warning
result.warningstringPresent once the table holds more than 10,000 snapshots, saying to expire them and batch rows
A replayed execution lands once

When store-and-forward, Retry on Fail or a dead-letter replay sends a write again, the table may already hold its rows. The connector recognises that from the write's key, recorded in the snapshot summary as maestrohub.write-key, and answers with alreadyCommitted: true instead of appending a second copy, for as long as that snapshot is kept. An execution whose commit got no answer fails as retryable; its retry finds the key if the commit had landed.


Settings Tab​

All Apache Iceberg node types share the same Settings tab:

SettingTypeDefaultDescription
DescriptionText-Optional description displayed on the node
Timeout (seconds)NumberPipeline defaultMaximum time the node may run before timing out
Retry on TimeoutTogglePipeline defaultAutomatically retry the node if it times out
Retry on FailTogglePipeline defaultAutomatically retry the node if it fails
On ErrorSelectionPipeline defaultError strategy: Pipeline Default (the pipeline's Error Handling setting), Stop Pipeline or Continue Execution

When left at their defaults, these settings inherit from the pipeline-level execution configuration.