DEA-C02 — Snowflake SnowPro Advanced: Data Engineer Cheat Sheet

Compact DEA-C02 Cheat sheet for Snowflake data engineering patterns, pipelines, performance, security, and operations.

Use the tables for a quick pre-exam check. Expand a topic’s notes for explanations, examples, and additional distinctions.

Scope and study context
  • Which Snowflake feature fits a scenario.
  • How ingestion, CDC, and orchestration components interact.
  • High-yield SQL patterns and common traps.
  • Performance and reliability signals to check during troubleshooting.

The real exam rewards practical Snowflake judgment: choosing the right ingestion pattern, designing reliable pipelines, optimizing cost and performance, handling semi-structured data, and applying security/governance controls without overengineering.

Core Snowflake Architecture Map

Layer / ConceptWhat It DoesData Engineer Exam Relevance
Cloud services layerAuthentication, metadata, optimizer, access control, transactionsExplains metadata pruning, query compilation, RBAC, Time Travel metadata, and object management
Storage layerCompressed columnar data in immutable micro-partitionsDrives pruning, clustering, cloning, Time Travel, and storage design
Virtual warehousesUser-managed compute for SQL, loading, transformations, SnowparkTune size for query complexity; scale out for concurrency
Serverless computeSnowflake-managed compute for selected servicesUsed by features such as Snowpipe, automatic services, and some task/service patterns
Micro-partitionsInternal storage units with metadata such as ranges and distinct valuesEnables pruning; clustering can improve pruning for large tables
MetadataFile load history, table statistics, object definitions, access metadataUsed for idempotent loads, query optimization, auditing, and troubleshooting
Result cacheReuses prior query result when eligibleUseful but should not be treated as a pipeline correctness mechanism
Warehouse cacheLocal data cache on a running warehouseCan improve repeated scans; lost when warehouse suspends or changes depending on execution context
Notes and examples

Storage, compute, and services

LayerWhat it doesExam-relevant point
StorageStores table data in compressed micro-partitionsStorage is independent of warehouses
Virtual warehousesExecute queries, loads, transformations, and many refresh operationsSize affects single-query resources; clusters affect concurrency
Cloud servicesOptimization, metadata, authentication, access control, result cache, coordinationSome operations can use metadata or cached results without scanning data

Key implications:

  • A suspended warehouse does not delete data.
  • Scaling compute does not physically repartition existing data.
  • Multiple warehouses can query the same data independently.
  • Credits are driven by compute/service usage, not simply data volume.
  • Query performance is often about pruning, SQL shape, and spill avoidance, not only warehouse size.

Micro-partitions and pruning

Snowflake stores table data in immutable micro-partitions with metadata such as value ranges and statistics. Query pruning skips micro-partitions that cannot match the filter.

High-yield points:

  • Good pruning depends on data organization and filter predicates.
  • Load order can create natural clustering.
  • Repeated filtering by date, tenant, region, or business key can make clustering valuable on very large tables.
  • Small tables rarely need clustering.
  • Highly volatile tables can make clustering maintenance expensive.
  • Expressions used in predicates may reduce pruning if they obscure the stored column values.

Feature Selection Matrix

NeedPreferAvoid / Watch For
Batch load staged filesCOPY INTO <table>Do not build custom loaders unless you need special processing outside Snowflake
Continuous file ingestionSnowpipeSnowpipe is not the same as transactional streaming; design for notification and ingestion latency
Low-latency row ingestionSnowpipe Streaming or connector-based streaming patternDo not force tiny files through batch COPY if continuous row ingestion is required
Declarative refresh of derived tablesDynamic tablesNot ideal for procedural branching, complex side effects, or custom retry logic
Incremental CDC from Snowflake table changesStreams + tasksStreams are offsets over change data, not physical event queues
Scheduled SQL orchestrationTasksRemember task graphs need resumed tasks and dependency design
Procedural orchestration in SnowflakeStored procedures called by tasksAvoid putting simple set-based SQL into procedural loops
Python/Java/Scala transformation pushed to SnowflakeSnowparkWatch for code that pulls large data to the client instead of pushing down
Point lookup accelerationSearch Optimization ServiceDo not use as a default substitute for good table design
Repeated expensive aggregate/query patternMaterialized view, dynamic table, or precomputed tableConfirm freshness and maintenance tradeoffs
Scan-heavy outlier queriesQuery Acceleration Service where eligibleNot a fix for bad joins, poor filters, or under-sized architecture
Cross-region/cloud DRReplication / failover groups where supportedDo not confuse Time Travel with disaster recovery
Share data without copyingSecure Data SharingSecure views/policies may be needed to restrict exposed rows/columns

Data Loading and Ingestion

Loading Pattern Decision Table

PatternBest ForKey ObjectsExam Traps
Manual or scheduled batch loadPeriodic files, controlled windowsStage, file format, COPY INTOCOPY load metadata prevents duplicate file loads unless forced; understand ON_ERROR behavior
Snowpipe auto-ingestEvent-driven files from cloud storageExternal stage, pipe, cloud notification integrationIt is continuous ingestion, not instant transformation orchestration
Snowpipe REST APIApplication-triggered file ingestPipe, REST callApplication still stages files; not row-by-row streaming
Snowpipe StreamingLow-latency streaming rowsSDK/connector/channel patternDifferent mental model from staged-file COPY
External tablesQuery data in external storageExternal stage, external table, metadata refreshQuerying external data is not the same as loading into Snowflake-managed storage
Iceberg tablesOpen table format / lakehouse interoperabilityCatalog integration, external volume, Iceberg tableUnderstand ownership of metadata and storage before choosing
Connector ingestionSaaS/app/system ingestionSnowflake connectors or partner toolsFocus on governance, idempotency, and operational monitoring
Notes and examples

Stage and File Format Reference

