Snowflake SnowPro Advanced: Architect (ARA-C01) · 20% practice allocation

Snowflake ARA-C01: Performance Optimization Practice Questions

5 free sample questions from the Performance Optimization domain, with answers and explanations. The full ARA-C01 bank has 214 questions across 4 domains. Questions are scenario-based and written from the official Snowflake exam guide.

1.

A company's nightly ETL pipeline uses a task graph with a root task and twelve dependent child tasks. After a recent Snowflake account upgrade, the team notices that some child tasks occasionally start before their upstream dependency tasks have finished, causing data integrity issues. What is the MOST likely cause?

  • A. The task graph has more than ten child tasks, which exceeds the Snowflake limit for dependency-based scheduling.
  • B. The pipeline was migrated from a user-managed warehouse to a serverless compute model, which does not support task dependency ordering.
  • C. Child tasks in a task graph are scheduled independently by default and do not respect dependency ordering unless AFTER clauses are explicitly defined.
  • D. The root task's SCHEDULE parameter conflicts with the AFTER clause definitions on the child tasks, causing a race condition.✓ Correct
Explanation

When a root task has both a SCHEDULE and child tasks have AFTER clauses pointing to it, the scheduler can trigger a new run of the root task on schedule even before the previous graph run completes, causing child tasks from successive runs to overlap. The correct fix is to ensure the root task's schedule interval is longer than the expected maximum run time of the full graph, or to use a single root task with no schedule and trigger it externally. Option C is incorrect because AFTER clauses do enforce dependency ordering within a single run. Option B is incorrect because serverless tasks fully support dependency ordering via AFTER clauses. Option A is incorrect because Snowflake task graphs support up to 1,000 tasks, far more than twelve.

2.

A data engineer observes the following in a query's Query Profile: the 'Bytes spilled to local storage' metric is 120 GB and 'Bytes spilled to remote storage' is 45 GB for a single aggregation node. The query runs on an X-Large warehouse. Which TWO actions would MOST directly reduce or eliminate this spilling behavior?

  • A. Rewrite the query to push GROUP BY columns through a subquery to reduce intermediate row counts before aggregation.✓ Correct
  • B. Enable multi-cluster warehouse auto-scaling so additional clusters can be spun up to share the workload.
  • C. Increase the warehouse size to 2X-Large or 3X-Large to provide more in-memory capacity per node.✓ Correct
  • D. Add a RESULT_SCAN on the query output to cache the final result set and avoid recomputation.
  • E. Suspend and resume the warehouse to clear the warehouse cache before rerunning the query.
  • F. Partition the source table by a column unrelated to the GROUP BY key to increase data locality.
Explanation

Correct A: Upgrading the warehouse size increases the per-node memory available for in-memory sort and aggregation buffers, directly addressing spilling caused by insufficient RAM. Correct C: Rewriting the query to reduce intermediate row counts before the final aggregation (e.g., pre-aggregating in a subquery or CTE) decreases the amount of data the aggregation node must hold in memory at once, reducing or eliminating spilling. Distractor B is wrong because multi-cluster auto-scaling adds clusters for concurrency (multiple simultaneous queries), not for a single query's memory requirements — a single query runs on one cluster. Distractor D is wrong because partitioning by an unrelated column does not affect the intermediate data volume produced by the aggregation node. Distractor E is wrong because RESULT_SCAN retrieves a previously cached result; it does not help a query that is currently spilling. Distractor F is wrong because clearing the warehouse cache removes the local SSD data cache for table scans, which could actually make performance worse and does nothing to address in-memory aggregation spilling.

3.

A Snowflake solutions architect is helping a customer optimize a query that performs a full outer join between two tables: TABLE_A (800 GB) and TABLE_B (900 GB). The Query Profile shows that one join side has a massive 'Rows produced' count before the join executes, and the overall query runtime exceeds 3 hours on an X-Large warehouse. There are no WHERE clause filters applied to either table. Which TWO recommendations should the architect make FIRST?

  • A. Apply business-relevant WHERE clause filters to TABLE_A and TABLE_B before the join to reduce the row count participating in the join operation.✓ Correct
  • B. Rewrite the FULL OUTER JOIN as two separate LEFT OUTER JOINs combined with UNION ALL to allow Snowflake to optimize each join independently.
  • C. Switch the warehouse to a Snowpark-optimized warehouse type, which provides additional memory for large join operations.
  • D. Evaluate whether the FULL OUTER JOIN is logically required or if an INNER JOIN or LEFT JOIN satisfies the business requirement, reducing unnecessary row retention.✓ Correct
  • E. Add a clustering key on the join columns of both tables to allow Snowflake to use sort-merge join instead of hash join.
  • F. Enable query acceleration service with scale factor 8 to distribute the join computation across serverless nodes.
