Skip to main content

Streaming Query Results

Documentation​

Streaming allows you to process large datasets without loading all results into memory at once, preventing out-of-memory errors and improving efficiency.

Key requirement: You must set streamResult: true in the execute options to enable streaming.

Modern Streaming with for await​

Traditional streaming uses event handlers like on("data") and on("end"). This example demonstrates the much simpler for await pattern, which makes streaming as easy as iterating over an array.

Prerequisites​

Example​

// Optional: TypeScript interface for strongly-typed results
interface Customer {
C_CUSTKEY: number;
C_NAME: string;
C_PHONE: string;
C_ACCTBAL: number;
}

// Execute query with streamResult: true (this enables streaming)
const { statement } = connection.execute<Customer>({
sqlText: `
SELECT C_CUSTKEY, C_NAME, C_PHONE, C_ACCTBAL
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER
WHERE C_MKTSEGMENT = ?
`,
binds: ['AUTOMOBILE'],
streamResult: true
});

// Create a stream (optionally specify start/end for a subset)
const stream = statement.streamRows({
start: 250,
end: 300
});

// Process results one row at a time with `for await`
for await (const row of stream) {
console.log(`Customer: ${row.C_NAME}, Balance: ${row.C_ACCTBAL}`);
}