Skip to main content
Version: 3.0 (next)

Snowflake Nodes

Snowflake is a cloud-native data warehouse platform. MaestroHub supports running SQL queries, executing statements, and loading data into your Snowflake warehouse using connector nodes.

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.
Snowflake Query node configuration

Snowflake Query Node

Snowflake Query Node​

Execute SQL queries against your Snowflake data warehouse with full parameter binding.

Supported Function Types:

Function NamePurposeCommon Use Cases
Execute QueryRun parameterized SQL SELECT against SnowflakeAnalytics dashboards, ETL reads, cross-schema joins, data quality checks
Snowflake Execute node configuration

Snowflake Execute Node

Snowflake Execute Node​

Execute DML/DDL statements against your Snowflake data warehouse.

Supported Function Types:

Function NamePurposeCommon Use Cases
Execute StatementRun INSERT, UPDATE, DELETE, CREATE, ALTER, DROP statementsData modifications, schema changes, cleanup operations
Snowflake Write node configuration

Snowflake Write Node

Snowflake Write Node​

Bulk-load data into a Snowflake table with automatic schema detection.

Supported Function Types:

Function NamePurposeCommon Use Cases
Write DataInsert rows into a table with auto-detection and batchingPipeline data loading, ETL writes, sensor data ingestion

Output​

Every Snowflake node delivers its data under result, and execution facts (success, functionId, durationMs, timestamp) under _metadata:

NodeExpressionDescription
Query$node["Name"].result.rowsThe result rows — one object per row keyed by column name, up to the result limits — the 20,000-row cap and the 25 MB size budget by default. $node["Name"].result.rows[0].<column> reads a value
$node["Name"]._metadata.truncatedtrue when the query hit a result limit and rows holds only what fit — the first 20,000 rows at the default cap, or fewer when the size budget tripped first
$node["Name"]._metadata.truncatedByWhich limit cut the result — rows or bytes. Present only when truncated is true
$node["Name"].result.rowCountHow many rows were delivered — the same as result.rows.length
Execute$node["Name"].result.rowsAffectedRows the statement affected, as the driver reports it
Write$node["Name"].result.rowsInsertedRows inserted across every batch of this execution

The call's own facts ride along under _metadata next to the four every connected node carries. A Query delivers $node["Name"]._metadata.driver (the driver name), $node["Name"]._metadata.query (the SQL that ran) , $node["Name"]._metadata.truncated — true when the query hit a result limit and the rows were cut short — and, only then, $node["Name"]._metadata.truncatedBy (rows or bytes: which limit did it). An Execute delivers _metadata.driver and _metadata.query. A Write delivers _metadata.driver, _metadata.table, _metadata.batchSize, _metadata.totalRows (the rows it was given) and _metadata.matchedColumns (the table columns the data was mapped onto), plus _metadata.skippedFields when the data carried fields the table has no column for, or _metadata.schemaEvolution when schema evolution is on and the write added them as columns; when it created the table first, it delivers _metadata.tableCreated and the _metadata.columns it created instead of matchedColumns.

Check truncated before you aggregate

A query stopped at the row limit returns a shorter rows array that looks exactly like a complete result. Nothing fails and nothing warns, so a downstream sum, average or count is silently wrong. The limits are the connectors module's queryResultMaxRows (20,000 rows by default) and queryResultMaxBytes (25 MB by default), whichever trips first, which is why _metadata.truncated is delivered on every query — branch on it, or narrow the query, rather than assuming the read was complete; _metadata.truncatedBy says which limit did it.