Ingestion Layer → Protocols Supported

Batch Upload (S3, SFTP, API)

The path for large, scheduled data drops — historical exports, partner files, and bulk API pulls that don't fit an event-at-a-time model.

High-Level Design

Batch Upload handles scale and history rather than real-time delivery.

Data Source
Partner / Legacy System
Bulk file export or scheduled API pull
→
Ingestion
Batch Upload
Azure Blob Storage / SFTP landing zone
→
Processing
Blob-triggered Azure Function
Validation and batch ingestion
→
Foundation
Data Lakehouse
Raw zone, promoted to curated
→
Intelligence
.NET Core Analytics API
Backfilled into unified profile
→
Activation
Batch-driven Segment Refresh
Downstream activation on a schedule

💼 Business Context

  • Some data simply arrives in bulk, on a schedule, from systems with no real-time integration option
  • Enables efficient historical backfill when onboarding a new source, rather than replaying millions of individual events
  • Owned by Data Engineering

🔌 Technical Overview

Batch Upload accepts files via Azure Blob Storage (direct upload or S3-compatible API), SFTP (for partners who require it, backed by Azure Blob Storage's native SFTP support), or a bulk API pull triggered on a schedule. A Blob-triggered .NET Core Azure Function validates and streams the file's records through Cxos.Ingestion.Client in batches — the same underlying ingestion contract as every real-time transport, just delivered on a schedule instead of continuously.

Supported Paths

Azure Blob Storage (S3-compatible API) SFTP Scheduled bulk API pull

💾 Batch Job Summary

{
  "batch_id": "batch_20260801_0300",
  "path": "sftp",
  "file": "partner_export_2026-08-01.csv",
  "rows_ingested": 184213,
  "rows_quarantined": 12,
  "duration_seconds": 94
}

🔗 Integration Points

  • Azure Blob Storage — primary landing zone, S3-compatible API for partners already using that pattern
  • SFTP endpoint — Azure Blob Storage's native SFTP support for partners requiring it
  • Blob-triggered Azure Function (.NET Core) — validation and batch ingestion
  • Cxos.Ingestion.Client NuGet package — batch mode, same contract as real-time transports

🧰 Services Consumed

⚠️ Non-Functional Considerations

  • Scale: large files are streamed and chunked rather than loaded into memory, supporting multi-million-row batches
  • Latency: inherently batch — processed on file arrival or schedule, not real-time
  • Reliability: partial-batch failures quarantine only the affected rows, not the whole file
  • Security/Privacy: SFTP/Blob credentials are scoped per-partner and rotated on a schedule via Azure Key Vault

🎯 Enterprise Example

A newly onboarded partner delivers three years of historical transaction data as a single SFTP file drop. Batch Upload validates and ingests 8M+ rows overnight, giving the Identity API a complete historical view before the partner's real-time integration even goes live.

← Back to Protocols Supported