Object / OptionPurposePractical Notes
Internal stageSnowflake-managed file stagingGood for controlled uploads and transient staging
External stageCloud object storage locationPrefer storage integrations over embedded cloud credentials
Named file formatReusable parsing definitionKeeps COPY statements consistent and auditable
PATTERNRegex filter for staged filesUseful but easy to overcomplicate; test carefully
FILESExplicit list of filesGood for deterministic loads
VALIDATION_MODEValidate load without committing rowsUseful before production loads
ON_ERRORControls behavior for bad rows/filesCONTINUE can hide data quality issues if not monitored
MATCH_BY_COLUMN_NAMEMap columns by name where supportedUseful when file column order changes
Metadata columnsCapture filename, row number, timestampsUse for lineage, replay, and quarantine workflows

High-Yield COPY INTO Pattern

CREATE OR REPLACE FILE FORMAT ff_json
  TYPE = JSON
  STRIP_OUTER_ARRAY = TRUE;

COPY INTO raw.events
  (payload, source_file, loaded_at)
FROM (
  SELECT
    $1,
    METADATA$FILENAME,
    CURRENT_TIMESTAMP()
  FROM @raw_event_stage
)
FILE_FORMAT = (FORMAT_NAME = ff_json)
ON_ERROR = 'CONTINUE';

Key points:

  • Use named stages and file formats for repeatability.
  • Persist source file metadata for lineage and replay.
  • Monitor rejected rows/files; ON_ERROR = 'CONTINUE' is not a data quality solution by itself.
  • COPY maintains load metadata, so reloading the same file requires intentional design.

Snowpipe Reference

CREATE OR REPLACE PIPE ingest.event_pipe
  AUTO_INGEST = TRUE
AS
COPY INTO raw.events
FROM @raw_event_stage
FILE_FORMAT = (FORMAT_NAME = ff_json);
TopicRemember
Auto-ingestUses cloud notifications to trigger ingestion from a stage
Pipe definitionContains a COPY INTO statement
MonitoringUse pipe history and copy history views/functions
TransformationsKeep pipe transformations simple; use downstream tasks/dynamic tables for complex logic
IdempotencyFile naming, load metadata, and replay procedure matter
ErrorsCheck pipe status and load history; failed file handling must be operationalized

Stages

Stage typeUse caseNotes
User stagePersonal/ad hoc loadingTied to a user
Table stageSimple table-specific stagingConvenient, less reusable
Named internal stageReusable Snowflake-managed stagingGood for controlled internal loads
External stageData in cloud object storageUsually paired with storage integration
Directory tableFile metadata visibility for staged filesUseful for tracking files and discovery

Strong data engineering designs usually use named stages, clear file formats, and storage integrations rather than embedded credentials.

COPY INTO for bulk load

Use COPY INTO <table> when files already exist in a stage and you need controlled batch loading.

Review these options/concepts:

ConceptWhy it matters
File formatDefines CSV, JSON, Parquet, Avro, ORC, compression, delimiters, null handling, headers
ON_ERRORControls behavior for bad rows/files
VALIDATION_MODETests load errors before committing data
MATCH_BY_COLUMN_NAMEHelps load files where column order differs
PATTERNFilters staged files by name pattern
FORCECan reload files that Snowflake otherwise recognizes as already loaded
Load historyHelps prevent duplicate file loads
Transforming from stageAllows simple column selection/casts during load

Common traps:

  • Bad CSV options often appear as column shifts, unexpected nulls, or row parse errors.
  • COPY INTO tracks loaded files; duplicate file names and forced reloads are exam-relevant.
  • COPY INTO <location> is for unloading data to a stage, not loading into a table.
  • Semi-structured formats may load into VARIANT or be mapped into relational columns depending on design.

Snowpipe

Use Snowpipe for continuous file ingestion when new files land in cloud storage or a stage.

Snowpipe pointReview
Ingestion styleFile-based, continuous, serverless ingestion
TriggeringCloud event auto-ingest or REST API notification
Best fitFrequent small-to-medium file arrivals
Not ideal forHeavy transformation, large historical reloads, complex orchestration
Duplicate preventionDepends on file load metadata and careful file naming/loading design

Candidate trap: Snowpipe is not the same as Snowpipe Streaming. Snowpipe loads files; Snowpipe Streaming ingests rows through a streaming API pattern.

Snowpipe Streaming

Use Snowpipe Streaming when applications need to send rows directly with lower latency and without first writing files to cloud storage.

Good fit:

  • Event or application data.
  • Lower-latency ingestion.
  • Avoiding file staging as the primary transport.

Review risk:

  • You still need downstream modeling, deduplication, monitoring, and error handling.
  • It does not automatically replace transformation pipelines.

Transformation and Orchestration

Streams, Tasks, and Dynamic Tables

FeatureUse WhenCore ConceptCommon Trap
StreamNeed change data from table/view changesTracks offset of changes since last consumptionA stream is not a standalone queue; it depends on source data retention and consumption
Standard streamNeed inserts, deletes, updatesUpdates appear with change metadataMust handle delete/update semantics correctly
Append-only streamOnly new inserts matterMore efficient insert-only change trackingWrong choice if updates/deletes must be captured
TaskNeed scheduled or event-like SQL executionRuns SQL, stored procedure, or graph stepTasks must be resumed; child tasks depend on graph state
Task graphNeed ordered multi-step pipelineRoot task plus child dependenciesDesign for retries, failure isolation, and idempotency
Dynamic tableNeed declarative refreshed result tableSnowflake refreshes toward target lagNot a replacement for every task/procedure workflow
Stored procedureNeed procedural control flowJavaScript, Snowpark Python/Java/Scala, SQL proceduresAvoid row-by-row procedural processing for set operations
Notes and examples

Stream Metadata

