Skip to main content
Version: 3.0 (next)

Bigtable Nodes

Google Cloud Bigtable is GCP's petabyte-scale NoSQL wide-column store. MaestroHub provides five nodes covering the single-row operations, the range scan and the bulk write, so a pipeline can look a row up, scan a device's history, land a batch, or clean up — all against the table its connection profile names.

Cells cross the boundary as plain JSON. A read delivers a list of cell objects, each with its family, column, value and the cell's own timestamp, so a downstream node reads result.cells[0].value rather than a protobuf field.

Configuration Quick Reference​

FieldWhat you chooseDetails
ParametersConnection, Function, Function Parameters, Timeout OverrideSelect the connection profile (which fixes the project, instance and table), the function, values for any ((parameter)) the function uses, and optionally a timeout override.
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.
Bigtable Read Row node configuration

Bigtable Read Row Node

Bigtable Read Row Node​

Read one row by its exact row key, optionally narrowed to particular column families, columns or cell versions.

A key that matches nothing is not an error. The node succeeds with result.found false and no cells, so a pipeline branches on the lookup instead of routing it through failure handling.

Supported Function Types:

Function NamePurposeCommon Use Cases
Read RowRead a single row by key, optionally filtered to a family, a column or a version countEnrichment lookups, reading a machine's current state, existence checks before a write

Bigtable Read Rows node configuration

Bigtable Read Rows Node

Bigtable Read Rows Node​

Scan a contiguous run of rows — everything under a key prefix, or a half-open start-to-end range.

Bigtable stores rows sorted by key, so a well-chosen prefix reads only the tablets that hold it. The row cap and every family, column and version filter are applied by Bigtable itself, so nothing is streamed and then thrown away.

Supported Function Types:

Function NamePurposeCommon Use Cases
Read RowsScan a prefix or a key range with a server-side row cap and filtersTime-window reads per device, replaying a day of history, exporting a small lookup table

Bigtable Write Row node configuration

Bigtable Write Row Node

Bigtable Write Row Node​

Write a set of cells into one row, creating the row when it does not exist.

Columns the write does not name are left alone, so this both inserts and patches. The cells carry an explicit timestamp, which is what makes a buffered write overwrite the same cells on replay rather than stack another version behind them.

Supported Function Types:

Function NamePurposeCommon Use Cases
Write RowWrite cells into a single row at an explicit timestampPersisting a reading, patching one column, backfilling a historical cell

Bigtable Write Rows node configuration

Bigtable Write Rows Node

Bigtable Write Rows Node​

Write cells into many rows in a single bulk call.

This is the shape a time-series pipeline needs, where one upstream batch turns into hundreds of rows. Any row Bigtable refuses fails the whole operation and names the rows that failed, so nothing is silently half-written — and because the writes carry explicit timestamps, retrying the whole batch is safe.

Supported Function Types:

Function NamePurposeCommon Use Cases
Write RowsWrite many rows in one bulk call, each optionally at its own timestampLanding a window of readings, fanning a transform's array into the table, backfilling a day of history

Bigtable Delete Row node configuration

Bigtable Delete Row Node

Bigtable Delete Row Node​

Delete every cell in a row, or — when a column family is named — only that family's cells.

Deleting a row that does not exist succeeds and changes nothing, which makes this node safe to replay.

Supported Function Types:

Function NamePurposeCommon Use Cases
Delete RowRemove a whole row, or scope the delete to one column familyRetention cleanup, erasure requests, clearing a staging family after a step

Paging through a scan​

Limit is sent to Bigtable, so it bounds what the service reads rather than trimming a full result set afterwards. A Bigtable range is routinely millions of rows, so this is the difference between a bounded read and one whose cost scales with the table.

result.truncated says the scan stopped at the limit. To continue, set the next run's Start Key just past the last rowKey delivered — there is no opaque cursor, because row keys are the cursor.

truncated is true exactly when a full page came back, so it is also true on the last page of a range that happens to hold exactly Limit rows. A follow-up scan returning nothing is the definitive end.

Output​

Every Bigtable node delivers its data under result, and execution facts under _metadata:

NodeExpressionDescription
All nodes$node["Name"].result.tableThe table the operation ran against
Read Row$node["Name"].result.foundWhether a row exists at that key — a miss is a normal result, so branch on this rather than on failure
$node["Name"].result.rowKeyThe row key that was asked for
$node["Name"].result.cellsOne entry per cell version returned, empty when found is false. Each carries family, column, value and timestamp — the cell's own Bigtable timestamp, which for a time-series table is the sample time rather than the write time. $node["Name"].result.cells[0].value reads a value
Read Rows$node["Name"].result.rowsThe matching rows in key order, each with its own rowKey and cells. $node["Name"].result.rows[0].cells[0].value reads a value
$node["Name"].result.rowCountHow many rows were delivered
$node["Name"].result.truncatedWhether the scan stopped at the row limit — resume from the last rowKey delivered
Write Row$node["Name"].result.rowKeyThe row the cells were written to
$node["Name"].result.cellCountHow many cells the write set — worth checking when a templated cells object came out smaller than expected
Write Rows$node["Name"].result.rowCountHow many rows the bulk write landed. Always every row, since any per-row refusal fails the whole operation
$node["Name"].result.cellCountHow many cells those rows carried in total
Delete Row$node["Name"].result.rowKeyThe row that was deleted — deleting an absent row succeeds and changes nothing
$node["Name"].result.columnFamilyThe single family whose cells were deleted, present only when the delete was scoped to one

Alongside the engine's own success, functionId, durationMs and timestamp, each node carries the connector's facts about the call:

ExpressionDescription
$node["Name"]._metadata.methodThe operation that ran, e.g. bigtable.readRows
$node["Name"]._metadata.protocolAlways bigtable
$node["Name"]._metadata.connectionIdThe connection profile the call went through

Cell values are text by default and base64 when the function's Value Encoding says so, so a binary column survives the round trip rather than being mangled into UTF-8. See the connection guide for when to use which.