Explanation

Correct (A): Without WHERE clause filters, all 800 GB and 900 GB of data participate in the join. Applying selective filters is always the first optimization — reducing input row counts before the join is the highest-leverage change.

Correct (D): Full outer joins retain ALL rows from both sides, including non-matching rows. If the business requirement is actually satisfied by an inner or left join, switching eliminates the unnecessary retention of non-matching rows from the right side, dramatically reducing intermediate result sizes.

Why B is wrong: Rewriting a FULL OUTER JOIN as LEFT JOIN + UNION ALL is a valid technique in some databases but does not inherently provide a performance benefit in Snowflake, which is optimized for standard join syntax.

Why C is wrong: Snowpark-optimized warehouses provide extra memory for ML/Snowpark Python workloads. They do not specifically accelerate standard SQL join operations beyond the memory benefit of a larger node.

Why E is wrong: Clustering keys help with pruning during table scans, not with join execution itself. Snowflake's join algorithm choice (broadcast vs hash) is based on table sizes, not clustering.

Why F is wrong: QAS helps with scan-heavy queries with high partition counts. A join-heavy query with no filters and massive intermediate results would not be meaningfully helped by QAS — the bottleneck is the join computation, not partition scanning.

4.

A Snowflake architect is reviewing the clustering health of a 20 TB events table that is clustered by (REGION, EVENT_DATE). The team runs the following query and receives the output shown:

SELECT SYSTEM$CLUSTERING_INFORMATION('EVENTS_TABLE', '(REGION, EVENT_DATE)');

The output shows: average_depth = 8.2, average_overlap = 7.4, total_partition_count = 42,000. Automatic clustering is ENABLED on the table. The architect also observes that DML activity on the table is extremely high — approximately 2 million rows are inserted every 5 minutes from a Snowpipe pipeline, always with the current timestamp for EVENT_DATE and random REGION values. Which TWO conclusions are MOST accurate given this information?

  • A. The high average_overlap value of 7.4 indicates that micro-partitions for a given clustering key range span many overlapping partitions, meaning queries filtering by REGION and EVENT_DATE will still need to scan a large number of partitions and pruning efficiency is low.✓ Correct
  • B. Automatic clustering will fully resolve the overlap issue within one maintenance cycle because Snowflake's clustering service reorganizes all affected partitions in a single pass.
  • C. The continuous high-velocity insert pattern is the primary driver of poor clustering depth and overlap, because each micro-partition ingested by Snowpipe contains a narrow range of EVENT_DATE values that progressively overlap with existing partitions as new data arrives.
  • D. Disabling automatic clustering and manually running RECLUSTER TABLE ... WHERE EVENT_DATE = CURRENT_DATE() once per day would be more cost-effective and would eliminate overlap for the full table within 24 hours.
  • E. Switching the clustering key to (EVENT_DATE, REGION) instead of (REGION, EVENT_DATE) would have no effect on pruning efficiency for queries that filter on both columns simultaneously.
  • F. The average_depth of 8.2 means that on average, a given clustering key value appears across 8.2 micro-partitions, and a value closer to 1.0 would indicate a perfectly clustered table.✓ Correct
Explanation

Option A is correct: average_overlap measures how many micro-partitions on average contain overlapping ranges of the clustering key. A value of 7.4 (out of a scale where 1.0 is perfect) means that for a given key range, approximately 7–8 partitions overlap, so Snowflake cannot prune them away and must scan all of them — confirming low pruning efficiency.

Option F (index 5) is correct: average_depth specifically measures the average number of micro-partitions that a given clustering key value appears in. A depth of 1.0 indicates perfect clustering (each key value exists in exactly one partition); 8.2 means significant cross-partition spread, confirming poor clustering.