Metadata ColumnMeaningUse
METADATA$ACTIONInsert or delete actionDrive MERGE, deletes, audit logic
METADATA$ISUPDATEWhether row is part of an update operationDistinguish update pairs from simple insert/delete behavior
METADATA$ROW_IDStable row identifier for change trackingUseful for dedup/change handling patterns

Task and Stream Pattern

CREATE OR REPLACE STREAM stg.orders_stream
  ON TABLE stg.orders;

CREATE OR REPLACE TASK mart.merge_orders_task
  WAREHOUSE = etl_wh
  SCHEDULE = 'USING CRON 0 * * * * UTC'
  WHEN SYSTEM$STREAM_HAS_DATA('stg.orders_stream')
AS
MERGE INTO mart.orders AS t
USING (
  SELECT *
  FROM stg.orders_stream
  WHERE METADATA$ACTION = 'INSERT'
) AS s
ON t.order_id = s.order_id
WHEN MATCHED THEN UPDATE SET
  t.status = s.status,
  t.updated_at = s.updated_at
WHEN NOT MATCHED THEN INSERT
  (order_id, status, updated_at)
VALUES
  (s.order_id, s.status, s.updated_at);

ALTER TASK mart.merge_orders_task RESUME;

Exam reminders:

  • Consuming a stream occurs when the DML statement using it commits.
  • Wrap multi-step stream consumption in a transaction when consistency matters.
  • SYSTEM$STREAM_HAS_DATA is useful as a task WHEN condition, but the downstream SQL still needs to be idempotent.
  • Separate ingestion, validation, merge, and serving layers when troubleshooting clarity matters.

Dynamic Table Pattern

CREATE OR REPLACE DYNAMIC TABLE mart.daily_sales
  TARGET_LAG = '1 hour'
  WAREHOUSE = etl_wh
AS
SELECT
  order_date,
  SUM(net_amount) AS net_sales,
  COUNT(*) AS order_count
FROM clean.orders
GROUP BY order_date;
Dynamic Table ChoiceChoose It When
TARGET_LAGYou need Snowflake-managed refresh toward a freshness objective
TARGET_LAG = DOWNSTREAMRefresh should be driven by downstream dependencies
Incremental refreshQuery is eligible and incremental maintenance is efficient
Full refreshLogic is not incrementally maintainable or full recompute is acceptable
Tasks insteadYou need procedural steps, conditional branches, external calls, or custom retry logic

Dynamic tables

Dynamic tables define target tables as SQL queries and let Snowflake refresh them to meet a target lag.

When dynamic tables are a strong answer

ScenarioWhy dynamic tables fit
Declarative transformation chainSQL defines desired result
Incremental refresh is acceptableSnowflake manages refresh behavior
Replacing simple streams/tasks DAGsLess procedural orchestration
Data mart refresh from raw/curated layersClear dependency-based design

When dynamic tables are weaker

ScenarioBetter option
Complex procedural workflowTasks and stored procedures
External API calls or custom codeSnowpark, procedures, external functions, orchestration
File ingestionCOPY INTO, Snowpipe, or Snowpipe Streaming
Manual transaction controlStreams/tasks or explicit SQL logic
Immediate real-time requirementStreaming plus fit-for-purpose downstream design

Candidate trap: Dynamic tables simplify transformation refresh; they do not replace every orchestration, ingestion, or procedural requirement.

Table Design and Storage

Table Type Reference

Table TypeBest ForKey Behavior
Permanent tableDurable production dataSupports Snowflake data protection features such as Time Travel and Fail-safe behavior
Transient tableRebuildable data, staging, derived dataNo Fail-safe; useful when recovery requirements are lower
Temporary tableSession-scoped intermediate workExists only for the session; can shadow permanent object names in the session
External tableQuery files in external storageMetadata must reflect external file changes
Dynamic tableManaged refreshed table from a queryStores derived results maintained by Snowflake
Iceberg tableOpen table format interoperabilityRequires understanding catalog/storage ownership
Notes and examples

Micro-Partition and Clustering Reference

ConceptPractical Meaning
Micro-partitionImmutable internal storage unit; Snowflake stores metadata for pruning
PruningSkips micro-partitions that cannot satisfy query predicates
Natural clusteringData order created by load patterns may already support pruning
Clustering keyExpression list used to improve organization for pruning
Clustering depthIndicator of how well data is clustered for selected keys
Automatic ClusteringSnowflake-managed maintenance for defined clustering keys
Re-clustering costMore clustering is not always better; use for large tables with selective filters

Choose clustering when:

  • Table is large enough that pruning matters.
  • Queries repeatedly filter on predictable columns.
  • Natural load order does not already cluster data well.
  • Maintenance cost is justified by query improvement.

Avoid clustering when:

  • Table is small.
  • Filters are unpredictable.
  • High-churn DML causes excessive maintenance.
  • Query bottleneck is joins, spilling, or concurrency rather than scan pruning.

Optimization Feature Comparison

FeatureHelps WithNot For
Clustering keyRange/filter pruning on large tablesSmall tables or random access workloads alone
Search Optimization ServiceHighly selective point lookups, some semi-structured search patternsBroad scans and general warehouse sizing problems
Materialized viewRepeated expensive query patterns with maintained resultsArbitrary complex transformations or every dashboard query
Dynamic tableFresh, declarative derived table pipelineProcedural orchestration
Query Acceleration ServiceEligible scan-heavy queries with selective processingBad SQL logic, missing joins, or universal acceleration
Warehouse scale-upComplex single queries, memory pressure, large joinsHigh concurrency alone
Multi-cluster warehouseConcurrent user/query demandMaking one individual query faster
Result cacheRepeated identical eligible queriesETL correctness, freshness guarantees, or parameterized workload design

Semi-Structured Data

Data Types and Functions

