Surendra MukkamallaEnterprise Data · Cloud · Agentic AI
Home›Enterprise Projects
Selected Work · Sanitized Architecture Case Study

Designing a Governed Enterprise Data & AI Platform

A practical architecture for bringing batch, incremental and CDC data into Snowflake, resolving enterprise identity, building stable Gold data products, and giving BI and AI agents governed access without turning the warehouse into a transactional system.

10–12 min read Snowflake CDC & Batch Identity Before Gold Semantic Views MCP & Agents
Portfolio / confidentiality note. This case study is based on enterprise architecture and engineering work I personally contributed to. To protect client confidentiality, organization names, proprietary source code, credentials, exact schemas, business rules, identifiers and sensitive operating details are intentionally omitted, renamed or generalized. Any public code linked from this page is a separate synthetic reference implementation created for demonstration.
A governed path from source systems to analytical intelligence Sources Operational DBsCRM / SaaSAPIsFilesEvents Ingestion BatchIncremental / APICDCStreaming / EventsOrchestration RAW CURATED ENTERPRISEIDENTITY GOLD Semantic + Governed Access Certified metrics · Semantic Views · Roles · Row Access · Masking · Audit Cortex analytical capabilities · Approved MCP / API tools BI / ReportingInternal + customer-safe Claude / AI AgentsMCP / API / Cortex tools

A recent enterprise architecture engagement reinforced a pattern I keep coming back to: the hard part is not simply getting data into Snowflake or placing an LLM on top of it. The real work is deciding where trusted analytical truth lives, how identity survives source-system change, what can safely be exposed, and how agents can use enterprise data without becoming uncontrolled database clients.

Real professional workThe architecture decisions, engineering patterns, trade-offs and responsibilities described here reflect enterprise work I performed or helped shape.
Sanitized for public useClient-specific names, exact schemas, identifiers, security details and proprietary implementation specifics are intentionally generalized.
Purpose of this pageThis is a portfolio case study showing the problem, architecture approach and engineering reasoning—not a copy of a client design document.
Public code boundaryAny companion code is clean-room reference code written separately with synthetic data; it is not client source code.

The requirement

The organization needed a modern enterprise data and AI foundation while moving from a legacy operational platform to a next-generation platform. Data was spread across operational databases, CRM, customer-success and support SaaS applications, APIs and file-based feeds. The warehouse existed, but the target state needed a more durable approach for ingestion, customer identity, trusted business data, governed reporting and AI-agent access.

The architecture also had to support multiple ingestion styles rather than forcing every source into one pattern: scheduled batch for latency-tolerant data, API or incremental extraction for SaaS platforms, CDC for operational databases where inserts, updates and deletes matter, and event-based ingestion where continuous processing is justified.

On the AI side, the requirement was equally important: an enterprise agent such as Claude should be able to use Snowflake for historical, cross-system and certified analytical context, while current operational state and writes remain with the systems that own those transactions. Internal users and future customer-facing experiences also needed clearly separated access boundaries.

What I designed

A source-aware ingestion strategy, layered Snowflake architecture, enterprise identity crosswalk, stable business Gold model, governed semantic/access layer, internal-versus-customer access model, and a hybrid agent architecture using approved MCP/API tools. Snowflake provides analytical intelligence; operational systems remain authoritative for current state and writes.

1. Start with capabilities, not a single ingestion tool

The first decision was not “Which connector do we standardize on?” It was to define a small set of ingestion capabilities and then choose the simplest reliable path for each source.

Batch

Best for small, latency-tolerant sources, reference datasets, or periodic extracts where a full refresh remains practical.

Incremental / API

Useful for SaaS platforms and APIs that expose modified timestamps, cursors, bulk APIs, or change endpoints.

CDC

For operational databases where inserts, updates and deletes need to be captured from a transaction/change mechanism with lower latency.

Events / Streaming

For event-oriented sources where the business needs continuous ingestion or event history rather than periodic snapshots.

This matters because orchestration and change capture are not the same thing. Airflow, for example, is excellent at schedules, dependencies, retries, backfills and workflow control, but it is not itself the transaction-log CDC engine. When true CDC is required, I would use a purpose-built change-capture mechanism and let the orchestration layer coordinate the surrounding workflow.

Choose the ingestion pattern by source capability, volume, freshness, recovery and operating model — not by forcing every source through the same technology.

