21分钟教会你分析MaxCompute账单

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 阿里云大计算服务MaxCompute是一款商业化的大数据分析平台,其计算资源有预付费和后付费两种计费方式。并且产品每天按照project为维度进行计量计费(账单基本情况下会第二天6点前产出)。本文使用的为云上客户真实数据,故在下文中的截图都mask掉了。

21分钟教会你分析MaxCompute账单

背景

阿里云大计算服务MaxCompute是一款商业化的大数据分析平台,其计算资源有预付费和后付费两种计费方式。并且产品每天按照project为维度进行计量计费(账单基本情况下会第二天6点前产出)。本文使用的为云上客户真实数据,故在下文中的截图都mask掉了。

关于MaxCompute计量计费说明,详见官方文档

image

但是通常情况下,我们在数据开发阶段或者在上线前夕会发下账单有波动(通常情况下为增大), 其实用户首先可以通过自助的方式来分析账单波动情况,再倒逼自己的作业进行优化。阿里云费用中心就是一个很好的通道,阿里云所有商业化收费的产品都可以在其中下载费用明细。

获取账单信息

通常您需要使用主账号查看账单详情。如果您需要使用子账号查看账单信息,请首先参考费用中心RAM配置策略行子账号授权。

step1:使用主账号或者被授权的RAM子账号来登录阿里云管控台
step2:右上角进入费用中心。

image

step3:在费用中心-消费记录-消费明细中,选择产品和账单日期。
image

包年包月中的 后付费是指项目开通包年包月计算计费模式后,还产生的存储、下载对应的费用(存储、下载费用只有后付费)。



step4:为了方便批量分析数据,我们选择下载使用记录csv文件在本地分析。

image

下载csv文件如下,可以在本地打开进行分析。

image

--csv的表头
项目编号,计量信息编号,数据分类,存储(Byte),结束时间,SQL/交互式分析,读取量(Byte),SQL复杂度,公网上行流量(Byte),公网下行流量(Byte),MR/Spark作业计算(Core*Second),SQL读取量_访问OTS(Byte),SQL读取量_访问OSS(Byte),开始时间,计算资源规格,DataWorks调度任务ID
AI 代码解读

上传账单明细至MaxCompute

使用记录明细字段解释:

  • 项目编号:当前账号下或子账号对应的主账号的MaxCompute project列表。
  • 计量信息编号:其中会包含存储、计算、上传和下载的计费信息编号,SQL为instanceid,上传和下载为Tunnel sessionid。
  • 数据分类:Storage(存储)、ComputationSql(计算)、UploadIn(内网上传)、UploadEx(外网上传)、DownloadIn(内网下载)、DownloadEx(外网下载)、spark(计算)、LightningQuery(计算)。按照计费规则其中只有红色为实际计费项目。
  • 开始时间/结束时间:按照实际作业执行时间进行计量,只有Storage是按照每个小时取一次数据。
  • 存储(Byte):每小时读取的存储量单位为Byte。
  • SQL 读取量(Byte):SQL计算项,每一次SQL执行时SQL的input数据量,单位为Byte。
  • SQL 复杂度(Byte):每次执行SQL的复杂度,为SQL计费因子之一。
  • 公网上行流量(Byte),公网下行流量(Byte):分别为公网上传和下载的数据量,单位Byte。
  • MR作业计算(CoreSecond):MR作业的计算时单位为coresecond,需要转换为计算时hour。
  • SQL读取量_访问OTS(Byte),SQL读取量_访问OSS(Byte):外部表实施收费后的读取数据量,单位Byte。
  • 计算资源规格:暂时为空。
  • DataWorks调度任务ID:通过DataWorks调度执行的节点ID,可以通过ID在运维中心中定位到具体某个节点。

① 确认CSV文件数据,尤其是列分隔符等(推荐使用UE)。
image

数据以逗号分隔,且单元格值都带有双引号。

② 数据预处理:替换掉文档所有双引号,以方便使用Tunnel等上传工具。

替换为不用填写。直接点击全部替换。

