Cloud Data Platforms and Managed Services Questions
Evaluating and choosing among managed cloud data platform PRODUCTS: cloud data warehouses (Snowflake, BigQuery, Redshift, Synapse) as vendor options, the storage-and-compute-separation model as a purchasing and operating decision, serverless versus provisioned compute models, warehouse and streaming-service sizing and capacity planning, concurrency and workload management as a platform operating concern, pricing-model comparison and platform-level cost trade-offs, vendor lock-in and portability, platform-to-platform migration, and the recurring managed-versus-self-managed decision applied to warehouses, databases, streaming, and ETL/orchestration services. Focuses on platform SELECTION and operation as a product, not designing the ingestion pipelines, ETL transform patterns, or streaming processing logic that run on top of a chosen platform, and not a single vendor's certification trivia.
Propose a strategy to migrate BI workloads from an on-premise data warehouse to a managed cloud warehouse platform (such as Snowflake or Synapse). Address schema migration, the risk of query-performance regressions, cost implications, the training BI users and analysts will need, and how you would measure whether the migration succeeded.
Sample Answer
Direct answer. Migrating BI workloads from an on-premise warehouse to a managed cloud platform, whether the destination is Snowflake or Synapse, requires four coordinated workstreams: schema migration, performance validation, cost governance, and analyst training, sequenced so that regressions are caught before the business depends on the new platform.
Structured elaboration.
- Schema migration. Assess whether to lift-and-shift the existing schema as-is or take the opportunity to re-architect (for example, moving from a heavily normalized on-prem schema to a star schema better suited to the target platform's columnar engine). Lift-and-shift is faster and lower-risk short-term; re-architecture pays off longer-term but extends the migration timeline and adds validation surface area. The conversion surface differs meaningfully by target platform: Snowflake auto-manages physical layout through micro-partitions, so schema conversion is mostly SQL-dialect translation, while a Synapse dedicated SQL pool requires you to explicitly choose a distribution style (HASH, ROUND_ROBIN, or REPLICATE) and a clustered columnstore index per table during conversion, an extra design decision with no Snowflake equivalent that has real performance consequences if left as an afterthought.
- Query-performance regression risk. Query patterns tuned for the old platform's engine (index usage, join strategies, partitioning assumptions) do not automatically translate to the new platform's optimizer. Run the existing production query set against the new platform before cutover and flag any query whose latency regresses beyond an agreed threshold for manual tuning.
- Cost implications. Estimate the new platform's ongoing cost from a realistic sample of production query volume and data growth, not just current data size, since cloud warehouses bill differently (compute-and-storage-separated) than an on-prem warehouse's largely fixed hardware cost; build in a cost-monitoring dashboard from day one so an unexpected spike is caught early rather than discovered on the first invoice. The billing shape also differs by target: Snowflake's virtual warehouses auto-suspend and bill per-second while actually running a query, whereas a Synapse dedicated SQL pool reserves DWU-based capacity that keeps billing continuously until you explicitly pause it, so a Synapse migration needs an operational pause/resume discipline built into the cost plan that a Snowflake migration does not.
- Training. BI analysts accustomed to the on-prem tool's quirks (specific SQL dialect, specific performance characteristics, specific administrative workflows) need hands-on training before cutover, not just documentation; a short-format transition period running both platforms side by side lets analysts validate their own familiar reports against the new platform before it becomes the system of record. Budget training time differently by target: analysts coming from an on-prem SQL Server-flavored warehouse typically find Synapse's T-SQL dialect and SSMS-style tooling closer to their existing habits, while a move to Snowflake's SQL dialect and Snowsight interface is a bigger syntax and tooling jump, regardless of which platform is technically the better fit.
- Measuring success. Define success criteria before migration starts: query-latency parity (or improvement) across the core report set, cost within a defined budget band, and analyst-reported confidence in the new platform's numbers matching the old one during a parallel-run period.
Worked example. A BI team migrating from an on-prem warehouse ran the top 50 most-frequently-executed reports against the new platform during a two-week parallel-run period before cutover, comparing both results (to catch silent correctness regressions from a schema or join-logic difference) and latency (to catch performance regressions). Three reports showed silent numeric discrepancies traced to an implicit NULL-handling difference between the two platforms' aggregate functions, caught and fixed before any analyst relied on the new platform's numbers in a real decision; two reports were meaningfully slower on the new platform, both attributable to a missing distribution/clustering key equivalent to what the on-prem indexes had provided, and were fixed by adding the new platform's native performance features before cutover rather than after analysts started complaining.
Trade-offs and pitfalls. The most damaging failure mode in this kind of migration is a silent correctness regression, not a performance regression, since a slow report is annoying but a wrong number that nobody catches erodes trust in the whole platform once discovered. Budget the parallel-run comparison specifically to catch numeric discrepancies, not just latency, and do not declare the migration successful until analysts have validated their own familiar reports against the new platform themselves.
Explain a serverless data warehouse's architecture and primary use cases, using BigQuery as the example. When would you choose it over a managed OLTP-oriented database (such as Cloud SQL or Cloud Spanner) for analytical workloads? Discuss schema flexibility, concurrency, expected query latency, and the storage-versus-compute cost model.
Sample Answer
Direct answer. BigQuery is a fully serverless data warehouse: there is no cluster to provision, and Google allocates compute (slots) to each query on demand, billing separately for storage and for compute. Choose it over a managed OLTP-oriented database like Cloud SQL or Cloud Spanner when the workload is analytical, meaning large scans and aggregations across many rows, rather than transactional, meaning frequent small reads and writes of individual records.
Structured elaboration.
- Schema flexibility. BigQuery supports nested and repeated fields natively, so semi-structured data (arrays, structs) can be queried without a normalization step. Cloud SQL enforces a traditional relational schema; Cloud Spanner supports relational schemas with strong global consistency but is not optimized for the wide, denormalized tables analytical workloads favor.
- Concurrency. BigQuery is built to handle many simultaneous large analytical scans by allocating slots dynamically across queries. Cloud SQL's concurrency is bounded by the instance's provisioned compute, since it is designed for high-frequency small transactions, not large concurrent scans. Cloud Spanner scales transactional concurrency well but is not designed for the query shapes (full-table aggregations) analytics needs.
- Expected query latency. A BigQuery query over gigabytes to petabytes of data typically completes in seconds, since it parallelizes across many workers. A Cloud SQL query touching that much data would be far slower, since it is architected for millisecond-latency single-row or small-range operations, not massive parallel scans.
- Cost model. BigQuery separates storage cost (cheap, per-GB) from compute cost (per-byte-scanned or reserved slots). Cloud SQL and Spanner charge for provisioned instance capacity regardless of how much data you actually scan per query, which is efficient for their intended transactional workload but would be a poor fit and comparatively expensive for large analytical scans.
Worked example. A team analyzing years of clickstream events to compute weekly active-user trends across billions of rows should use BigQuery: the query touches most of the table, benefits from columnar storage and massive parallelism, and would be prohibitively slow and expensive to run as a full-table scan against an OLTP-oriented database sized for millisecond transactional lookups. The same team's user-authentication service, which needs to look up a single user's session token in milliseconds thousands of times a second, should stay on Cloud SQL or Spanner: BigQuery's query-startup latency (typically at least hundreds of milliseconds even for a trivial query, since it allocates slots and plans a distributed execution for every query) makes it unsuitable for that access pattern regardless of how little data each individual lookup touches.
Trade-offs and pitfalls. A common mistake is using BigQuery as a general-purpose database for an application's live transactional reads, which produces unpredictable per-query latency and racks up cost for queries that touch only a handful of rows but still pay BigQuery's per-query overhead. The opposite mistake, running large analytical aggregations against an OLTP-oriented database, works at small scale but degrades sharply as data volume grows, since the storage engine and indexing strategy are not built for full-table scans. Route each workload to the engine built for its actual access pattern rather than standardizing on one engine for convenience.
Architect a Synapse-based analytics platform to handle 1 petabyte of raw data, 1,000 nightly ETL jobs, and up to 5,000 concurrent interactive BI queries. Justify your choice between dedicated and serverless pools (or a mix), and describe your slot/capacity strategy, partitioning approach, and scaling and failover plan at this scale.
Sample Answer
Direct answer. At 1 petabyte of raw data, 1,000 nightly ETL jobs, and up to 5,000 concurrent BI queries, use a mixed pool architecture: dedicated SQL pools sized for the predictable nightly ETL and the core set of heavy, steady BI workloads, with serverless SQL pools absorbing ad-hoc and exploratory queries, so neither workload type is forced onto a compute model mismatched to its actual pattern.
Structured elaboration.
- Dedicated vs serverless justification. The nightly ETL jobs are a steady, predictable, high-volume workload, exactly the profile where dedicated, reserved compute is cheaper and more performance-consistent than paying per byte scanned 1,000 times a night. The bulk of routine BI dashboard traffic is similarly steady enough during business hours to benefit from dedicated compute with tuned distribution and indexing. Ad-hoc, unpredictable analyst exploration against the full petabyte-scale dataset, by contrast, is exactly the profile serverless is built for, since provisioning dedicated capacity to cover the worst-case exploratory query would be wasteful most of the time.
- Slot/capacity strategy. Size the dedicated pool's compute, measured in DWU/cDWU (Data Warehouse Units, Synapse's abstract sizing unit for reserved compute, roughly like a t-shirt size for the cluster), against the measured steady-state concurrency of ETL plus core BI traffic, not the 5,000-query peak; use resource classes within the dedicated pool to prevent one heavy query from starving others, and route the serverless pool's usage to absorb the peak's exploratory tail rather than sizing dedicated compute to cover it directly.
- Partitioning approach. At 1PB, partition by the dimension most queries filter on first (typically date, for time-series analytical data), and further sub-partition or cluster by a secondary high-selectivity column if query patterns consistently filter on it, so both dedicated and serverless queries benefit from partition elimination rather than scanning the full petabyte on every query.
- Scaling and failover. Configure the dedicated pool's compute to scale on a schedule (larger during business hours and the nightly ETL window, smaller overnight outside that window) rather than a single fixed size around the clock, and pair cross-region replication with a documented failover runbook, since a platform at this scale and criticality needs a tested recovery path, not just a backup.
Worked example. Size the dedicated pool to comfortably handle the nightly ETL batch (1,000 jobs, scheduled and largely sequential or moderately parallel) plus the steady daytime BI load that historical monitoring shows accounts for the large majority of query volume; route the long tail of ad-hoc, unpredictable analyst queries, which historical data typically shows are a small fraction of total query count but can spike unpredictably, to the serverless pool instead of over-provisioning dedicated capacity to cover that unpredictable tail. This split keeps steady-state cost proportional to steady-state usage while still letting the platform absorb a genuine 5,000-concurrent-query peak without either starving the ETL jobs of resources or forcing a costly dedicated-capacity over-provisioning just to cover an infrequent spike.
Trade-offs and pitfalls. The most common mistake at this scale is sizing dedicated capacity to the peak concurrent-query number rather than the steady-state pattern, which is enormously wasteful most of the time; the serverless pool exists specifically to absorb that peak's unpredictable tail instead. A second mistake is under-investing in partitioning strategy at petabyte scale, where an unpartitioned or poorly partitioned table turns every query, dedicated or serverless, into a full-dataset scan regardless of how much compute you have thrown at the problem.
A legacy Redshift cluster must migrate to Snowflake with minimal downtime and functionally equivalent query results. Outline a migration plan: schema conversion, data export and import, handling Redshift-specific features like sort and distribution keys that have no direct Snowflake equivalent, validation strategy, post-migration performance tuning, and your estimated downtime and rehearsal approach.
Sample Answer
Direct answer. Migrating a Redshift cluster to Snowflake with minimal downtime and functionally equivalent queries requires converting Redshift-specific constructs that have no direct Snowflake equivalent, running a dual-write or staged-cutover pattern to minimize downtime, and validating query-level equivalence before declaring the migration complete.
Structured elaboration.
- Schema conversion. Convert Redshift's DDL to Snowflake's dialect; most standard SQL types map directly, but Redshift-specific compression encodings and some data types need explicit translation.
- Data export and import. Use
UNLOADto export Redshift tables to S3 in a portable format (Parquet is generally preferable to CSV for type fidelity and load speed), then load into Snowflake viaCOPY INTOfrom an external stage pointed at that same S3 location, avoiding an unnecessary intermediate hop. - Handling Redshift-specific features. Redshift's sort keys and distribution keys (KEY, EVEN, ALL) have no direct Snowflake equivalent, since Snowflake's micro-partitioning and clustering model works differently: translate a Redshift sort key's intent into a Snowflake clustering key on the same column where query patterns still filter on it, and drop the distribution-key concept entirely, since Snowflake's architecture does not require manually distributing data across compute the way Redshift does.
- Validation strategy. Run row-count and checksum comparisons between source and target tables immediately after load, then run the full production query set against both systems in parallel, comparing result sets column-by-column (not just row counts) to catch subtle type-coercion or NULL-handling differences between the two platforms' SQL engines.
- Post-migration performance tuning. Once representative production query load is running against Snowflake, add clustering keys based on observed query patterns (not assumed ones) and monitor for any query whose plan indicates a full-table scan where the equivalent Redshift query used a sort-key-pruned scan, since that is the most common source of a real performance regression in this specific migration direction.
- Downtime and rehearsal. Estimate downtime as the time to complete a final incremental data sync plus cutover validation, not the full initial bulk load; rehearse the entire migration end-to-end against a full-scale copy of production data at least once before the real cutover, timing each step so the actual cutover window is a known quantity rather than an estimate.
Worked example. For a cluster with a large fact table sorted and distributed for a specific join pattern, first do a full bulk UNLOAD/COPY INTO migration while Redshift stays live and serving production traffic, then run incremental syncs (capturing only rows changed since the bulk export) on a schedule as validation and tuning proceed. Schedule the final cutover for a low-traffic window: stop writes to Redshift, run one final incremental sync to catch the last delta, validate row counts and checksums match exactly, and repoint application traffic to Snowflake. This staged approach keeps actual downtime to the length of that final sync-and-validate step, typically minutes, rather than the hours a full stop-the-world bulk migration would require.
Trade-offs and pitfalls. The most common mistake in this specific migration is assuming a Redshift sort key and a Snowflake clustering key are interchangeable one-to-one; they achieve a similar goal (pruning scans on filtered columns) through different underlying mechanisms, and blindly copying the sort-key column list onto a clustering key definition without validating against actual Snowflake query plans can leave real performance on the table. Always validate with EXPLAIN on both platforms rather than assuming equivalence.
Explain the core concepts of a managed streaming platform like Amazon Kinesis Data Streams: shard, producer, consumer, and retention. How does shard count map to throughput and parallelism, what typically forces a team to reshard, and what are the basic cost considerations of shard count?
Sample Answer
Direct answer. In Amazon Kinesis Data Streams, a stream is divided into shards, each an independent, ordered sequence of records. A producer writes records to a shard (chosen by a partition key), a consumer reads records from a shard in order, and retention determines how long unconsumed records stay available (24 hours by default, extendable up to 365 days). Shard count is the unit of both throughput and parallelism: more shards mean more concurrent producers and consumers can be served, and the total capacity of the stream scales linearly with shard count.
Structured elaboration.
- Shard. The base unit of capacity. Each shard supports up to 1MB/second or 1,000 records/second of writes, whichever limit is hit first, and up to 2MB/second of reads (or 5 GetRecords calls/second per shard, depending on consumer type).
- Producer. Writes records to the stream, specifying a partition key. Kinesis hashes the partition key to determine which shard the record lands on, so records with the same key always go to the same shard, preserving per-key order.
- Consumer. Reads records from one or more shards, in order, using a shard iterator. Kinesis Client Library (KCL) applications typically run one worker per shard to parallelize consumption.
- Retention. How long a record stays in the stream if unconsumed. The default is 24 hours; you can extend it for replay scenarios (reprocessing after a bug fix) at additional storage cost.
- Resharding. Splitting a shard increases capacity for a hot partition key range; merging reduces shard count (and cost) when a stream is over-provisioned. Both operations are typically triggered manually or via auto-scaling policies, not automatically by Kinesis itself.
Worked example. A team's typical reason to reshard is outgrowing either the write throughput (aggregate producer traffic exceeds shard capacity, causing ProvisionedThroughputExceededException errors) or hitting a hot-key problem (one partition key's traffic overwhelms its single shard while others sit idle). Splitting the hot shard into two increases its effective capacity without touching the rest of the stream, while a broad traffic-growth reshard usually means increasing shard count across the board. Since shard count directly drives cost (each shard has an hourly charge regardless of how much of its capacity you actually use), teams periodically merge shards back down during low-traffic periods or seasonal troughs to avoid paying for idle capacity.
Trade-offs and pitfalls. A common mistake is choosing a partition key with low cardinality (for example, a fixed region label for a service with only three regions), which concentrates traffic onto a handful of shards regardless of how many shards the stream has, defeating the purpose of adding more. Resharding is also not instantaneous or free: it briefly affects the shard's availability for writes and requires consumers to be resilient to shard-ID changes as they discover new child shards after a split or merge. Basic cost planning should account for the fact that you pay per shard-hour whether or not that shard's capacity is fully used, so right-sizing shard count to actual traffic (not a generous overestimate "to be safe") directly controls cost.
Unlock Full Question Bank
Get access to all 30 Cloud Data Platforms and Managed Services interview questions and detailed answers.
Sign in to ContinueJoin thousands of developers preparing for their dream job.