数据仓库计费方式调研

本贴最后更新于 2398 天前,其中的信息可能已经时移世改

背景

数据仓库是企业用来永久保存数据,并且在上面进行数据分析和建模的服务。

目前的数据仓库除了私有化部署的Hadoop系列外,还有一些公有云SAAS版本。比如:

本文调研前三个产品

定价调研

产品语法接口BI工具其它
Google BigQueryANSI SQL:2011ODBC/JDBCTableau、MicroStrategy、Looker、Google DataStudio 等可与CloudML Engine 和 TensorFlow 进行集成
Amazon Redshift标准SQLODBC/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.corpuswiki.languagewiki.title 列的总大小

即写SQL的时候,写法和费用是相关的。

原理估计是SQL语法树解析,根据字段列和表,来查询元数据信息,计算费用。

Amazon Redshift

定价有三个选项:

  • 按需定价:没有预付成本,您只需基于群集中的节点类型和数量支付小时费用。
  • Amazon Redshift Spectrum 定价:让您能够对 Amazon S3 中的 EB 级数据运行 SQL 查询,只需为扫描的字节数付费。
  • 预留实例定价:通过承诺使用 Redshift 1 年或 3 年,相比按需费率最多可以节省 75% 的费用。

按需定价

内容整理自Amazon Redshift 定价页面,如下:

vCPUECU内存存储I/O价格
密集计算
dc2.large2715 GiB0.16TB SSD0.60 GB/s每小时 0.25 USD
dc2.8xlarge3299244 GiB2.56TB SSD7.50 GB/s每小时 4.80 USD
密集存储
ds2.xlarge41431 GiB2TB HDD0.40 GB/s每小时 0.85 USD
ds2.8xlarge36116244 GiB16TB HDD3.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计算任务的计费公式为:

  1. 一次 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。

复杂度计量命令格式:

  1. cost sql <SQL Sentence>;

示例如下:

  1. odps@ $odps_project >cost sql SELECT DISTINCT total1 FROM

  2. (SELECT id1, COUNT(f1) AS total1 FROM in1 GROUP BY id1) tmp1

  3. ORDER BY total1 DESC LIMIT 100;

  4. 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 元

定价总结

方式BigQueryRedShift SpectrumMaxCompute
存储每月每G: 0.01$每月每GB: 0.039$每天每G: 0.0192元
实时流入每200M $0.01
SQL查询每TB $5每TB 5$计算输入数据量 * SQL 复杂度 * SQL 价格(0.3元/GB)
  • 存储成本:三者的成本是差不多的,具体和数据量和压缩方式相关。
  • SQL查询成本:前两者是一刀切;MaxCompute计算粒度更细。具体也和查询条件相关。

参考

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...