image

③ 创建MaxCompute表,存储下载的消费明细。

DROP TABLE IF EXISTS maxcomputefee ;

CREATE TABLE IF NOT EXISTS maxcomputefee 
(
    projectid STRING COMMENT '项目编号'
    ,feeid STRING COMMENT '计费信息编号'
    ,type STRING COMMENT '数据分类,包括Storage、ComputationSQL、DownloadEx等'
    ,storage BIGINT COMMENT '存储量'
    ,endtime DATETIME COMMENT '结束时间'
    ,computationsqlinput BIGINT COMMENT '输入数据量'
    ,computationsqlcomplexity DOUBLE COMMENT 'sql复杂度'
    ,uploadex BIGINT COMMENT '公网上行流量Byte'
    ,download BIGINT COMMENT '公网下行流量Byte'
    ,cu_usage DOUBLE COMMENT 'MR计算时*second'
    ,input_ots BIGINT COMMENT '访问OTS的数据输入量'
    ,input_oss BIGINT COMMENT '访问OSS的数据输入量'
    ,starttime DATETIME COMMENT '开始时间'
    ,guige string COMMENT '计算资源规格'
    ,nodeid string COMMENT '对应DataWorks节点ID'
)
;
AI 代码解读

④ Tunnel上传数据,具体Tunnel的配置详见官方文档
odps@ sz_mc>tunnel upload /Users/yangyi/Desktop/ODPS_2019-01-12_2019-01-14.csv maxcomputefee -c "UTF-8" -h "true" -dfp "yyyy-MM-dd HH:mm:ss";

image

当然用户也可以通过DataWorks数据导入的功能来进行,具体详见操作步骤

⑤ 验证数据。

image

通过SQL分析账单数据

1、分析SQL费用

云上客户使用MaxCompute,95%的用户通过SQL即可满足需求,SQL也在消费成长中占据了绝大部分。

SQL费用=一次SQL计算费用 = 计算输入数据量 × SQL复杂度 × 0.3元/GB

--分析SQL消费,按照SQL进行排行
SELECT  to_char(endtime,'yyyymmdd') as ds,feeid as instanceid
        ,projectid
        ,computationsqlcomplexity  --复杂度
        ,SUM((computationsqlinput / 1024 / 1024 / 1024)) as computationsqlinput  --数据输入量GB
        ,SUM((computationsqlinput / 1024 / 1024 / 1024)) * computationsqlcomplexity * 0.3 AS sqlmoney
FROM    maxcomputefee
WHERE   TYPE = 'ComputationSql'
AND to_char(endtime,'yyyymmdd') >= '20190112'
GROUP BY to_char(endtime,'yyyymmdd'),feeid
         ,projectid
         ,computationsqlcomplexity
ORDER BY sqlmoney DESC 
LIMIT   10000
;
AI 代码解读

--查询结果--
image

根据此段SQL执行结果可以得到如下结论:

  1. 大作业可以优化的点:**是否可以减小数据读取量、降低复杂度来优化费用成本。
  2. 也可以按照ds字段(按照天)进行汇总,分析某个时间段内的SQL消费金额走势。比如利用本地excle或云上QuickBI等工具绘制折线图等方式,更直观的反应作业的趋势。
  3. 拿到具体的instanceid,在console或者DataWorks脚本中进行wait instanceid;查看具体作业和SQL。
    image

随即在浏览器中打开logview的url地址(关于logview的介绍详见官方文档):

image

从logview中获取DataWorks节点名称:
在logview中打开SourceXML可以查看到具体执行信息,如SKYNET_NODENAME表示DataWorks的节点名称(当然只有被调度系统执行的作业才有值,临时查询为空,如下图所示)。拿到节点名称可以快速的在DataWorks找到该节点进行优化或查看责任人。

image

2、分析作业增长趋势

一般情况下费用的增长背后其实是作业量的暴涨,可能是重复执行,也可能是调度属性配置的不是很合理。

