# Table

> Snowflake tables bill storage on 3 layers: active bytes, Time Travel history of 0 to 90 days, and Fail-safe, a fixed 7-day recovery window that cannot be shortened or disabled. High-churn tables can hold Time Travel and Fail-safe copies several times their active size, so retention settings matter more than row counts.

Source: https://zop.dev/integrations/snowflake/table
Updated: 2026-08-19

---

A Snowflake table bills storage three times over: once for the active bytes you can query, again for Time Travel history, and a third time for Fail-safe. Two of those layers are invisible when you look at the table itself, which is how a modest table quietly carries a storage footprint several multiples of its apparent size.

## Fail-safe is 7 days and not negotiable

Time Travel retention is configurable, from 0 up to 90 days depending on edition. Fail-safe is not: every permanent table gets a fixed 7-day window after Time Travel expires, it cannot be shortened or switched off, and it bills at the normal storage rate. The only exit is a transient table, which drops the Fail-safe layer entirely in exchange for weaker recovery guarantees.

## Churn is the multiplier

Both hidden layers retain superseded data. A table rewritten daily keeps every superseded copy through the Time Travel window and then through Fail-safe, so high-churn ETL targets routinely hold more dead bytes than live ones. Row count is a poor predictor of what a table costs; rewrite frequency is a good one.

## Why discovery reads ACCOUNT_USAGE, not SHOW

ZopNight inventories tables from `SNOWFLAKE.ACCOUNT_USAGE.TABLES` rather than `SHOW TABLES IN ACCOUNT`, because SHOW only returns tables in databases the active role has USAGE on, and an ungranted customer table would silently vanish from inventory. The query keeps undeleted base tables only, captures row count, bytes, transience, and `retention_time`, and parents each table to its database. The view trails reality by about 45 minutes to 3 hours, matching the discovery cadence.

## What gets priced and flagged

Storage is priced daily from active bytes, while Time Travel and Fail-safe bytes, access counts, and auto-clustering credits are tracked from `TABLE_STORAGE_METRICS` and related views. Long retention on a high-churn table is the classic finding, and point-lookup query patterns inform clustering recommendations.

## Expose the hidden layers

```sql
SELECT table_catalog, table_schema, table_name,
       active_bytes, time_travel_bytes, failsafe_bytes
FROM SNOWFLAKE.ACCOUNT_USAGE.TABLE_STORAGE_METRICS
ORDER BY failsafe_bytes DESC
LIMIT 20;
```

Any table where `failsafe_bytes` rivals `active_bytes` is churning hard. Shorten its retention, make it transient, or change how it is loaded.
