背景
数据仓库是企业用来永久保存数据,并且在上面进行数据分析和建模的服务。
目前的数据仓库除了私有化部署的Hadoop系列外,还有一些公有云SAAS版本。比如:
- Google BigQuery, 定价
- Amazon Redshift, 定价: Amazon MPP数据库
- 阿里云 MaxCompute, 定价
- 腾讯大数据处理套件TBDS
- UCLOUD 云数据仓库 UDW: 基于Greenplum和PostgreSQL的MPP数据库
本文调研前三个产品
定价调研
产品 | 语法 | 接口 | BI工具 | 其它 |
---|---|---|---|---|
Google BigQuery | ANSI SQL:2011 | ODBC/JDBC | Tableau、MicroStrategy、Looker、Google DataStudio 等 | 可与CloudML Engine 和 TensorFlow 进行集成 |
Amazon Redshift | 标准SQL | ODBC/PostgreSQL JDBC | ||
阿里云 MaxCompute | 非标准SQL, MapReduce, Graph |
Google BigQuery
每月可免费分析高达 1TB 的数据,并可免费存储 10GB 的数据。
- 存储: 每月每G $0.02, 每月前 10 GB 免费
- 长期存储: 每月每G $0.01, 每月前 10 GB 免费
- 流式插入: 每200M $0.01
- 查询分析: 每 TB $5, 每月前 1 TB 免费
- 加载数据:免费
- 复制数据:免费
- 导出数据:免费
- 元数据操作:免费
本文不精确计算,仅定性的调研。
存储费用和流式插入费用,已经非常的明确了。查询分析部分的费用如下:
查询分析部分
根据您选择的列中处理的总数据量向您收取费用,而每列的总数据量是基于该列中的数据类型计算的。
官方的费用示例,整理如下:
示例查询 | 处理的字节数 |
---|---|
SELECT corpus,word FROM publicdata:samples.shakespeare LIMIT 1; | corpus 列 + word 列的总大小 |
SELECT corpus FROM (SELECT * FROM publicdata:samples.shakespeare); | corpus 列的总大小 |
SELECT COUNT(*) FROM publicdata:samples.shakespeare; | 没有处理任何字节 |
SELECT COUNT(corpus) FROM publicdata:samples.shakespeare; | corpus 列的总大小 |
SELECT COUNT(*) FROM publicdata:samples.shakespeare WHERE corpus = 'hamlet'; | corpus 列的总大小 |
SELECT shakes.corpus,wiki.language FROM publicdata:samples.shakespeare AS shakes JOIN EACH publicdata:samples.wikipedia AS wiki ON shakes.corpus = wiki.title; | shakes.corpus 、wiki.language 和 wiki.title 列的总大小 |
即写SQL的时候,写法和费用是相关的。
原理估计是SQL语法树解析,根据字段列和表,来查询元数据信息,计算费用。
Amazon Redshift
定价有三个选项:
- 按需定价:没有预付成本,您只需基于群集中的节点类型和数量支付小时费用。
- Amazon Redshift Spectrum 定价:让您能够对 Amazon S3 中的 EB 级数据运行 SQL 查询,只需为扫描的字节数付费。
- 预留实例定价:通过承诺使用 Redshift 1 年或 3 年,相比按需费率最多可以节省 75% 的费用。
按需定价
内容整理自Amazon Redshift 定价页面,如下:
vCPU | ECU | 内存 | 存储 | I/O | 价格 | |
---|---|---|---|---|---|---|
密集计算 | ||||||
dc2.large | 2 | 7 | 15 GiB | 0.16TB SSD | 0.60 GB/s | 每小时 0.25 USD |
dc2.8xlarge | 32 | 99 | 244 GiB | 2.56TB SSD | 7.50 GB/s | 每小时 4.80 USD |
密集存储 | ||||||
ds2.xlarge | 4 | 14 | 31 GiB | 2TB HDD | 0.40 GB/s | 每小时 0.85 USD |
ds2.8xlarge | 36 | 116 | 244 GiB | 16TB HDD | 3.30 GB/s | 每小时 6.80 USD |
看起来存储和计算是捆绑起来计费的,不能单独计费。
Redshift Spectrum定价
Spectrum允许直接对S3上的数据进行SQL查询。在阿里云中,Amazon S3对应产品是OSS,Spectrum对应的功能是访问 OSS 非结构化数据。
Redshift Spectrum中,查询按扫描的数据量计费,对表的管理操作(即DDL)不计费。
这里扫描的数据量是按物理存储的数据量。如果使用了列数据,或者压缩存储,那么扫描的数据量就会变少,费用会大大降低。
BigTable中也是对列计费的,但是没有压缩选项。不过BigTable的存储单价近似为Spectrum的1/3,可以理解为默认做了压缩。总体算下来存储成本是相当的。
这里Redshift Spectrum等列存储格式的选择更灵活,可以选择Parquet或者ORC格式。
具体的计费为:以10M为单位,扫描的每 TB 数据 支付 5 USD。
例如,如果扫描 10GB 的数据,则需支付 0.05 USD。如果扫描 1TB 的数据,则需支付 5 USD。
Redshift Spectrum 定价示例
假设一个表中有 100 个大小相同的列,以未压缩文本文件的格式存储在 Amazon S3 中,总大小为 4TB。如果运行查询以从该表的一个列中获取数据,则 Redshift Spectrum 需要扫描整个文件,因为文本格式无法拆分。该查询将扫描 4TB 数据,费用为 20 USD。(5 USD/TB * 4TB = 20 USD)
如果使用 GZIP 将文件压缩,那么压缩比可能为 4:1。这样,您可以获得一个大小为 1TB 的压缩文件。Redshift Spectrum 必须扫描整个文件,但由于它的大小是原来的四分之一,所以您只需支付四分之一的费用 (即 5 USD)。(5 USD/TB * 1TB = 5 USD)
如果您压缩文件并将其转换为列式格式 (如 Apache Parquet),那么压缩比可能为 4:1,您可以获得一个大小为 1TB 的文件。使用上述查询,Redshift Spectrum 只需扫描 Parquet 文件的其中一列。该查询的费用为 0.05 USD。(5 USD/TB * 1TB 文件大小 * 1/100 列,即 10GB 的总扫描量 = 0.05 USD)
阿里云 MaxCompute
费用分为4部分: 存储计费, 计算计费, 下载计费和数据导入计算。
- 存储计费: 按容量阶梯计费
- 计算计费: 分按量后付费和按CU预付费两种计算计费方式
- 下载计费: 按照下载的数据大小进行计费
- 数据导入:数据导入MaxCompute不计费
其中计算计费分两种方式
- 按量后付费: SQL任务,按I/O后付费;MapReduce任务,按量付费。
- 按CU预付费: 仅在阿里云大数据平台提供
存储计费
项目的数据实际存储量大于0小于等于512MB时
MaxCompute将收取这个项目0.01元的费用。示例如下:
-
如果您在MaxCompute上,某个项目的存储的数据为100MB,MaxCompute会直接收取您0.01元/天的费用。
-
如果您有多个项目,且每个项目实际存储量小于512MB,MaxCompute会对每个项目收取0.01元。
项目的数据实际存储量大于等于512MB时
基础价格 | 大于100GB部分 | 大于1TB部分 | 大于10TB部分 | 大于100TB部分 | 1PB以上部分 |
---|---|---|---|---|---|
0.0192元/GB/天 | 0.0096元/GB/天 | 0.0084元/GB/天 | 0.0072元/GB/天 | 0.006元/GB/天 | 请通过工单联系我们 |
计算计费
SQL任务按量后付费
SQL任务按量后付费即按I/O后付费:您每执行一条SQL作业,MaxCompute将根据该作业的输入数据及该SQL的复杂度进行计费。该费用在SQL执行完成后产生,并在下一天做一次性的计费结算。
MaxCompute SQL任务的按I/O后付费会针对每个作业产生一次计量。当天的所有计量信息将在第二天做一次性汇总收费。
SQL计算任务的计费公式为:
一次 SQL 计算费用 = 计算输入数据量 * SQL 复杂度 * SQL 价格
价格如下:
计费项 | 价格 |
---|---|
SQL价格 | 0.3元/GB |
-
计算输入数据量:指一条SQL语句实际扫描的数据量,大部分的SQL语句有分区过滤和列裁剪,所以一般情况下这个值会远小于源表数据大小:
-
列裁剪:例如您提交的SQL是
select f1,f2,f3 from t1;
只计算t1表中f1,f2,f3三列的数据量,其他列不会参与计费。 -
分区过滤:例如SQL语句中含有where ds >“20130101”,ds是分区列,则计费的数据量只会包括实际读取的分区,不会包括其他分区的数据。
-
-
SQL复杂度:先统计SQL语句中的关键字,再折算为SQL复杂度,具体如下:
-
SQL关键字个数 = Join个数 + Group By个数 + Order By个数 + Distinct个数 + 窗口函数个数 + max(insert into个数-1, 1)。
-
SQL复杂度计算:
-
SQL关键字个数小于等于3,复杂度为1。
-
SQL关键字个数小于等于6,且大于等于4,复杂度为1.5。
-
SQL关键字个数小于等于19,且大于等于7,复杂度为2。
-
SQL关键字个数大于等于20,复杂度为4。
-
-
复杂度计量命令格式:
cost sql <SQL Sentence>;
示例如下:
-
odps@ $odps_project >cost sql SELECT DISTINCT total1 FROM
-
(SELECT id1, COUNT(f1) AS total1 FROM in1 GROUP BY id1) tmp1
-
ORDER BY total1 DESC LIMIT 100;
-
Complexity:1.5
示例中SQL关键字的个数是4(该语句中有一个DISTINCT,一个COUNT,一个GROUP BY,一个ORDER),而SQL复杂度是1.5。如果表in1的数据量为1.7GB(对应账单为1.7GB×10243=1825361100.8Byte),则实际消费为:1.7*1.5*0.3=0.76 元
。
定价总结
方式 | BigQuery | RedShift Spectrum | MaxCompute |
---|---|---|---|
存储 | 每月每G: 0.01$ | 每月每GB: 0.039$ | 每天每G: 0.0192元 |
实时流入 | 每200M $0.01 | ||
SQL查询 | 每TB $5 | 每TB 5$ | 计算输入数据量 * SQL 复杂度 * SQL 价格(0.3元/GB) |
- 存储成本:三者的成本是差不多的,具体和数据量和压缩方式相关。
- SQL查询成本:前两者是一刀切;MaxCompute计算粒度更细。具体也和查询条件相关。
参考
- Google BigQuery
- Amazon Redshift
- 阿里云 MaxCompute
- 使用 Redshift Spectrum 查询 S3 数据
- 笔记: GCE BigQuery vs AWS Redshift vs AWS Athena: 没有测试到 Spectrum + Parquet的情形
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于