--分析作业增长趋势
SELECT  TO_CHAR(endtime,'yyyymmdd') AS ds
        ,projectid
        ,COUNT(*) AS tasknum
FROM    maxcomputefee
WHERE   TYPE = 'ComputationSql'
AND     TO_CHAR(endtime,'yyyymmdd') >= '20190112'
GROUP BY TO_CHAR(endtime,'yyyymmdd')
         ,projectid
ORDER BY tasknum DESC
LIMIT   10000
;
AI 代码解读

--执行结果--

image

从执行结果可以看出来12-14日提交到MaxCompute且执行成功的作业数的波动趋势。

3、分析存储费用

存储费用的计费规则相对来说比较复杂,因为下载到的明细是每个小时取一次数据。按照MaxCompute存储计费规则,会整体24小时求和然后平均之后的值再阶梯收费。具体详见官网

--分析存储费用
SELECT  t.ds
        ,t.projectid
        ,t.storage
        ,CASE    WHEN t.storage < 0.5 THEN 0.01
                 WHEN t.storage >= 0.5 AND t.storage <= 100 THEN t.storage*0.0192
                 WHEN t.storage > 100 AND t.storage <= 1024 THEN (100*0.0192+(t.storage-100)*0.0096)
                 WHEN t.storage > 1024 AND t.storage <= 10240 THEN (100*0.0192+(1024-100)*0.0096+(t.storage-1024)*0.0084)
                 WHEN t.storage > 10240 AND t.storage <= 102400 THEN (100*0.0192+(1024-100)*0.0096+(10240-1024)*0.0084+(t.storage-10240)*0.0072)
                 WHEN t.storage > 102400 AND t.storage <= 1048576 THEN (100*0.0192+(1024-100)*0.0096+(10240-1024)*0.0084+(102400-10240)*0.0072+(t.storage-102400)*0.006) 
         END storage_fee
FROM    (
            SELECT  to_char(starttime,'yyyymmdd') as ds
                    ,projectid
                    ,SUM(storage/1024/1024/1024)/24 AS storage
            FROM    maxcomputefee
            WHERE   TYPE = 'Storage'
            and to_char(starttime,'yyyymmdd') >= '20190112'
            GROUP BY to_char(starttime,'yyyymmdd')
                     ,projectid
        ) t
ORDER BY storage_fee DESC
;
AI 代码解读

--执行结果--

image

根据计算结果可以分析得出结论:

  1. 存储在13日为最高有一个增长的过程,但是在14日是有降低。
  2. 存储优化,建议表设置生命周期,删除长期不使用的临时表等。

4、分析下载费用

对于公网或者跨Region的数据下载,MaxCompute将按照下载的数据大小进行计费。计费公式为:一次下载费用=下载数据量*0.8元/GB。

--分析下载消费明细
SELECT  TO_CHAR(starttime,'yyyymmdd') AS ds
        ,projectid
        ,SUM((download/1024/1024/1024)*0.8) AS download_fee
FROM    maxcomputefee
WHERE   type = 'DownloadEx'
AND     TO_CHAR(starttime,'yyyymmdd') >= '20190112'
GROUP BY TO_CHAR(starttime,'yyyymmdd')
         ,projectid
ORDER BY download_fee DESC
;
AI 代码解读

按照执行结果也可以分析出某个时间段内的下载费用走势。另外可以通过tunnel show history查看具体历史信息,具体命令详见官方文档

image

以下几种计算作业与SQL类似,按照官方计费文档编写SQL即可。

5、分析MapReduce作业消费

MR任务当日计算费用=当日总计算时*0.46元

--分析MR作业消费
SELECT  TO_CHAR(starttime,'yyyymmdd') AS ds
        ,projectid
        ,(cu_usage/3600)*0.46 AS mr_fee
FROM    maxcomputefee
WHERE   type = 'MapReduce'
AND     TO_CHAR(starttime,'yyyymmdd') >= '20190112'
GROUP BY TO_CHAR(starttime,'yyyymmdd')
         ,projectid
         ,cu_usage