Visual 1 — Source-specific ingestion, common Snowflake standards

Different sources can enter through different mechanisms while converging on the same platform contract.

Operational DBCRM / SaaSFiles / ExtractsEvents CDC EngineAPI / IncrementalBatch / Bulk LoadStreaming / Event SNOWFLAKE RAW CURATED source-aligned + ingestion metadata standardize · DQ · dedup · SCD

2. Raw → Curated → Identity → Gold

I use medallion principles, but I do not treat the layers as labels for folders. Each layer has a specific contract.

Raw — preserve source meaning

Land data close to the source with ingestion metadata, load timestamps, source identifiers and enough traceability to support replay or reconciliation. Raw can be snapshot-based, append-only or CDC-fed depending on the source.

Curated — make data trustworthy

Standardize data types and business keys, deduplicate, validate quality, reconcile source data, normalize legacy and next-generation schemas, and preserve history using SCD patterns where the business requires it.

Identity — resolve the enterprise customer

Map source-system customer/account identifiers to a durable enterprise identity before downstream business metrics rely on them.

Gold — model stable business concepts

Create governed data products around Customer, Revenue, Invoice, Usage, Adoption, Support, Journey, Risk and other business domains rather than mirroring operational schemas.

CDC is not SCD

CDC answers “what changed in the source?” SCD answers “how should warehouse history be represented?” A pipeline may use both, but they solve different problems.

3. Identity before Gold

The most important design choice in this architecture was to avoid making a legacy customer ID, next-generation customer ID, or CRM account ID the enterprise key.

During a platform migration, the same real-world customer can exist under different identifiers across operational applications, CRM, customer-success platforms and support systems. If each Gold model independently joins those source keys, the organization ends up with multiple versions of customer truth.

Instead, I designed a persistent enterprise identity crosswalk:

ENTERPRISE_CUSTOMER_ID | SOURCE_SYSTEM | SOURCE_CUSTOMER_ID | MATCH_STATUS | MATCH_METHOD EC000001 | LEGACY | C123 | MATCHED | TRUSTED_KEY EC000001 | NEXT | N984 | MATCHED | MIGRATION_MAP EC000001 | CRM | A557 | MATCHED | ACCOUNT_KEY EC000001 | SUCCESS | S221 | MATCHED | TRUSTED_KEY

High-confidence records map to the durable enterprise identity. Ambiguous records remain explicitly unresolved rather than being forced into a false match. That unresolved population is measurable and can be addressed through stewardship.

Visual 2 — Enterprise identity protects Gold from source migration

Source keys can change while the enterprise identity and downstream business contract stay stable.

Legacy ID · C123Next ID · N984CRM ID · A557Success ID · S221 ENTERPRISE IDENTITY EC000001 crosswalk + match status + history STABLE GOLD Customer · RevenueUsage · JourneyCertified Metrics Legacy declines · Next grows · Gold contract remains unchanged

4. Gold should be stable even when source systems are not

During a legacy-to-next-generation migration, source schemas will drift. Field names change, business rules move, and one system may temporarily contain data the other does not. I do not want every report, semantic model or AI agent to absorb that volatility.

The pattern I use is to isolate source differences below Gold:

Legacy schema ──► Legacy adapter ──┐ ├──► Canonical / Curated ─► Identity ─► Stable Gold Next schema ─────► Next adapter ───┘

As migration progresses, the legacy adapter can eventually be retired without changing the business-facing contract. This is one of the strongest reasons to model Gold around durable business concepts instead of physical source tables.

5. Add a semantic layer for both BI and AI

Trusted tables alone are not enough. Business terms such as revenue, active customer, adoption, churn risk or service utilization need consistent definitions. Without a semantic layer, a BI dashboard and an AI agent can each produce technically valid SQL while still answering the business question differently.

I therefore place governed semantic definitions above Gold. In Snowflake, Semantic Views and Cortex analytical capabilities can provide a governed path for natural-language questions while keeping the underlying business meaning explicit.

The goal is not “AI can query the database.”

The goal is that BI and AI consume the same trusted business definitions, certified metrics and access policies.

6. Internal and customer access need different boundaries

Security is not “roles versus views.” They solve different parts of the problem. Roles answer who can access something. Governed views, data products and semantic models define what is exposed. Row-access and masking policies constrain which rows and sensitive attributes are visible.

