On This Page

Introduction

Data ingestion is the starting point of every data platform. It defines how fast data becomes available, how reliable downstream pipelines are, and how much the platform costs to operate. Most performance and stability problems seen later in analytics can be traced back to design decisions made at ingestion time.

Snowflake supports multiple ingestion patterns natively: from batch, micro-batch, streaming, to ETL/ELT tool integration. The challenge is not how to ingest data into Snowflake but which pattern is appropriate for each workload. This post provides a clear framework for making that decision.

Ingestion is a Design Decision

Many organizations standardize on a single ingestion approach. Everything becomes either batch or streaming. This leads to predictable outcomes: unnecessary cost and complexity or data that arrives too late to be useful.

Snowflake treats ingestion as a spectrum, not a binary choice. Patterns can be mixed across workloads based on freshness requirements, data volume, and source system capabilities.

Ingestion Patterns at a Glance

All ingestion in Snowflake follows the same logical flow: data arrives from a source system, lands in a stage or is sent via API, and is loaded into a Snowflake table. The ingestion method determines when and how that movement happens from large periodic file loads to continuous row-level streaming. Each has tradeoffs in latency, cost, complexity, and operational characteristics.

Pattern Latency Complexity Best For
COPY INTO Hours to minutes Low Large batch files, bulk historical loads
Snowpipe Minutes Low-Medium Frequent small files, event-driven micro-batch
Snowpipe Streaming Seconds Medium-High Operational analytics, alerting, real-time feeds
Snowpipe Streaming HPA Seconds (under 10s) High Very high-throughput event streams (up to 10 GB/s per table)
OpenFlow Continuous Medium Streaming from Kafka, CDC sources, event brokers
ETL/ELT Tools Varies by tool Low-Medium SaaS sources, ERP, CRM, database replication

COPY INTO: Batch Ingestion

COPY INTO is the foundation of Snowflake ingestion. It loads data from staged files into tables, giving you full control over timing, orchestration, error handling, and optional transformation at load time using SELECT expressions.

COPY INTO is simple, predictable, and cost-efficient at scale. It supports structured files (CSV, Parquet, Avro, ORC), semi-structured (JSON, XML), and it is the standard mechanism for loading unstructured data like product images, invoice PDFs, and scanned documents.

How it works:

  • Files are uploaded to a stage either cloud or internal
  • COPY INTO <table> command reads them into a target table using a virtual warehouse.

Snowpipe: Event-Driven Micro-Batch Ingestion

Snowpipe automates COPY INTO. Instead of scheduling loads, Snowflake listens for new files and loads them as soon as they appear, typically within minutes of arrival.

How it works:

  • A pipe object wraps a COPY INTO statement
  • Cloud storage event notifications (AWS SNS/SQS, Azure Event Grid, GCS Pub/Sub) trigger Snowpipe when new files appear
  • Snowpipe manages micro-batch loading using serverless compute

Snowpipe is best understood as micro-batch ingestion. It sits between traditional batch and true streaming. One trade-off worth noting: serverless ingestion costs are harder to monitor than warehouse-based workloads. Unlike virtual warehouses where credit consumption is immediately visible, Snowpipe compute is managed by Snowflake and tracked separately via PIPE_USAGE_HISTORY. Teams without active cost monitoring in place can accumulate meaningful serverless spending without realizing it.

Snowpipe Streaming: True Streaming Ingestion

Snowpipe Streaming removes files from the equation entirely. Client applications write rows directly to Snowflake tables via SDKs or REST API, with data ingested continuously and typically queryable within seconds.

High-Performance Architecture (HPA) - HPA is the recommended architecture for Snowpipe Streaming (GA since September 2025). It uses a server-side PIPE object as the entry point, which manages schema validation, transformations (using COPY INTO syntax), and ingestion into the target table. New Java, Python, and Node.js SDKs (built on a shared Rust core) and a REST API support throughput up to 10 GB per second per table with ingest-to-query latency typically under 10 seconds. Well suited for high-volume event streams, IoT sensor feeds, and real-time analytics dashboards.

Classic Architecture - The legacy architecture where applications use the Java SDK to open a channel directly to a target table and write rows without a PIPE object. Each channel maintains its own offset, enabling parallel ingestion from multiple producers. Suitable for lower-volume operational analytics, alerting, and anomaly detection.

Note: Classic is being superseded by HPA for new workloads.

Important trade-off: Snowpipe Streaming incurs higher costs than file-based ingestion and should be used where business value justifies the higher cost and operational discipline.

ETL/ELT Tools: Managed Integrations for SaaS and Operational System

ETL/ELT tools like Fivetran, Airbyte, Matillion, Informatica, and others are the standard approach for ingesting data from SaaS platforms, ERP systems, CRMs, and operational databases. They connect via native APIs, JDBC/ODBC, or database replication protocols, handle schema mapping and change detection, and deliver data to Snowflake on a configurable schedule or continuously.