ORDER BY mr_fee DESC
;
AI 代码解读

6、分析外部表作业(OTS和OSS)

SQL外部表功能计费规则:一次SQL计算费用=计算输入数据量×SQL复杂度×0.03元/GB

--分析OTS外部表SQL作业消费
SELECT  TO_CHAR(starttime,'yyyymmdd') AS ds
        ,projectid
        ,(input_ots/1024/1024/1024)*1*0.03 AS ots_fee
FROM    maxcomputefee
WHERE   type = 'ComputationSql'
AND     TO_CHAR(starttime,'yyyymmdd') >= '20190112'
GROUP BY TO_CHAR(starttime,'yyyymmdd')
         ,projectid
         ,input_ots
ORDER BY ots_fee DESC
;

--分析OSS外部表SQL作业消费
SELECT  TO_CHAR(starttime,'yyyymmdd') AS ds
        ,projectid
        ,(input_oss/1024/1024/1024)*1*0.03 AS ots_fee
FROM    maxcomputefee
WHERE   type = 'ComputationSql'
AND     TO_CHAR(starttime,'yyyymmdd') >= '20190112'
GROUP BY TO_CHAR(starttime,'yyyymmdd')
         ,projectid
         ,input_oss
ORDER BY ots_fee DESC
;
AI 代码解读

7、分析Lightning查询费用

一次Lightning查询费用 = 查询输入数据量 * 单价(0.03元/GB)

SELECT  to_char(endtime,'yyyymmdd') as ds,feeid as instanceid
        ,projectid
        ,computationsqlcomplexity
        ,SUM((computationsqlinput / 1024 / 1024 / 1024)) as computationsqlinput
        ,SUM((computationsqlinput / 1024 / 1024 / 1024)) * computationsqlcomplexity * 0.03 AS sqlmoney
FROM    maxcomputefee
WHERE   TYPE = 'LightningQuery'
--AND to_char(endtime,'yyyymmdd') >= '20190112'
GROUP BY to_char(endtime,'yyyymmdd'),feeid
         ,projectid
         ,computationsqlcomplexity
ORDER BY sqlmoney DESC 
LIMIT   10000
;
AI 代码解读

8、分析Spark计算费用

Spark任务当日计算费用 = 当日总计算时 * 0.66元(人民币)

--分析MR作业消费
SELECT  TO_CHAR(starttime,'yyyymmdd') AS ds
        ,projectid
        ,(cu_usage/3600)*0.66 AS mr_fee
FROM    maxcomputefee
WHERE   type = 'spark'
AND     TO_CHAR(starttime,'yyyymmdd') >= '20190112'
GROUP BY TO_CHAR(starttime,'yyyymmdd')
         ,projectid
         ,cu_usage
ORDER BY mr_fee DESC
;
AI 代码解读

总结

MaxCompute产品消费的增长(暴涨)往往背后都是由于作业量的大幅度提升,要优化自己的费用成本,首选要知道自己SQL等作业中存在什么问题,要优化具体哪一个SQL。本文期望能够给予大家一些帮助。更多关于费用成本优化的文章可以详见,云栖社区《帮助企业做好MaxCompute大数据平台成本优化的最佳实践》和《众安保险如果优化自己的MaxCompute费用成本实践》。

