Snowflake zero-copy cloning creates an instant copy of a table, schema, or database without duplicating the underlying storage. Here is how cloning works, its cost implications, and the development and testing patterns it enables.
The quick answer
Snowflake zero-copy cloning creates an instant copy of a table, schema, or database that shares the underlying storage with the source — no data is duplicated at the time of cloning. The clone appears as a fully independent object: it has its own metadata, can be queried and modified independently, and changes to the clone do not affect the source (and vice versa). Copy-on-write semantics mean that storage is only used for data that diverges between the clone and the source. This makes cloning essentially free at the time of creation, regardless of the source object's size.
How zero-copy cloning works
Snowflake's storage layer uses micro-partitions — immutable, compressed data files (50–500MB each). A table is a collection of micro-partition references in the metadata layer. When you clone a table, Snowflake creates a new metadata object pointing to the same set of micro-partitions as the source. No data is copied. The clone and the source share the same underlying micro-partition files.
Copy-on-write kicks in when data diverges: if you INSERT rows into the clone, Snowflake creates new micro-partitions for the new data in the clone's metadata. If you DELETE rows from the clone, Snowflake creates new micro-partitions reflecting the clone's state (micro-partitions are immutable — deletes create new partitions rather than modifying existing ones). The source continues pointing to the original micro-partitions, unaffected.
The practical implication: a clone of a 10TB table is created instantly and costs no additional storage until clone and source diverge. If the clone is queried but not modified, it costs nothing beyond metadata. If the clone has 100GB of divergent data (rows inserted or deleted in the clone but not the source), only those 100GB incur incremental storage cost.
What can be cloned
Snowflake supports cloning at multiple levels of the object hierarchy:
**Tables**: CLONE TABLE. The most common clone operation. Clones the table's data and metadata. Any table — including tables in specific schemas, in specific databases — can be cloned.
**Schemas**: CLONE SCHEMA. Creates a clone of an entire schema, including all tables (and their data), views, sequences, and stored procedures within the schema. Views are cloned as views (pointing to the clone's tables, not the source's). Useful for copying an entire domain model.
**Databases**: CLONE DATABASE. Creates a complete clone of an entire database, including all schemas and their contents. The fastest way to create a complete environment copy — a full development database cloned from production is instantaneous regardless of database size.
**Dynamic tables and streams**: dynamic tables and streams can be cloned, but there are important considerations. Streams on cloned tables are independent streams on the cloned table (they do not carry the source stream's offset). Dynamic tables in a cloned schema need their refresh schedules reviewed.
**Stages**: external stages (S3, Azure, GCS) can be cloned. Internal stages cannot be cloned.
When to use zero-copy cloning
**Development and testing environments**: the canonical use case. Clone production databases to create development or staging environments in seconds, without the cost of duplicating storage or the time of a full data export/import. Development teams can work against near-production data volumes without impacting production or paying for duplicate storage. When the dev clone is done, drop it — the storage reclamation is immediate.
**Pre-change backups**: before running a potentially destructive transformation (a dbt run that rewrites a mart, a migration that alters a production table), clone the table as a snapshot. If the change produces incorrect output, restore from the clone. This is faster and more storage-efficient than traditional backup strategies.
**Blue-green deployments**: clone the production database before a major release, run the release against the clone, validate, then swap. If validation fails, the original production database is untouched.
**Data science and ML experimentation**: data scientists can clone production tables to experiment with model training on production-scale data without risk of modifying production or waiting for a data export.
**Audit and compliance snapshots**: clone a database or schema at a point in time as a compliance artifact — a point-in-time snapshot of the data state, stored as an independent object. Less storage-intensive than exporting to a file.
Clone interaction with time travel
Snowflake's time travel feature (the ability to query historical states of a table) interacts with cloning. You can clone a table AT a specific timestamp or at a specific query ID — creating a clone of the table as it existed at that point in time, not its current state. This is useful for reconstructing a specific historical state as a new table for investigation or recovery.
The syntax is: CREATE TABLE table_clone CLONE source_table AT (TIMESTAMP => '2026-06-01 00:00:00'). The clone reflects the source's state at that timestamp, using Snowflake's time travel storage for micro-partitions not in the current state.
Storage cost considerations
Zero-copy cloning is not free in perpetuity. Storage costs to understand:
**Shared micro-partitions**: micro-partitions shared between clone and source are billed once (to the schema or database that first created them, typically the source). While a clone is unmodified, it adds essentially no storage cost.
**Divergent data**: any micro-partitions unique to the clone (created by INSERT, UPDATE, or DELETE operations in the clone) are billed to the clone's schema or database. Monitor clone storage using SHOW TABLES and the ACTIVE_BYTES column to track divergent data accumulation.
**Time travel**: both the clone and the source maintain their own time travel storage for modifications made after cloning. Time travel storage for the clone is separate from time travel storage for the source.
**Drop clones you no longer need**: unlike traditional database backups, clones that are no longer needed should be dropped explicitly. Orphaned clones that have accumulated divergent data incur ongoing storage costs without delivering value.
Clone governance
In environments with many development clones, governance matters:
**Naming convention**: name clones consistently to identify their purpose, source, and creation date. A convention like dev_clone_prod_orders_20260601 makes it clear what the clone is, where it came from, and when it was created.
**Access control**: clones inherit the grants of the source object at the time of cloning. Review and adjust access control on clones in development environments — development clones likely should not have the same production access grants. In particular, ensure that service accounts with broad production access do not automatically have access to development clones.
**Lifecycle management**: establish a clone retention policy. Development clones older than 30 days without recent queries should be reviewed for removal. Use Account Usage QUERY_HISTORY to identify unused clones.
For the broader Snowflake architecture context, see snowflake architecture guide. For cost optimisation including storage management, see cloud data warehouse cost optimization. For time travel context, see snowflake pricing guide.
Our data architecture consulting practice implements Snowflake environments — including development workflow design, clone-based CI/CD patterns, and cost governance. If you are optimising your Snowflake development workflows, book a free 30-minute audit.
A former Microsoft data architect audits your data foundation, identifies your top priorities, and sends you a written plan. Free. No pitch.
Book a Call →