You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按表/库维度拆分Snowflake STORAGE_USAGE视图的历史存储用量明细

可行实现方案

方案1:账户/数据库级历史时间旅行存储查询

如果不需要下钻到Schema、表维度,可直接使用Snowflake原生视图查询拆分后的存储数据,无需额外开发:

  • 可直接调用SNOWFLAKE.ACCOUNT_USAGE.DATABASE_STORAGE_USAGE_HISTORY视图,该视图自带每日粒度的各数据库存储拆分统计,包含ACTIVE_BYTES、TIME_TRAVEL_BYTES、FAILSAFE_BYTES三个独立指标,可直接统计不同时间周期的用量。

查询示例(统计最近30天各数据库日均时间旅行存储用量):

SELECT 
  DATABASE_NAME,
  AVG(TIME_TRAVEL_BYTES) AS AVG_DAILY_TIME_TRAVEL_BYTES
FROM SNOWFLAKE.ACCOUNT_USAGE.DATABASE_STORAGE_USAGE_HISTORY
WHERE USAGE_DATE >= DATEADD('day', -30, CURRENT_DATE())
GROUP BY DATABASE_NAME
ORDER BY AVG_DAILY_TIME_TRAVEL_BYTES DESC;

方案2:全维度(表/Schema/数据库)历史时序数据自定义实现

如果需要下钻到表、Schema维度的历史数据,可通过定时快照的方式实现,这是目前唯一支持表级历史时间旅行存储统计的可行方案,核心逻辑是定时留存SNOWFLAKE.ACCOUNT_USAGE.TABLE_STORAGE_METRICS视图的当前数据,生成可回溯的时序表。
具体实现步骤:

  • 步骤1:创建历史存储快照表,用于存储每日的表级存储指标
CREATE OR REPLACE TABLE YOUR_ADMIN_DB.YOUR_ADMIN_SCHEMA.TABLE_STORAGE_HISTORY (
  SNAPSHOT_DATE DATE NOT NULL,
  DATABASE_NAME VARCHAR,
  SCHEMA_NAME VARCHAR,
  TABLE_NAME VARCHAR,
  TABLE_ID NUMBER,
  ACTIVE_BYTES NUMBER,
  TIME_TRAVEL_BYTES NUMBER,
  FAILSAFE_BYTES NUMBER,
  TOTAL_STORAGE_BYTES NUMBER AS (ACTIVE_BYTES + TIME_TRAVEL_BYTES + FAILSAFE_BYTES)
)
COMMENT = '每日快照留存的表级存储用量历史数据';
  • 步骤2:创建定时快照任务,每日自动拉取最新表级存储数据
CREATE OR REPLACE TASK YOUR_ADMIN_DB.YOUR_ADMIN_SCHEMA.TASK_SNAPSHOT_TABLE_STORAGE
  WAREHOUSE = YOUR_ADMIN_WH
  SCHEDULE = 'USING CRON 0 1 * * * UTC' -- 可根据需要调整调度时间,此处为每日UTC时间1点执行
AS
INSERT INTO YOUR_ADMIN_DB.YOUR_ADMIN_SCHEMA.TABLE_STORAGE_HISTORY (
  SNAPSHOT_DATE, DATABASE_NAME, SCHEMA_NAME, TABLE_NAME, TABLE_ID, ACTIVE_BYTES, TIME_TRAVEL_BYTES, FAILSAFE_BYTES
)
SELECT
  CURRENT_DATE() - 1 AS SNAPSHOT_DATE, -- 统计前一天的存储情况
  TABLE_CATALOG AS DATABASE_NAME,
  TABLE_SCHEMA AS SCHEMA_NAME,
  TABLE_NAME,
  TABLE_ID,
  ACTIVE_BYTES,
  TIME_TRAVEL_BYTES,
  FAILSAFE_BYTES
FROM SNOWFLAKE.ACCOUNT_USAGE.TABLE_STORAGE_METRICS
WHERE DELETED = FALSE; -- 过滤已删除的表
  • 步骤3:启用定时任务(需要任务所属角色拥有EXECUTE TASK权限)
ALTER TASK YOUR_ADMIN_DB.YOUR_ADMIN_SCHEMA.TASK_SNAPSHOT_TABLE_STORAGE RESUME;

使用示例(按表统计最近90天的峰值时间旅行存储用量):

SELECT
  DATABASE_NAME,
  SCHEMA_NAME,
  TABLE_NAME,
  MAX(TIME_TRAVEL_BYTES) AS PEAK_TIME_TRAVEL_BYTES
FROM YOUR_ADMIN_DB.YOUR_ADMIN_SCHEMA.TABLE_STORAGE_HISTORY
WHERE SNAPSHOT_DATE >= DATEADD('day', -90, CURRENT_DATE())
GROUP BY DATABASE_NAME, SCHEMA_NAME, TABLE_NAME
ORDER BY PEAK_TIME_TRAVEL_BYTES DESC;

若需要补入任务创建之前的历史数据,可通过TABLE_STORAGE_METRICS的时间旅行功能回查过往数据,只要回查时间在你账户的时间旅行保留期内即可,示例补入7天前的历史数据:

INSERT INTO YOUR_ADMIN_DB.YOUR_ADMIN_SCHEMA.TABLE_STORAGE_HISTORY (
  SNAPSHOT_DATE, DATABASE_NAME, SCHEMA_NAME, TABLE_NAME, TABLE_ID, ACTIVE_BYTES, TIME_TRAVEL_BYTES, FAILSAFE_BYTES
)
SELECT
  DATEADD('day', -7, CURRENT_DATE()) AS SNAPSHOT_DATE,
  TABLE_CATALOG AS DATABASE_NAME,
  TABLE_SCHEMA AS SCHEMA_NAME,
  TABLE_NAME,
  TABLE_ID,
  ACTIVE_BYTES,
  TIME_TRAVEL_BYTES,
  FAILSAFE_BYTES
FROM SNOWFLAKE.ACCOUNT_USAGE.TABLE_STORAGE_METRICS
AT(OFFSET => -60*60*24*7) -- 回查7天前的视图数据,调整参数可补入其他日期数据
WHERE DELETED = FALSE;

内容的提问来源于stack exchange,提问作者Connor Lough

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:45:02