ItemUse
VARIANTStore semi-structured values such as JSON
OBJECTKey-value structure
ARRAYOrdered list
PARSE_JSONConvert JSON text to VARIANT
TO_VARIANTConvert SQL value to VARIANT
FLATTENExplode arrays/objects into rows
Dot / bracket notationNavigate nested values
Casts such as ::STRING, ::NUMBERConvert variant values for typed processing
SELECT
  payload:customer.id::STRING AS customer_id,
  item.value:sku::STRING AS sku,
  item.value:quantity::NUMBER AS quantity
FROM raw.events,
LATERAL FLATTEN(input => payload:items) AS item;

High-yield distinctions:

  • JSON null and SQL NULL are not always equivalent in processing.
  • Cast extracted values before joining, grouping, or applying numeric logic.
  • Flatten only the level required; excessive flattening can explode row counts.
  • For frequently queried attributes, consider projecting into typed columns or derived tables.
Notes and examples

Semi-structured data

Snowflake commonly stores semi-structured data in VARIANT, OBJECT, and ARRAY.

Core functions and access patterns

NeedSnowflake concept
Parse JSON text into semi-structured valuePARSE_JSON or TRY_PARSE_JSON
Store flexible nested dataVARIANT
Navigate object fieldsColon, dot, or bracket notation
Expand arrays/objects into rowsFLATTEN with LATERAL
Preserve rows when no nested element existsOUTER => TRUE with FLATTEN
Recursive expansionRECURSIVE => TRUE
Test data typeIS_OBJECT, IS_ARRAY, TYPEOF, related checks

Important distinction:

  • PARSE_JSON('{"a":1}') creates a semi-structured object.
  • Treating JSON text as a plain string does not make it queryable as JSON.

Semi-structured traps

  • Forgetting LATERAL when flattening a column from the left table.
  • Multiplying rows unexpectedly when flattening multiple arrays.
  • Assuming all records have the same JSON shape.
  • Casting too early and failing on malformed values; use tolerant functions where needed.
  • Ignoring case sensitivity and path syntax.
  • Using SELECT * after flattening and creating confusing duplicate columns.

Practical pattern

  1. Land raw data with metadata columns such as source file, load timestamp, and batch ID.
  2. Store the original payload when traceability matters.
  3. Parse and validate into curated relational columns.
  4. Use FLATTEN for repeated nested structures.
  5. Deduplicate and merge into target tables with stable business keys.

Snowpark, UDFs, and Stored Procedures

ToolBest UseExam Distinction
Snowpark DataFrame APIPushdown transformations in Python, Java, or ScalaLazy execution; operations are planned for Snowflake execution
Scalar UDFReusable row-level functionGood for deterministic expressions, not orchestration
UDTFFunction returning rows/table outputUseful for expanding or parsing custom structures
Stored procedureControl flow, orchestration, multi-step logicCan be called from tasks
External functionCall external service through configured integrationRequires security/network design
External access integrationAllows governed outbound access from supported codeDo not hard-code secrets or network assumptions
Packages/importsBring dependencies into Snowpark codeVersioning and allowed packages matter operationally
Notes and examples

Practical design rules:

  • Prefer SQL set operations for relational transformations.
  • Use Snowpark when code libraries, complex logic, or developer language preference justify it.
  • Keep large datasets inside Snowflake; avoid collecting data to the client.
  • Use stored procedures for orchestration, not as a substitute for set-based SQL performance.

Security, Governance, and Data Protection

RBAC and Grants

ConceptMeaningExam Focus
Role-based access controlPrivileges granted to roles, roles granted to users/rolesDesign least-privilege access
USAGE privilegeAllows use of database, schema, warehouse, integrationRequired but not sufficient for object access
Object privilegesSELECT, INSERT, UPDATE, DELETE, etc.Grant only what the pipeline needs
OWNERSHIPFull control over object and grant managementTransferring ownership can affect grants
Future grantsApply grants to future objects in a schema/databaseUseful for repeatable pipeline object creation
Managed access schemaCentralizes grant management through schema ownerGood for controlled environments
Secondary rolesAdditional active roles for a sessionKnow how effective privileges are determined
Notes and examples

Example least-privilege pattern:

GRANT USAGE ON WAREHOUSE etl_wh TO ROLE data_engineer_role;
GRANT USAGE ON DATABASE analytics TO ROLE data_engineer_role;
GRANT USAGE ON SCHEMA analytics.stg TO ROLE data_engineer_role;
GRANT SELECT, INSERT, UPDATE, DELETE
  ON ALL TABLES IN SCHEMA analytics.stg
  TO ROLE data_engineer_role;

Governance Feature Reference

FeaturePurposeUse When
Masking policyDynamically mask column valuesSensitive fields require role/context-based display
Row access policyFilter rows based on policy logicMulti-tenant, regional, or entitlement-based access
TagClassify objects/columnsGovernance, lineage, policy automation
Tag-based maskingApply masking based on classificationMany sensitive columns need consistent control
Secure viewHide query definition and restrict optimization exposureControlled data sharing or sensitive logic
Secure UDFProtect function definitionSensitive business logic
Access HistoryAudit who accessed whatCompliance, investigations, least-privilege review
Object dependenciesUnderstand upstream/downstream impactChange management and pipeline safety

Data Protection and Recovery

FeatureUseDo Not Confuse With
Time TravelQuery, clone, or restore prior object state within retentionLong-term backup strategy by itself
UNDROPRestore recently dropped objects when eligibleFixing corrupted logic after retention expires
Zero-copy cloneCreate metadata-based copy for dev/test/recoveryFull physical copy at creation time
Fail-safeSnowflake-managed last-resort recovery for permanent dataUser-queryable recovery workflow
ReplicationCopy supported databases/account objects across regions/cloudsQuery cache or Time Travel
Failover groupCoordinated failover for supported objectsSimple table clone
CREATE TABLE dev.orders_clone
  CLONE prod.orders;