image

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
一站式大数据开发治理平台DataWorks初级课程
DataWorks 从 2009 年开始,十ー年里一直支持阿里巴巴集团内部数据中台的建设,2019 年双 11 稳定支撑每日千万级的任务调度。每天阿里巴巴内部有数万名数据和算法工程师正在使用DataWorks,承了阿里巴巴 99%的据业务构建。本课程主要介绍了阿里巴巴大数据技术发展历程与 DataWorks 几大模块的基本能力。 课程目标 &nbsp;通过讲师的详细讲解与实际演示,学员可以一边学习一边进行实际操作,可以深入了解DataWorks各大模块的使用方式和具体功能,让学员对DataWorks数据集成、开发、分析、运维、安全、治理等方面有深刻的了解,加深对阿里云大数据产品体系的理解与认识。 适合人群 &nbsp;企业数据仓库开发人员 &nbsp;大数据平台开发人员 &nbsp;数据分析师 &nbsp;大数据运维人员 &nbsp;对于大数据平台、数据中台产品感兴趣的开发者
祎休
+关注
目录
打赏
0
0
0
0
79072
分享
相关文章
机器学习与大数据分析的结合:智能决策的新引擎
机器学习与大数据分析的结合:智能决策的新引擎
141 15
DataWorks产品测评|基于DataWorks和MaxCompute产品组合实现用户画像分析
本文介绍了如何使用DataWorks和MaxCompute产品组合实现用户画像分析。首先,通过阿里云官网开通DataWorks服务并创建资源组,接着创建MaxCompute项目和数据源。随后,利用DataWorks的数据集成和数据开发模块,将业务数据同步至MaxCompute,并通过ODPS SQL完成用户画像的数据加工,最终将结果写入`ads_user_info_1d`表。文章详细记录了每一步的操作过程,包括任务开发、运行、运维操作和资源释放,帮助读者顺利完成用户画像分析。此外,还指出了文档中的一些不一致之处,并提供了相应的解决方法。
用户画像分析(MaxCompute简化版)
通过本教程,您可以了解如何使用DataWorks和MaxCompute产品组合进行数仓开发与分析,并通过案例体验DataWorks数据集成、数据开发和运维中心模块的相关能力。
在大数据时代,高维数据处理成为难题,主成分分析(PCA)作为一种有效的数据降维技术,通过线性变换将数据投影到新的坐标系
在大数据时代,高维数据处理成为难题,主成分分析(PCA)作为一种有效的数据降维技术,通过线性变换将数据投影到新的坐标系,保留最大方差信息,实现数据压缩、去噪及可视化。本文详解PCA原理、步骤及其Python实现,探讨其在图像压缩、特征提取等领域的应用,并指出使用时的注意事项,旨在帮助读者掌握这一强大工具。
128 4
PolarDB 以其出色的性能和可扩展性,成为大数据分析的重要工具
在数字化时代,企业面对海量数据的挑战,PolarDB 以其出色的性能和可扩展性,成为大数据分析的重要工具。它不仅支持高速数据读写,还通过数据分区、索引优化等策略提升分析效率,适用于电商、金融等多个行业,助力企业精准决策。
46 4
【大数据分析&机器学习】分布式机器学习
本文主要介绍分布式机器学习基础知识,并介绍主流的分布式机器学习框架,结合实例介绍一些机器学习算法。
319 5
【Clikhouse 探秘】ClickHouse 物化视图:加速大数据分析的新利器
ClickHouse 的物化视图是一种特殊表,通过预先计算并存储查询结果,显著提高查询性能,减少资源消耗,适用于实时报表、日志分析、用户行为分析、金融数据分析和物联网数据分析等场景。物化视图的创建、数据插入、更新和一致性保证通过事务机制实现。
295 14
数据为王:大数据处理与分析技术在企业决策中的力量
【10月更文挑战第29天】在信息爆炸的时代,大数据处理与分析技术为企业提供了前所未有的洞察力和决策支持。本文探讨了大数据技术在企业决策中的重要性和实际应用,包括数据的力量、实时分析、数据驱动的决策以及数据安全与隐私保护。通过这些技术,企业能够从海量数据中提取有价值的信息,预测市场趋势,优化业务流程,从而在竞争中占据优势。
190 2
大数据与社交媒体:用户行为分析
【10月更文挑战第31天】在数字化时代,社交媒体成为人们生活的重要部分,大数据技术的发展使其用户行为分析成为企业理解用户需求、优化产品设计和提升用户体验的关键手段。本文探讨了大数据在社交媒体用户行为分析中的应用,包括用户画像构建、情感分析、行为路径分析和社交网络分析,以及面临的挑战与机遇。

相关产品

  • 云原生大数据计算服务 MaxCompute
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等