I would typically maintain a common trusted core and create explicit consumption boundaries:

Visual 3 — Same trusted core, different access contracts

Internal analytics can be broader; customer-facing access is constrained to approved objects and tenant-scoped data.

GOVERNED GOLD INTERNAL ACCESS Internal views / semantic modelsInternal roles + policiesCross-customer BI + agents CUSTOMER-SAFE ACCESS Approved views / semantic modelTenant-scoped role / policyCustomer app + customer agent

I would not automatically create one Semantic View per customer. A more scalable pattern is a reusable customer-facing semantic model with tenant-aware security, while internal users have access to broader metrics and cross-customer information when appropriate.

Separate virtual warehouses can still be valuable for BI, AI and customer-facing workloads because they improve workload isolation, scaling and cost attribution. I do not treat the warehouse itself as the primary security boundary.

7. Agent architecture: read and reason in Snowflake, verify and act in the source

The most useful design rule for AI agents is also one of the simplest:

Read and reason in Snowflake; verify and act in the source system.

I designed the agent path with a clear separation of authority. The enterprise agent sits outside the warehouse and receives an authenticated request. A governed tool/routing layer then decides whether the request needs analytical context from Snowflake or current operational state from a source system. The agent is never treated as an unrestricted database user.

For historical, cross-system or certified questions, the agent uses a governed Snowflake path backed by Gold data, semantic definitions and approved analytical tools. For anything that depends on the latest operational state—or requires a write—the agent calls the owning application's MCP/API, re-checks the current state where necessary, applies that system's authorization and business rules, and records the outcome.

For example, the agent can identify a high-value customer with declining adoption from governed warehouse data. If the next step is to change a CRM status, create a support case or update an operational record, it does not write to Snowflake and wait for the change to propagate. It calls the source directly, verifies the state, executes the action with a scoped identity, uses idempotency to protect retries, and links the action back to the original request with a common run or correlation ID.

Visual 4 — Hybrid agent control plane

The agent has two governed paths, each with a different authority.

CLAUDE / ENTERPRISE AGENT identity · policy · routing · audit GOVERNED SNOWFLAKE PATH Historical · Cross-system · CertifiedMCP / API / Cortex analytical toolsSemantic Views → Governed GoldAuthority: analytical truth SOURCE MCP / API PATH Current state · Verification · ActionsCRM / Operational App / SaaSScoped identity · Idempotency · AuditAuthority: transaction + write

8. MCP and agents: how the access pattern was designed

MCP became useful because it gives an external agent a standard way to discover and invoke approved tools, but I kept the responsibilities deliberately separate. Claude or another enterprise agent provides reasoning and orchestration. MCP is the tool interface. Snowflake and the source systems still enforce authentication, authorization and data permissions.

The design supports two Snowflake access patterns without unnecessarily stacking MCP layers. If the organization operates an external MCP service, that service can connect to Snowflake using normal authenticated Snowflake connectivity and a tightly scoped role. In that pattern, there is no requirement to create a second MCP server inside Snowflake. Alternatively, Snowflake can expose its own managed MCP endpoint and approved Snowflake-native analytical capabilities can be published through that endpoint.

That distinction matters because the architecture should not automatically become Claude → external MCP → Snowflake MCP → Snowflake. The cleaner implementation is to choose one governed Snowflake access path and keep source-system MCP/API tools separate for current-state verification and actions.

It is also important not to confuse three different concepts:

Claude / Enterprise Agent

The reasoning and orchestration layer deciding which approved capability to use.

Cortex Agent

An optional Snowflake-side agent capability for analytical reasoning and tool use within the Snowflake environment.

MCP

The protocol/interface through which an agent discovers and invokes approved tools.

Snowflake Security

Authentication, roles, grants, row policies, masking and governed objects remain responsible for authorization.

There are also two valid integration patterns that should not be accidentally drawn as mandatory layers on top of each other.

Pattern A Claude → External MCP → Snowflake Connector / SQL API → Snowflake Snowflake-managed MCP required? NO Pattern B Claude → Snowflake-managed MCP → Approved Cortex / Semantic Tools → Snowflake Snowflake-managed MCP required? YES