CREATE TABLE recovery.orders_before_change
  CLONE prod.orders
  AT (TIMESTAMP => '2026-06-18 10:00:00'::TIMESTAMP);

Data Sharing and Collaboration

FeatureBest ForNotes
Secure Data SharingShare live data without copyingProvider controls shared objects and grants
Reader accountShare with consumers without their own Snowflake accountProvider administers reader account
Listing / MarketplaceDiscoverable data product distributionCan be private or public depending on setup
Secure view in shareRestrict columns/rows before sharingCombine with masking/row access where needed
Replicated shareCross-region/cloud consumer access patternsRequires replication design and operational awareness

Exam traps:

  • Sharing exposes objects through grants; it does not copy table data into the consumer account.
  • Secure views are common when the provider must restrict shared data.
  • Consumer performance depends on consumer-side compute for querying shared data.
  • Governance policies must be tested from the consumer’s effective role/context.

Performance and Troubleshooting

Symptom-to-Action Table

SymptomCheck FirstLikely Actions
Query scans too much dataQuery Profile, partitions scanned, filter predicatesAdd selective predicates, improve clustering, project typed columns
Query spills to diskQuery Profile spill indicators, join size, warehouse sizeScale up warehouse, reduce data earlier, optimize joins
Many queued queriesWarehouse load, concurrency, multi-cluster settingsScale out, separate workloads, adjust task/user warehouses
One complex query is slowExecution plan, joins, aggregates, memoryScale up, rewrite SQL, precompute, use materialized view/dynamic table
Dashboard repeats same expensive queryQuery history, result reuse, freshness needsConsider materialized view, dynamic table, aggregate table
Point lookups slow on huge tableFilter selectivity, search predicatesConsider Search Optimization Service
Pipeline reprocesses filesCopy history, file names, FORCE useFix idempotency and replay design
Task did not runTask state, schedule, dependencies, WHEN conditionResume task, inspect task history, check stream has data
Stream stale or empty unexpectedlySource retention, consumption transaction, task failuresConsume regularly; monitor stream/task health
Snowpipe not loadingPipe status, notification setup, copy historyValidate stage path, file format, cloud events, pipe errors
Notes and examples

Query Profile Review Checklist

Query Profile AreaWhat It Tells You
Compilation timeExcessive optimization/metadata overhead or complex SQL generation
Bytes scannedWhether pruning/projection is effective
Partitions scannedMicro-partition pruning quality
Join nodesJoin type, build/probe imbalance, missing filters
Aggregate nodesHigh-cardinality grouping or late reduction
Sort nodesLarge ordering/window operations
Spill indicatorsMemory pressure; warehouse sizing or SQL rewrite needed
Remote vs local I/OCache effectiveness and scan cost
QueuingWarehouse concurrency or resource availability issue

Warehouse Sizing Decisions

ScenarioBetter Lever
Single long-running complex queryLarger warehouse, SQL rewrite, precompute
Many simultaneous queriesMulti-cluster warehouse or workload separation
ETL and BI interfere with each otherSeparate warehouses by workload
Intermittent workloadsAuto-suspend/auto-resume with appropriate settings
Repeated transformationsTasks/dynamic tables with dedicated warehouse
Cost governanceResource monitors, query review, workload isolation

Operational Monitoring Reference

NeedSnowflake Area to Check
Query execution detailsQuery History, Query Profile
Warehouse credit and load patternsWarehouse metering/load history
File loadsCopy history, load history
Snowpipe healthPipe status, pipe usage/history
Task runsTask history and task graph state
Stream consumptionStream metadata, task history, source table changes
Access auditingAccess History, Login History
Object changesAccount Usage views, object dependency metadata
Data quality issuesRejected files, quarantine tables, validation queries
Replication/failoverReplication/failover group status and history

Useful monitoring query patterns:

SELECT
  query_id,
  warehouse_name,
  execution_status,
  start_time,
  bytes_scanned
FROM snowflake.account_usage.query_history
WHERE warehouse_name = 'ETL_WH'
ORDER BY start_time DESC;
SELECT *
FROM TABLE(information_schema.task_history(
  TASK_NAME => 'MERGE_ORDERS_TASK'
))
ORDER BY scheduled_time DESC;

Data Engineering Design Patterns

Bronze / Silver / Gold Mapping

LayerSnowflake ObjectsDesign Goal
Raw / BronzeRaw tables, VARIANT, source metadataPreserve source fidelity and lineage
Clean / SilverTyped tables, validation results, deduped recordsStandardize schema and enforce quality
Curated / GoldMarts, aggregates, dynamic tables, materialized viewsServe analytics, ML, and downstream apps
GovernancePolicies, tags, secure viewsEnforce access and classification
OperationsTasks, streams, monitoring tablesMake pipeline health visible
Notes and examples

Idempotent Pipeline Checklist

  • Use deterministic file naming and load tracking.
  • Capture METADATA$FILENAME and load timestamp.
  • Separate raw ingestion from business transformation.
  • Use MERGE for upserts where duplicate events are possible.
  • Process streams in transactions when multiple target updates must stay consistent.
  • Design replay procedures before production failure.
  • Quarantine bad records instead of silently discarding them.
  • Monitor task, pipe, and copy history.
  • Keep transformations set-based wherever possible.

Data Quality Controls

ControlExample
Type validationTRY_TO_NUMBER, TRY_TO_DATE, explicit casts
Required fieldsReject or quarantine rows with missing keys
Range checksValidate amounts, timestamps, status codes
DeduplicationWindow functions over business keys and event timestamps
Referential checksCompare staged keys to dimension tables
Schema drift detectionCompare inferred file schema to expected contract
Audit countsSource count, loaded count, rejected count, merged count
Lineage fieldsSource file, row number, batch ID, load time

