MaxCompute计算按量后付费方式主要针对SQL、MapReduce、Lightning(交互式分析)和Spark任务。其中SQL任务分为开发者版和标准版。

SQL任务按量后付费

SQL任务按量后付费:您每执行一条SQL作业,MaxCompute将根据该作业的输入数据及该SQL的复杂度进行计费。该费用在SQL执行完成后产生,并在第二天做一次性的计费结算。

MaxCompute SQL任务的按I/O后付费会针对每个作业产生一次计量。当天的所有计量信息将在第二天做一次性汇总收费。

开发者版SQL计算任务的计费公式为:
一次SQL计算费用 = 计算输入数据量 * 单价(0.15元/GB)
说明 当前开发者版每个项目每个月的计算费用优惠100元。
标准版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个数-1, 1)。
    • SQL复杂度计算:
      • SQL关键字个数小于等于3,复杂度为1。
      • SQL关键字个数小于等于6,且大于等于4,复杂度为1.5。
      • SQL关键字个数小于等于19,且大于等于7,复杂度为2。
      • SQL关键字个数大于等于20,复杂度为4。
    说明 如果SQL关键字个数远高于20,可能会造成解析执行计划消耗大量时间,任务长期处于Job Queueing的状态,建议您优化SQL,尽量控制SQL关键字个数。
复杂度计量命令格式:
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;
Intput:1825361100.8 Bytes
Complexity:1.5
示例中SQL关键字的个数是4(该语句中有DISTINCT、COUNT、GROUP BY和ORDER),而SQL复杂度是1.5,数据量约为1.7GB(对应账单为1.7GB*1024³=1825361100.8Byte),则实际消费为1.7*1.5*0.3=0.76元
说明
  • 账单出账时间在第二天06:00前,在计算任务成功结束后,系统会统计该计算任务读取的数据量和SQL复杂度,账单生成后会自动从您的账户余额中扣除费用以结算账单。没有成功的计算任务不扣费。
  • 与存储类似,SQL计算也以压缩后的数据大小计费。
  • 账单和下载的使用记录中,输入数据量的单位是Byte,要计算费用,数据量需要先除以1024³换算成GB。

外部表计费

从2018年10月31日开始,MaxCompute SQL外部表功能开始计费。采用的计费标准为:

一次SQL计算费用 = 计算输入数据量 * 单价(0.03元/GB)

当天的所有计量信息在第二天做一次性汇总收费,并直接体现在您的账户账单中。

说明
  • 如果在MaxCompute下创建和OTS表存储关联的表格,在MaxCompute下使用SQL查询时,无论通过外网还是经典/VPC网络访问OTS(除非使用STS方式访问),OTS都会收取费用,详情可参考计量项和计费说明。如果是访问OSS,则对于外网访问收取流量费用,经典/VPC不收取流量费用,此外如果调用OSS API,可能会额外产生费用,详情请参考计量项和计费项
  • 当您需要内外表混合作业的时候,会分别计费。

SQL费用预估

如果您使用DataWorks进行MaxCompute SQL开发,您可以使用图形界面上的费用预估功能估算可能产生的SQL费用。

您也可以使用COST SQL命令直接在odpscmd客户端上预估SQL费用,或者调用SQLCostTask SDK接口进行预估。预估的费用不一定等于真实费用,真实费用以最终账单费用为准。

MapReduce按量后付费

2017年8月16日,MaxCompute开始对MapReduce任务进行计费。MaxCompute MapReduce采用的计费标准如下。
MR任务当日计算费用 = 当日总计算时 * 单价(0.46元/计算时)

一个MR任务一次执行成功的计算时=任务运行时间(小时)*任务调用的核数量。

如果一个MR任务一次执行成功是调用了100核并花费0.5小时,那么本次执行计算时为0.5小时*100核=50个计算时。默认情况下,一个Map或一个Reduce task占用2 core(同时占用3G内存),例如一个Map Task运行了30min,消耗的资源即为2core*30min=60core*min,即1计算时。

MR计算任务成功结束后,系统会统计该计算任务所消耗的计算时。当天所有计量信息将在第二天做一次性汇总收费,生成账单,直接体现在账号账单中,并自动从账号余额中扣除费用以结算账单。
说明
  • 没有执行成功的计算任务不扣费。
  • 任务排队时间不计入计量计时。
  • 相同作业会受集群负载环境的影响而产生较小的费用波动。
  • 资源的基本单位定义为CU(Compute Unit),1CU包含的计算资源为4GB内存加上1核CPU。为避免内存乱用的现象发生,当任务消耗的Memory大于4倍1核CPU时,取Memory除4倍作为CU计算时。
  • 如果您购买了MaxCompute包年包月服务,则在您购买的服务范围内您可以免费使用MR计算任务,不会额外支付费用。
  • 如果您对MapReduce计算任务收费有疑惑,可工单咨询。

Lightning(交互式分析)按量后付费

2019年2月1日起,MaxCompute Lightning服务开始计费。

Lightning(交互式分析)任务按量后付费:您每开展一次Lightning查询作业,MaxCompute将根据该作业的输入数据量进行计费。该费用在SQL执行完成后产生,并在第二天做一次性的计费结算。

MaxCompute Lightning(交互式分析)查询任务的按I/O后付费会针对每个作业产生一次计量。当天的所有计量信息将在第二天做一次性汇总收费。

Lightning(交互式分析)查询任务的计费公式为:

一次Lightning查询费用 = 查询输入数据量 * 单价(0.03元/GB)
说明
  • Lightning服务使用单独的计算资源,即使您购买了MaxCompute包年包月服务,使用Lightning时也需要对Lightning按查询付费。
  • Lightning按照每次SQL查询扫描的数据大小(每条查询至少10MB)付费。对于取消的查询,将按实际扫描的数据量收费。
  • 不查询不产生任何费用。
  • MaxCompute默认对数据进行列式存储和数据压缩,Lightning的数据扫描大小按照压缩后的数据大小计算。
  • 查询分区表应用分区过滤条件,也将减少数据扫描量并提升查询性能。
  • MaxCompute交互式分析(Lightning)服务现已在华东1、华东2、华北2、华南1正式开放使用,在香港、亚太东南1Region开放公测。

Spark按量后付费

2019年2月1日起,MaxCompute开始正式对Spark任务进行计费。MaxCompute Spark采用的计费标准如下:
Spark任务当日计算费用 = 当日总计算时 * 单价(0.66元/计算时)

Spark任务计算时的概念:

  • 计算消耗的CPU core数量及内存量。
  • 1个计算时的单位为1 CPU Core+4GB内存。
  • 计算时的计算方法为Max(CPU×时长,向上取整(内存×时长/4))

例如一个用户使用了2 Core,5GB运行1 小时,计算时为Max(2×1,向上取整(5×1/4))=2计算时。如果一个用户使用了2 Core,10GB运行1小时,计算时为Max(2×1, 向上取整(10×1/4))=3计算时。

Spark计算任务结束后,系统会统计该计算任务所消耗的计算时。当天所有计量信息将在第二天做一次性汇总收费,生成账单,直接体现在账号账单中,并自动从账号余额中扣除费用以结算账单。
说明
  • 任务排队时间不计入计量计时。
  • 相同作业会受根据提交作业时用户所指定资源大小的不同会产生费用波动。
  • 如果您购买了MaxCompute包年包月服务,则在您购买的服务范围内您可以免费使用Spark计算任务,不会额外支付费用。
  • 如果您对Spark计算任务收费有疑惑,可工单咨询。
  • MaxCompute Spark目前已经开通了华东1、华北2、华南1等Region,其他Region陆续支持中。