They complement Snowflake's native ingestion methods rather than replacing them. COPY INTO and Snowpipe handle file-based and event-driven workloads well. ETL/ELT tools handle source system connectivity, particularly for systems that do not produce files or expose streaming APIs and manage the operational complexity of keeping schemas synchronized as source systems evolve.

  • Database replication (CDC-based): Tools like Fivetran and Debezium read transaction logs from operational databases like ERP, OMS, inventory systems and replicate row-level changes into Snowflake with low latency.
  • SaaS connectors: pre-built connectors for Salesforce, Shopify, Google Analytics, and hundreds of other platforms handle incremental extraction without custom development.
  • Transformation-layer tools: ELT tools like Matillion run transformations inside Snowflake after landing raw data, keeping processing within the platform.

Why ELT is preferred over ETL in the modern data stack:

In the modern data stack, ELT is preferred over ETL because cloud warehouses like Snowflake provide an elastic, scalable compute that makes it more efficient to transform data after it lands rather than before. Raw data is loaded first and preserved in its original form, enabling reprocessing and new use cases without re-extraction. Transformation logic lives inside the warehouse as SQL or dbt models, which simplifies pipeline architecture, allows faster iteration, and lets ingestion and analytics teams work independently - extract-and-load stays lightweight while transformation evolves separately without redeploying upstream pipelines.

OpenFlow: Streaming from Event Brokers and CDC Sources

OpenFlow is Snowflake's managed, NiFi-based connector framework for continuous data movement between Snowflake and external systems. It supports inbound ingestion from Kafka, Confluent, Amazon MSK, and CDC sources into Snowflake (using Snowpipe Streaming HPA under the hood), as well as outbound CDC from Snowflake to Kafka. Unlike Snowpipe Streaming, which requires application-level SDK integration, OpenFlow operates at the infrastructure level reading from topics or streams and writing into Snowflake without application code changes. Pre-built connectors handle authentication, offset management, and delivery guarantees, while the NiFi-based platform allows for custom flows, transformations, and dead-letter queue handling.

File Formats, Stages, and Storage Integrations

File-based ingestion methods (COPY INTO and Snowpipe) depend on three foundational constructs:

  • Stages: Logical pointers for cloud storage (S3, GCS, Azure Blob) or Snowflake-managed internal storage. Structured files, semi-structured payloads, and unstructured assets all land in stages before ingestion.
  • File formats: Named objects defining how Snowflake parses incoming files in terms of delimiters, compression, null handling, date formats. Reusable across pipelines rather than defined inline on every COPY statement.
  • Storage integrations: Secure connections between Snowflake and cloud storage using IAM roles (AWS) or service principals (Azure), or service accounts (GCP) is the correct approach for production rather than embedding credentials in stage definitions.

Best Practices

  • Start simple: default to batch unless latency demands otherwise - COPY INTO and Snowpipe cover most enterprise ingestion requirements at the lowest cost. Streaming complexity is only justified when low latency availability has clear business value.
  • Separate ingestion from transformation - Raw data lands in staging tables; transformation happens downstream in dbt or Snowflake Tasks. Mixing the two makes pipelines brittle and harder to reprocess.
  • Build observability from the start - Monitor PIPE_USAGE_HISTORY for Snowpipe, LOAD_HISTORY for COPY INTO, and set up resource monitors for streaming workloads. Ingestion cost and failure visibility should be part of the initial design, not added after the first incident.

Common Mistakes

  • Streaming pipelines designed on dev volumes - A pipeline handling 100 events/second in dev may face channel contention and micro-partition fragmentation at 100,000/second in production. Load test at representative volume before go-live.
  • No error handling on COPY INTO - Without ON_ERROR configuration, the default behavior (ABORT_STATEMENT) stops the entire load on the first error. If COPY jobs are not actively monitored, these failures can go unnoticed in production while data stops flowing. In dev with clean files, this never surfaces.
  • Standardizing one ingestion pattern for all sources - File-based workloads, SaaS platforms, operational databases, and event streams have fundamentally different characteristics. Forcing all sources through a single pattern introduces unnecessary latency, cost, or complexity.

Operational & Business Impact

A well-designed ingestion strategy delivers value in four dimensions:

  • Fresher data, faster decisions - Matching ingestion patterns to freshness requirements makes real-time inventory visibility, live POS reconciliation, and same-day margin reporting achievable without overengineering every pipeline.
  • Lower operating costs - Serverless Snowpipe eliminates idle warehouse cost for file-based workloads. Reserving streaming for workloads that genuinely need it avoids unnecessary overhead.
  • Reliable, scalable pipelines - Error handling, monitoring, and clean separation of raw and transformed layers produce architectures that remain stable as data volumes and source complexity grow.
  • Faster onboarding - Established patterns per workload type - file, event, SaaS, database - mean new sources are onboarded consistently rather than evaluated from scratch each time.
LinkedIn X/Twitter Facebook
×

Start a Conversation

Our team will get back to you shortly.