High-Yield Exam Traps

TrapCorrect Mental Model
“Bigger warehouse always fixes performance.”Scale up helps some single-query bottlenecks; concurrency may need scale-out or workload isolation
“A stream stores all change rows forever.”A stream tracks change offsets over retained source data; monitor staleness and consumption
“Snowpipe replaces transformations.”Snowpipe loads files; downstream tasks/dynamic tables usually transform
“Temporary tables are harmless with duplicate names.”Temporary objects can shadow permanent names in a session
“Fail-safe is for normal user recovery.”Use Time Travel, cloning, and UNDROP for routine recovery
“Clustering should be added to every large table.”Add clustering only when query pruning benefit justifies maintenance
“Semi-structured data requires no modeling.”Frequently queried fields often belong in typed columns or curated tables
“Secure Data Sharing copies provider data.”Sharing allows live access without copying into the consumer account
“Stored procedures are faster than SQL.”Set-based SQL is usually preferred for relational transformations
“Result cache proves the query is optimized.”Cache can hide inefficient scans; inspect cold-query behavior and profile

Final DEA-C02 Review Checklist

Before taking DEA-C02, make sure you can quickly answer:

  • Which ingestion option fits batch files, continuous files, and low-latency streaming rows?
  • How do COPY INTO, Snowpipe, stages, file formats, and load history interact?
  • When should you choose streams/tasks versus dynamic tables?
  • How do stream metadata columns affect MERGE logic?
  • What table type fits production, staging, session-only, and externally stored data?
  • How do micro-partitions, pruning, clustering, and search optimization differ?
  • When should you scale a warehouse up versus scale out?
  • How do masking policies, row access policies, secure views, and tags work together?
  • How do Time Travel, cloning, UNDROP, replication, and Fail-safe differ?
  • What monitoring view or history area would you check for a failed load, task, pipe, or slow query?

Next step: turn each table above into scenario drills, then practice timed Snowflake data engineering questions that force you to choose the best ingestion, transformation, security, and performance pattern for the stated constraints.

Notes and examples

Final review checklist before practice

Before starting original practice questions, make sure you can explain:

  • Difference between COPY INTO, Snowpipe, and Snowpipe Streaming.
  • How streams advance offsets and why stream staleness matters.
  • When to choose dynamic tables instead of streams and tasks.
  • How task graphs are scheduled, triggered, monitored, and debugged.
  • How micro-partition pruning, clustering, and search optimization differ.
  • Why scaling up and scaling out solve different warehouse problems.
  • How to load, query, and flatten semi-structured data.
  • How to design idempotent incremental MERGE pipelines.
  • How table types, cloning, and retention affect recovery and cost.
  • How RBAC, managed access, masking, row access, and secure sharing fit together.
  • How to troubleshoot slow queries, failed loads, suspended tasks, and access errors.

High-yield mental model

Snowflake separates storage, compute, and cloud services. Most exam scenarios can be solved by asking:

  1. Where is the data? Internal stage, external stage, native table, external table, stream, dynamic table, shared object, or semi-structured column.
  2. How fresh must it be? Batch, near-real-time file ingestion, streaming rows, scheduled transformation, or declarative incremental refresh.
  3. What workload pattern exists? Large scans, selective lookups, many concurrent users, small repeated queries, heavy transformations, or unpredictable bursts.
  4. What must be governed? Roles, object privileges, masking, row filtering, tags, shares, stages, integrations, and data retention.
  5. What is the failure mode? Duplicate files, stale streams, suspended tasks, bad file format options, privilege gaps, warehouse queuing, or excessive maintenance cost.

Fast decision table

Scenario clueStrong candidate answerCommon trap
One-time or scheduled bulk file loadCOPY INTO from a stageUsing Snowpipe for large historical backfills without need
Continuous file arrival in cloud storageSnowpipe with auto-ingest cloud eventsExpecting heavy transformations inside Snowpipe
Low-latency row ingestion from an applicationSnowpipe StreamingConfusing it with file-based Snowpipe
CDC-style incremental processing inside SnowflakeStreams + tasksSelecting from a stream and assuming the offset advances
Declarative incremental transformation pipelineDynamic tablesUsing tasks/procedures when SQL dependency refresh is enough
Need procedural branching, API calls, multi-step orchestrationTasks with SQL, stored procedures, or SnowparkForcing dynamic tables to do procedural work
Selective point lookups on large tablesSearch optimization service, if cost justifiedAdding a warehouse size increase only
Large scan is slow due to poor pruningClustering strategy or data layout reviewClustering small tables automatically
Expensive repeated aggregate queryMaterialized view, dynamic table, or precomputed tableAssuming result cache solves changing data
Many users waiting on warehouseScale out with multi-cluster warehouseScaling up when the issue is concurrency
Single large query is slowScale up warehouse, optimize SQL/pruning/spillMulti-cluster warehouse for one query
Need open data lake interoperabilityExternal tables or Iceberg-related designAssuming native tables and external tables behave identically
Need restrict columns or rows dynamicallyMasking policies and row access policiesCreating many duplicated secured tables

Warehouse sizing and workload performance

Scale up versus scale out

NeedPreferWhy
Make one complex query run fasterLarger warehouseMore compute resources for that query
Support many simultaneous users or jobsMulti-cluster warehouseAdds clusters for concurrency
Avoid idle spendAuto-suspend and auto-resumeReduces compute time when inactive
Control runaway usageResource monitors and alerts/actionsHelps manage credit consumption
Separate ETL and BI workloadsSeparate warehousesPrevents one workload from starving another
Notes and examples

Candidate trap: multi-cluster is not a magic accelerator for a single query. It primarily helps concurrency.

Query Profile review checklist

