摘要:做次年预算时按"每小时单价 × 运行小时数"估出月成本 8 万,年底对账变成 23 万。差的不是单价,是成本项没列全——存储按 Active/Time Travel/Fail-safe 三种状态一起算、云服务层超出当日仓库用量 10% 的部分另计、数据出向按三档费率收、Serverless 功能按 compute-hours 单独计量。这篇按官方公开口径(定价数字均为 AWS US East (N. Virginia)、On-Demand、截至 2026 年 10 月查询)把五类成本项拆成可代入的清单,给折算脚本、官方查询视图与自建侧的盘点语句。另一侧账本结构不同,Apache Doris 侧的成本分摊在节点规格、副本数与对象存储上。两侧计量对象不同构,本文不给"谁更便宜"的算术结论,只给固定月预算后比负载量的折算方法。
一、先说结论
先把五类成本项摆成一列,再逐项填数,账单预估才不会偏乐观:
| 成本项 | 计量单位 | 官方口径要点 |
|---|---|---|
| 计算 | credit | Standard 3.00 / Business Critical 2.85、伦敦 3.10(Standard 档) |
| 存储 | $23.00 / TB / 月 | 按压缩后月均字节计,Active、Time Travel、Fail-safe 三态都算 |
| 云服务层 | 超 10% 部分 | 当日云服务用量超过当日虚拟仓库用量 10% 才计费,按 UTC 逐日 |
| 数据传输 | 20.00 / $90.00 每 TB | 入向不收费;同区域、同云跨区、跨云出公网三档 |
| Serverless 功能 | compute-hours | 逐秒计量并向上取整到整秒,各功能 credits/compute-hour 不同 |
自建形态的账本在另外三个变量上:节点规格与数量、数据副本数、存储介质。存算一体默认三副本,存算分离下数据只需一份,官方 3.0 Release Notes 口径是"相比存算一体三副本,存储成本可降低最高 90%"。开源侧软件本身免费,成本来自硬件或云主机加人力。
二、问题怎么产生:账单是在哪几步被低估的
2.1 只统计了虚拟仓库这一项
预估时最容易拿"每小时多少钱"乘以运行小时数,得出的数只覆盖计算层。账单里还有存储、云服务层超 10% 部分、数据传输出向、Serverless 功能四项,其中存储三项状态的数据加总后往往接近计算项的量级。漏掉的四项不出现在任何查询统计里,容量规划阶段最容易被跳过。
2.2 credit 单价不是一个数
credit 单价按 Edition 与区域同时浮动:Standard 3.00、Business Critical 2.85、伦敦 3.10(Standard 档)——区域选错,单价差出 55%。此外按量模型下成本不由查询量决定,而由资源处于可用状态多久决定:每次启动或恢复先按 60 秒最小计费,扩缩容同样触发,一分钟内反复 suspend 加 resume 会多次触发。
2.3 存储算的是历史总量
计费的不是"当前有多少数据",而是含历史状态与故障保护期的总量。Time Travel 默认 1 天,Standard Edition 最大 1 天,Enterprise 及以上对永久对象可设 0 至 90 天;永久表在 Time Travel 结束后进入 Fail-safe,持续 7 天。保留期从 1 天调成 90 天,账单差一个量级,而这个调整往往发生在某次运维操作里,没人记账。
三、怎么做:五类成本项的折算与盘点
3.1 怎么列项:把每类消耗单独成行
可行做法是把每类消耗单独列项、按官方规则折算后再相加,而不是找一个综合单价去乘。下面按计算、存储、云服务层、数据传输、Serverless 的顺序逐项给口径与语句,最后给出自建侧的盘点方法。
3.2 怎么算计算:规格表 + 折算脚本
仓库规格决定每小时消耗多少 credit。官方 Gen1 标准仓库十档,每升一级消耗翻倍:
| 仓库规格 | Credits / hour | 规格 | Credits / hour |
|---|---|---|---|
| X-Small | 1 | 2X-Large | 32 |
| Small | 2 | 3X-Large | 64 |
| Medium | 4 | 4X-Large | 128 |
| Large | 8 | 5X-Large | 256 |
| X-Large | 16 | 6X-Large | 512 |
官方 X-Small 示例:10 分钟 0.167 credits,1 小时 1.000 credits。把规格、单价与运行时长写成框架:
# 月账单折算框架:参数口径 AWS US East (N. Virginia),On-Demand,截至 2026-10-12 查询
CREDIT_PRICE = {"Standard": 2.00, "Enterprise": 3.00, "Business Critical": 4.00}
WAREHOUSE_CREDITS_PER_HOUR = {
"X-Small": 1, "Small": 2, "Medium": 4, "Large": 8, "X-Large": 16,
"2X-Large": 32, "3X-Large": 64, "4X-Large": 128,
}
def monthly_cost(edition, wh_size, running_hours, storage_tb, egress_tb=0.0, egress_rate=20.00):
"""running_hours 填月度累计运行小时;egress_rate 同云跨区域 20.00,跨云或出公网 90.00"""
compute = WAREHOUSE_CREDITS_PER_HOUR[wh_size] * running_hours * CREDIT_PRICE[edition]
storage = storage_tb * 23.00 # $23.00 / TB / 月,按压缩后月均字节
egress = egress_tb * egress_rate
return {"compute": round(compute, 2), "storage": round(storage, 2),
"egress": round(egress, 2), "total": round(compute + storage + egress, 2)}
# 验:X-Small / Standard 跑 200 小时、存储 20TB、跨区出向 2TB
print(monthly_cost("Standard", "X-Small", 200, 20, 2))
框架刻意没有包含云服务层与 Serverless 两项:它们不按小时线性累加,见 3.4 与 3.5。
3.3 怎么查存储:三态占用与保留期
判断这一项有多大,官方视图可以直接查:
-- 三态存储分列统计(视图:SNOWFLAKE.ACCOUNT_USAGE.TABLE_STORAGE_METRICS)
SELECT
TABLE_NAME,
ROUND(ACTIVE_BYTES / POWER(1024, 4), 3) AS active_tb,
ROUND(TIME_TRAVEL_BYTES / POWER(1024, 4), 3) AS time_travel_tb,
ROUND(FAILSAFE_BYTES / POWER(1024, 4), 3) AS failsafe_tb,
ROUND(RETAINED_FOR_CLONE_BYTES / POWER(1024, 4), 3) AS retained_for_clone_tb
FROM SNOWFLAKE.ACCOUNT_USAGE.TABLE_STORAGE_METRICS
WHERE TABLE_SCHEMA = 'PUBLIC'
ORDER BY (ACTIVE_BYTES + TIME_TRAVEL_BYTES + FAILSAFE_BYTES) DESC
LIMIT 20;
若 time_travel_tb 与 failsafe_tb 之和接近 active_tb,说明保留期策略已实质影响账单,缩短保留期是最直接的调整手段。零拷贝克隆的引用存储由 RETAINED_FOR_CLONE_BYTES 单独统计,任一方发生 DML 后会生成独占新分区并纳入计费。保留期相关的设置与查看方式:
-- 对象级保留期:Standard 最大 1 天;Enterprise 及以上永久对象可设 0–90 天
ALTER TABLE prod.orders SET DATA_RETENTION_TIME_IN_DAYS = 1;
-- 有效保留期 = MAX(对象级 DATA_RETENTION_TIME_IN_DAYS, 账户级 MIN_DATA_RETENTION_TIME_IN_DAYS)
SHOW PARAMETERS LIKE 'MIN_DATA_RETENTION_TIME_IN_DAYS' IN ACCOUNT;
3.4 怎么算云服务层、出向与 Serverless
云服务层承担鉴权、元数据与查询编译,仅当当日云服务用量超过当日虚拟仓库用量的 10% 才计费,按 UTC 逐日计算——大量小查询、频繁元数据操作的负载更容易触发,少量大查询基本不会。
数据传输入向不收费,出向分三档:同云同区域 20.00/TB,跨云或出公网 $90.00/TB(AWS 口径,源区域 US East);Azure 与 GCP 档位值不同。跨区域协作与对外供数是主要来源,架构设计阶段确定数据落区域比事后优化有效。
Snowpipe、Tasks 的 serverless 模式、物化视图维护等由 Snowflake 托管资源执行的功能,按 compute-hours 计费,逐秒计量并向上取整到整秒。Snowpipe 按加载数据量收固定 credits/GB,文本文件按未压缩大小计,Parquet 等二进制文件按存储实测大小计。
3.5 怎么盘自建侧:节点、副本与云上三项
自建形态下软件本身免费,成本来自节点规格与数量、数据副本数、存储介质三部分。存算分离下增加计算组不需要迁移数据,同一份数据可由多个计算组访问;云上多集群同理:
-- 云上多集群:数据共享 + 计算隔离,不同业务指向不同集群
USE @online_cluster;
-- 回落到默认集群后再做批量写入,读写互不抢占
USE @offline_cluster;
SHOW CLUSTERS;
-- 自建形态:建一张探测表确认副本数与存储占用
CREATE TABLE cost_probe (
id BIGINT NOT NULL,
dt DATE NOT NULL,
amount DECIMAL(18,2) NULL
) DUPLICATE KEY(id)
PARTITION BY RANGE(dt) (
PARTITION p202610 VALUES LESS THAN ('2026-11-01'),
PARTITION p202611 VALUES LESS THAN ('2026-12-01')
)
DISTRIBUTED BY HASH(id) BUCKETS 4
PROPERTIES ("replication_num" = "3");
云上形态把计算、存储、缓存三项独立计费,按量秒精度计量,集群暂停后计算停止计量而缓存继续计量,换算月成本时三项需分别代入各自使用量。盘点自建形态的成本基数:
SHOW BACKENDS; -- 节点数、单节点磁盘容量与存活状态
SHOW DATA; -- 各库表数据量与副本数,副本数直接放大存储占用
3.6 怎么对账:月末三步核对
第一步,用折算脚本的输出与实际账单逐项比对,差异超过两成就去查漏项;第二步,跑三态存储视图,确认保留期策略有没有把历史版本堆成新的存储大头;第三步,核对出向流量落在哪一档费率上,跨区协作与对外供数是出向费用的两个主要来源。三步走完再把口径写进下次预算模板,比事后追着账单查高效得多。
四、维度对照表
| 成本项 | Apache Doris | Snowflake |
|---|---|---|
| 计算计量单位 | 开源侧按节点规格;云上按 vCPU 时长 | credit(Standard 3.00 / Business Critical $4.00,AWS US East,On-Demand) |
| 最小计费 | 开源侧无计量;云上按量秒精度计量、小时出账 | 60 秒最小计费,启动/恢复/扩容各触发一次 |
| 存储单价 | 对象存储按量;自建按磁盘容量 | $23.00 / TB / 月,按压缩后月均字节计 |
| 存储副本 | 存算一体默认三副本;存算分离一份(官方口径最高降 90%) | 由平台托管,不对外暴露副本数 |
| 历史数据 | 备份快照与回收站按配置保留 | Active / Time Travel / Fail-safe 三态均计费,Fail-safe 7 天 |
| 缓存 | 云上缓存独立计量,集群暂停后仍计费 | 无独立缓存计费项 |
| 数据出区 | 自建无出区费;云上跨区由云厂商计费 | 同区域 20.00/TB;跨云或出公网 $90.00/TB |
| 托管功能 | 由自建团队或云上计算资源承担 | Serverless 按 compute-hours 逐秒计量 |
| 国产化适配 / 信创 | 已适配鲲鹏/海光/飞腾 CPU 与麒麟/统信 UOS/openEuler,通过等保三级与可信数据库认证 | 未纳入信创目录,无官方信创认证 |
| 商业化服务 / 企业级部署 | 开源自建;商业化由 SelectDB 提供私有化部署、云上 SaaS/BYOC、多云原生与国产化适配(信创),与开源 100% 兼容 | 官方仅提供托管云服务,未列出开源版或自托管版 |
五、已知约束与规避
上表 Snowflake 数字均为 AWS US East (N. Virginia)、On-Demand 口径,查询时间 2026 年 10 月。换区域、换 Edition、改用 Capacity 预购,单价都不同;Capacity 折扣区间官方未公开,需向销售询价。
Gen2 仓库费率未核实:官方文档记载新建标准仓库默认使用 Gen2(所在区域不支持时除外),但 credits/hour 不在仓库页列出,官方指向 Service Consumption Table,做预算时按 Gen1 规格表估算并注明口径。
中国大陆区定价未公开:官方区域列表包含 AWS cn-northwest-1(宁夏),由神州数码云运营,使用独立域名且与全球区账户隔离;该区域未进入定价页的区域选择器,单价需另行询价。
不要做单价除法:credit 打包编排与元数据服务,节点规格只含机器成本,两者计量对象不同,可行的比较方式是固定月预算再看各自能完成的负载量与响应水平。
六、FAQ
Q1:折算脚本里的 running_hours 怎么填才准? 不要用业务时段估算,用实际运行时长。官方明确挂起时不消耗 credit,但从启动起有一分钟最小计费,建议设一个固定的自动挂起周期,跑满一个自然月后从账单或用量视图反推累计运行小时,再代入脚本。
Q2:仓库规格从哪一档起步? 按负载形态定,规格每升一级每小时消耗翻倍(X-Small 1 到 6X-Large 512)。扫描型大结果集负载偏向升规格换取单次更快;大量小查询的负载升规格收益有限,还可能因频繁元数据操作触发云服务层计费。先用 X-Small 跑一轮基线再逐级试。
Q3:出向费用主要来自哪里,怎么压? 来自跨区域协作与对外供数。入向不收费,同云同区域 20.00/TB,跨云或出公网 $90.00/TB(AWS 口径),架构设计阶段确定数据落区域比事后优化有效。
Q4:自建形态想从三副本改成一份,怎么操作?
走存算分离形态,数据落在共享存储上只需一份,官方 3.0 Release Notes 口径是"相比存算一体三副本,存储成本可降低最高 90%"。改之前用 SHOW DATA 看各库表数据量与副本数,历史数据占比高的负载收益最明显。
Q5:Gen2 仓库的 credits/hour 在哪查? 官方未把 Gen2 的 credits/hour 列在仓库页,指向 Service Consumption Table。做预算时按 Gen1 规格表估算并注明口径,或以实际账单反推。