Option B is incorrect: Automatic clustering does NOT reorganize all affected partitions in a single pass. Snowflake's clustering service runs incrementally in the background, prioritizing the most overlapping partitions first. For a table with 42,000 partitions under constant high-velocity inserts, clustering lag is ongoing and a single maintenance cycle will not fully resolve overlap — new inserts continuously reintroduce it.

Option C is partially plausible but subtly wrong: the continuous inserts DO contribute to clustering degradation, but the mechanism is not that each micro-partition has a 'narrow range' of EVENT_DATE — Snowpipe batches create micro-partitions with mixed REGION values and very recent EVENT_DATE values, which overlap with existing recent partitions. The described mechanism oversimplifies this. More precisely, the issue is that constant writes on the leading edge of EVENT_DATE perpetually create overlap in the most recent partitions, and automatic clustering must continuously work to re-cluster them.

Option D is incorrect: manually running RECLUSTER on only the current date partition would leave historical overlap unresolved and would not be more cost-effective given 42,000 partitions and 2M rows every 5 minutes. Automatic clustering is generally more efficient for continuously ingested tables.

Option E is incorrect: the order of columns in a clustering key DOES matter. Snowflake prunes based on the leftmost key column first (similar to a composite index). Putting EVENT_DATE first vs. REGION first significantly affects pruning for queries that filter on only one of the two columns, though for queries filtering both it matters less. The claim that order has 'no effect' is factually wrong.

5.

A Snowflake Dynamic Table is configured with a lag target of '1 minute'. The underlying base table receives continuous high-frequency inserts. An architect observes that the Dynamic Table's actual refresh lag is consistently 8-10 minutes. Which TWO factors are MOST likely causing the lag to exceed the target?

  • A. The Dynamic Table is stored in a transient schema, which disables incremental refresh capabilities.
  • B. The Snowflake scheduler is deprioritizing Dynamic Table refreshes in favor of user-submitted warehouse queries, causing refresh delays during peak load.
  • C. The Dynamic Table's target lag of '1 minute' is below the minimum supported lag of 5 minutes for Dynamic Tables.
  • D. The refresh computation itself takes longer than 1 minute to complete, making the 1-minute target physically unachievable for this query.✓ Correct
  • E. The Dynamic Table is configured for FULL refresh mode because the transformation query uses a non-incremental operation (e.g., a window function that references unbounded frame), preventing incremental processing.✓ Correct
  • F. The source table for the Dynamic Table is located in a different database, and cross-database Dynamic Table dependencies always introduce a fixed 5-minute overhead.
Explanation

Correct A: If the Dynamic Table's transformation query contains operations that Snowflake cannot compute incrementally (such as certain window functions with unbounded frames, aggregations without GROUP BY on the change key, or non-deterministic functions), Snowflake falls back to a FULL refresh mode. A full refresh must scan and recompute the entire result set, which on a large or continuously changing source table can take many minutes — far exceeding a 1-minute lag target. Correct C: The lag target is a target, not a guaranteed SLA. If the underlying computation (scanning, joining, aggregating) takes 8 minutes to complete, the actual lag will be at least that duration regardless of the configured target. The target instructs the scheduler how often to attempt a refresh, but it cannot make the computation faster. Distractor B is wrong because Snowflake supports Dynamic Table lag targets as low as 1 minute (or even in seconds for certain configurations); 1 minute is a valid target. Distractor D is wrong because transient vs. permanent schema classification does not disable incremental refresh for Dynamic Tables. Distractor E is wrong because cross-database dependencies do not introduce a fixed scheduling overhead penalty. Distractor F is wrong because Dynamic Table refreshes in serverless mode are not deprioritized by warehouse user queries; they run on separate Snowflake-managed compute.

Test yourself across every ARA-C01 domain

The free ARA-C01 practice test mixes about 20 questions weighted like the exam. The full 214-question bank adds instant grading, flashcards and a timed mock exam.

Study this domain

Performance Optimization study guide (ARA-C01) →

Other ARA-C01 domains

← All Snowflake SnowPro Advanced: Architect study resources