When a performance question describes a slow query, think in this order:

  1. Is the query scanning too much data?

    • Review partitions scanned.
    • Check filter selectivity.
    • Consider clustering, materialized view, or search optimization.
  2. Is the query spilling?

    • Local or remote spill suggests memory pressure.
    • Consider a larger warehouse or query rewrite.
  3. Is there join explosion or skew?

    • Check join predicates.
    • Avoid accidental cross joins.
    • Pre-aggregate where appropriate.
  4. Is concurrency causing queues?

    • Use multi-cluster warehouse or workload isolation.
  5. Is cache behavior misleading?

    • A cached result may hide real runtime.
    • Changing data, non-deterministic functions, or different query forms can prevent reuse.

Performance features at a glance

FeatureBest forWatch out for
Result cacheRepeated identical/compatible queries on unchanged dataNot a substitute for modeling or pruning
Warehouse cacheRepeated access to data by same active warehouseLost when warehouse suspends long enough
ClusteringLarge tables filtered repeatedly on specific columns/expressionsMaintenance cost
Search optimizationHighly selective lookups, some semi-structured access patternsAdditional cost; not for broad scans
Materialized viewsRepeated expensive query patterns with supported SQLStorage and maintenance cost
Dynamic tablesDeclarative incremental transformationsRefresh lag and supported query considerations
Query acceleration serviceEligible parts of certain large scansNot every query benefits

Streams, tasks, and incremental processing

Streams

A stream tracks changes made to a source object so downstream logic can consume deltas.

Stream type/conceptReview point
Standard streamCaptures inserts, deletes, and updates
Update representationOften appears as delete/insert change records
Append-only streamOptimized when only inserts matter
Insert-only streamRelevant for certain external-style ingestion patterns
Metadata columnsInclude action/update/row identity information
Stream offsetAdvances when consumed by DML in a transaction
StalenessStreams must be managed before retention makes changes unavailable
Notes and examples

Candidate trap: querying a stream with SELECT is not the same as consuming it in a DML transaction.

Common stream use cases:

  • Incremental MERGE into a dimension or fact table.
  • Capturing new rows from a landing table.
  • Processing CDC events.
  • Triggering tasks only when data exists.

Tasks

Tasks run SQL, stored procedures, or pipeline steps on a schedule or dependency graph.

Task conceptWhy it matters
Scheduled taskRuns by time interval or cron-style schedule
Task graphChild tasks can run after predecessor tasks
WHEN conditionCommonly checks whether stream data exists
Warehouse-backed taskUses a specified warehouse
Serverless taskSnowflake manages compute sizing within supported behavior
Task historyPrimary troubleshooting source
Suspended tasksA common reason pipelines stop

Strong task design:

  • Keep each task purpose clear.
  • Use idempotent MERGE logic.
  • Guard stream-processing tasks with data-exists checks.
  • Monitor failures and skipped runs.
  • Avoid one huge task that hides which step failed.

Streams + tasks pipeline pattern

    flowchart LR
	    A[Files or app data] --> B[Raw landing table]
	    B --> C[Stream tracks changes]
	    C --> D[Task checks stream]
	    D --> E[MERGE into curated table]
	    E --> F[Downstream marts or features]

Use this pattern when you need procedural control over incremental processing, error handling, or custom merge logic.

Data transformation and modeling

Layered data architecture

A typical Snowflake engineering pattern:

LayerPurposeTypical objects
Raw/bronzeLand data with minimal transformationRaw tables, VARIANT, load metadata
Clean/silverStandardize, dedupe, type, validateStreams, tasks, dynamic tables, views
Curated/goldBusiness-ready facts/dimensions/martsTables, dynamic tables, materialized views
ServingSecure, optimized accessSecure views, shares, BI schemas
Notes and examples

Exam decisions often ask whether to load raw first or transform immediately. Raw landing is usually safer when auditability, replay, schema drift, and troubleshooting matter.

MERGE and idempotency

Use MERGE when applying incremental changes to a target table.

Good MERGE design:

  • Match on stable business keys or surrogate keys.
  • Deduplicate source changes before merge.
  • Handle deletes if the source CDC includes them.
  • Store audit columns such as effective timestamp or load batch.
  • Make reruns safe.

Common mistake: merging a stream with duplicate keys without first qualifying the latest change. Use windowing logic such as ROW_NUMBER and QUALIFY when appropriate.

Table types and retention

Table typeUse caseKey review point
PermanentDurable production dataSupports Snowflake retention/recovery behavior according to configuration
TransientData that can be recreatedLower durability/recovery overhead than permanent
TemporarySession-scoped intermediate workDisappears when session ends
CloneFast copy for dev/test/backfillZero-copy until changes diverge

High-yield traps:

  • A zero-copy clone is not a deep physical copy at creation.
  • Changes after cloning create independent data changes.
  • Temporary tables can shadow permanent tables with the same name in a session.
  • Transient objects are a poor choice for data that cannot be recreated.

External data and lake patterns

External tables

External tables let Snowflake query data in external cloud storage without loading it into native Snowflake storage.

Best fit:

  • Data lake access.
  • Large external datasets where copying is not desired.
  • Interoperability with existing object storage pipelines.

Watch out:

  • Metadata refresh and partition management matter.
  • Performance may differ from native tables.
  • Governance must cover stages, storage integrations, and external locations.
  • If frequent high-performance analytics are required, loading into native tables may be better.

Iceberg-style considerations

When a scenario emphasizes open table formats, cross-engine interoperability, or lakehouse architecture, consider Snowflake support for Iceberg-related designs. Review storage/catalog choices, governance, and whether the data should be managed as native Snowflake tables or remain interoperable in an external lake format.

Candidate trap: Do not treat external/open-table designs as automatically faster or simpler. They solve interoperability and storage architecture problems, not every performance problem.

Security, governance, and access control