In Pattern A, an externally hosted MCP service connects to Snowflake using normal authenticated connectivity and a tightly scoped Snowflake role. In Pattern B, Snowflake itself exposes the managed MCP endpoint. Which one is better depends on governance, identity, operational ownership, and how much Snowflake-native AI capability the organization wants to expose.

Visual 5 — Two valid MCP patterns, not two mandatory MCP layers

The external agent can use either a custom external MCP service with normal Snowflake connectivity, or a Snowflake-managed MCP endpoint.

CLAUDE / ENTERPRISE AGENT PATTERN A — EXTERNAL MCP External MCP service Snowflake connector / SQL API Scoped Snowflake role + policies No Snowflake MCP required PATTERN B — SNOWFLAKE MCP Snowflake-managed MCP endpoint Approved Cortex / semantic tools Snowflake roles + policies Snowflake MCP configured

How the agent flow works end to end

1. Authenticate

The user or service enters through a trusted identity. The agent does not invent or self-assign access.

2. Route

The agent selects an approved analytical or operational tool based on the request.

3. Enforce

The MCP/API tool and Snowflake or source system enforce scoped roles, tenant boundaries and permissions.

4. Audit

A shared run ID links model usage, Snowflake queries, tool calls, source actions and outcomes.

This is also why MCP is not the security boundary. It standardizes the tool call, but the tool server must validate identity and scope, and the underlying platform still has to enforce the final authorization.

9. Design observability and cost attribution into the architecture

A production AI/data platform needs to answer more than “Did the query run?” I use a shared correlation or run identifier across the agent request, model call, Snowflake query and source-system action where practical.

That creates a trace from user or service identity → agent/tool call → analytical query → source action → outcome. It also enables meaningful cost attribution across three different cost domains:

Snowflake platform

Warehouse credits, serverless/Cortex services, storage and data movement where applicable.

AI/model usage

Input/output tokens, model selection, retries and AI service consumption.

External runtime

Agent hosting, APIs, MCP services, serverless compute, logging and observability.

Business workflow

The useful unit is often cost per successful workflow or decision, not simply cost per query.

10. What I would validate before locking products

Good architecture should make irreversible decisions deliberately and postpone reversible implementation choices until there is evidence. I would validate the following before standardizing technology:

Source estate

Underlying database technologies, API/change capabilities, volumes, growth, freshness expectations, delete handling and recovery requirements.

Customer identity

Reliable shared identifiers, migration mappings, unresolved populations, match confidence and stewardship needs.

Existing warehouse assets

Which Gold models can be retained, which need refactoring, and which lack enough trust or lineage to preserve.

Access and AI operating model

Internal versus customer consumption, tenant isolation, agent identity, human approval, source actions, operational state and audit requirements.

This keeps technologies such as Openflow, external orchestration, dedicated CDC tooling, Cortex Agent, a custom MCP service, or a dedicated MDM platform in the right place: they are implementation choices that should earn their way into the architecture based on requirements.

Architecture principles I would carry forward

1. Source-specific ingestion, common platform standards.

Batch, incremental, CDC and events can coexist without fragmenting the downstream architecture.

2. Identity before Gold.

Do not let source-system keys become permanent enterprise truth during a major platform migration.

3. Stable business contracts above volatile source schemas.

Absorb legacy-versus-next differences below Gold.

4. BI and AI should share trusted definitions.

Semantic governance is more valuable than simply allowing a model to generate SQL.

5. Analytical authority and transactional authority are different.

Snowflake is the governed analytical plane; operational systems retain current state and write authority.

6. MCP does not replace authorization.

The tool interface can be standardized while security remains enforced by identity, roles, policies and source permissions.

What comes next

I do not publish client source code. The companion Architecture Lab uses a clean-room reference implementation written separately with synthetic data, generic source names and simplified business rules. Its purpose is to demonstrate the engineering pattern without reproducing a client's implementation.

Open the companion reference implementation →

Public reference implementation scope

Example source configs · Batch + CDC ingestion patterns · Raw/Curated SQL · Enterprise identity crosswalk · Gold data product · Semantic View · customer-safe row policy · external MCP tool · agent read-versus-action routing · query/run tagging.

The broader lesson is simple: enterprise AI becomes much easier to govern when the data architecture already knows what is trusted, who is allowed to see it, and which system is authoritative for an action.

← HomepageEnterprise ProjectsArchitecture LabTechnical InsightsContact