RBAC essentials

Snowflake uses role-based access control. Users receive roles; roles receive privileges on objects.

ConceptReview point
Role hierarchyHigher-level roles can inherit lower-level roles
Least privilegeGrant only required access
OwnershipNeeded for many object management operations
Future grantsApply privileges to future objects in a schema/database
Managed access schemaCentralizes grant management through schema owner/security role
Database rolesUseful for database-scoped privilege packaging
Secondary rolesCan affect available privileges depending on session behavior
Notes and examples

Common exam traps:

  • Granting table privileges is not enough if the role lacks database/schema usage.
  • Stage access may require stage privileges plus storage integration/cloud permissions.
  • Ownership and usage are different.
  • Future grants do not fix existing object privileges.
  • Managed access schemas change who can manage grants.

Data protection controls

RequirementSnowflake feature
Hide sensitive column valuesMasking policy
Filter rows by user/role/contextRow access policy
Classify and organize metadataTags and classification-related workflows
Apply masking using tagsTag-based masking strategy
Share data safelySecure views, shares, reader accounts where appropriate
Protect logic in views/UDFsSecure views or secure UDFs where needed

Candidate trap: A normal view can simplify access but is not always the right control for sensitive logic or secure data sharing.

Data sharing

Snowflake data sharing can provide access without copying data.

Review:

  • Providers share selected database objects.
  • Consumers access shared data through a database created from the share.
  • Secure views can expose only approved rows/columns.
  • Reader accounts may be used when consumers do not have their own Snowflake account.
  • Shares require careful privilege and governance design.

Do not claim affiliation with Snowflake or assume data sharing removes the need for access review.

Reliability, recovery, and lifecycle

Time Travel, cloning, and recovery

Key review ideas:

  • Time Travel supports querying or restoring previous object states within configured retention.
  • UNDROP can recover dropped supported objects within available retention.
  • Cloning is useful for development, testing, backfills, and safe experimentation.
  • Clones are space-efficient initially but incur storage as data changes.
  • Retention settings affect recovery options and storage cost.

Pipeline reliability checklist

Failure symptomLikely area to inspect
Files not loadingStage path, file pattern, pipe status, cloud notifications, file format
Duplicate rowsFile naming, FORCE, idempotency, merge keys, stream processing
Task not runningSuspended task, schedule, predecessor failure, privileges, warehouse
Stream missing dataStaleness, retention, offset consumed, wrong stream type
Slow refreshWarehouse size, query plan, clustering, dynamic table dependencies
Access deniedRole hierarchy, database/schema usage, object privilege, integration privilege
Unexpected nullsFile format options, schema drift, casts, JSON path mismatch

Monitoring and troubleshooting

Useful Snowflake information sources

NeedWhere to look
Query performanceQuery Profile, query history
Warehouse load and queuesWarehouse/load history views
Task statusTask history
Pipe statusPipe metadata and load history
Copy/load errorsLoad history, validation mode, rejected row details
Access issuesGrants, role hierarchy, current role/session context
Storage growthTable/storage history and object review
Policy behaviorPolicy definitions, tags, role context

Troubleshooting sequence for exam questions

  1. Confirm the object and role context.
  2. Validate upstream data presence.
  3. Check file format, stage path, and load metadata.
  4. Review task/pipe/stream status.
  5. Inspect query history and profile.
  6. Fix idempotency before rerunning failed loads.
  7. Add monitoring after the root cause is known.

SQL and Snowflake feature traps

Common DEA-C02 candidate mistakes

MistakeBetter thinking
Always increasing warehouse sizeFirst identify scan, spill, skew, or queueing
Using multi-cluster for one slow queryMulti-cluster is mainly for concurrency
Loading directly to final tablesLand raw when replay/audit/schema drift matters
Ignoring duplicate protectionDesign with load metadata and idempotent merges
Assuming stream SELECT consumes changesOffsets advance with consuming DML transaction
Using tasks for everythingDynamic tables may simplify declarative transformations
Using dynamic tables for procedural logicUse tasks/procedures/Snowpark for procedural workflows
Clustering every tableCluster only when pruning benefit justifies cost
Expecting external tables to act like native tablesExternal metadata, partitions, and performance differ
Forgetting schema usage grantsObject privilege alone is not enough
Hardcoding cloud keysPrefer storage integrations and governed access
Flattening nested arrays carelesslyWatch row explosion and join logic

Service selection mini-guide

If the question says…Think…
“Files arrive every few minutes in cloud storage”Snowpipe auto-ingest
“Backload several terabytes from existing files”Bulk COPY INTO with right warehouse and validation
“Application needs to send event rows with low latency”Snowpipe Streaming
“Process only new rows since last run”Stream on source table plus task/merge
“SQL-defined table should stay fresh within target lag”Dynamic table
“Orchestrate multiple dependent SQL steps nightly”Task graph
“Run Python transformations close to the data”Snowpark or Python stored procedures
“Repeated dashboard aggregate is expensive”Materialized view, dynamic table, or curated aggregate table
“Large table point lookup is slow”Search optimization or better clustering, depending pattern
“Share governed subset with another account”Secure view/share design
“Mask PII based on role”Masking policy, possibly tag-based
“Filter rows by region or tenant”Row access policy

Practice focus

Use this Cheat Sheet as a map, then move into IT Mastery practice:

  1. Start with topic drills on ingestion, streams/tasks, dynamic tables, and performance.
  2. Review every missed item with detailed explanations, especially when two Snowflake features look similar.
  3. Use original practice questions to test decision-making, not memorized commands only.
  4. Finish with mixed question bank sets that combine loading, transformation, security, and troubleshooting scenarios.

Next step: practice a focused DEA-C02 topic drill on Snowflake ingestion and incremental pipeline design, then review the explanations for every answer choice.

Put the review into practice