21分鐘教會你分析MaxCompute帳單

背景

阿里雲大計算服務MaxCompute是一款商業化的大數據分析平臺,其計算資源有預付費和後付費兩種計費方式。而且產品天天按照project爲維度進行計量計費(帳單基本狀況下會次日6點前產出)。本文使用的爲雲上客戶真實數據,故在下文中的截圖都mask掉了。html

關於MaxCompute計量計費說明,詳見官方文檔sql

image

可是一般狀況下,咱們在數據開發階段或者在上線前夕會發下帳單有波動(一般狀況下爲增大), 其實用戶首先能夠經過自助的方式來分析帳單波動狀況,再倒逼本身的做業進行優化。阿里雲費用中心就是一個很好的通道,阿里雲全部商業化收費的產品均可以在其中下載費用明細。瀏覽器

獲取帳單信息

一般您須要使用主帳號查看帳單詳情。若是您須要使用子帳號查看帳單信息,請首先參考費用中心RAM配置策略行子帳號受權。微信

step1:使用主帳號或者被受權的RAM子帳號來登陸阿里雲管控臺
step2:右上角進入費用中心。session

image

step3:在費用中心-消費記錄-消費明細中,選擇產品和帳單日期。
image工具

包年包月中的 後付費是指項目開通包年包月計算計費模式後,還產生的存儲、下載對應的費用(存儲、下載費用只有後付費)。大數據



step4:爲了方便批量分析數據,咱們選擇下載使用記錄csv文件在本地分析。

image優化

下載csv文件以下,能夠在本地打開進行分析。

imageui

--csv的表頭
項目編號,計量信息編號,數據分類,存儲(Byte),SQL 讀取量(Byte),SQL 複雜度(Byte),公網上行流量(Byte),公網下行流量(Byte),MR 做業計算,開始時間,結束時間,SQL讀取量_訪問OTS(Byte),SQL讀取量_訪問OSS(Byte)

上傳帳單明細至MaxCompute

使用記錄明細字段解釋:阿里雲

  • 項目編號:當前帳號下或子帳號對應的主帳號的MaxCompute project列表。
  • 計量信息編號:其中會包含存儲、計算、上傳和下載的計費信息編號,SQL爲instanceid,上傳和下載爲Tunnel sessionid。
  • 數據分類:Storage(存儲)、ComputationSql(計算)、UploadIn(內網上傳)、UploadEx(外網上傳)、DownloadIn(內網下載)、DownloadEx(外網下載)。按照計費規則其中只有紅色爲實際計費項目。
  • 開始時間/結束時間:按照實際做業執行時間進行計量,只有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。

① 確認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等'
    ,starttime DATETIME COMMENT '開始時間'
    ,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的數據輸入量'
)
;

④ 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分析帳單數據

一、分析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
;

--查詢結果--
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

二、分析做業增加趨勢

通常狀況下費用的增加背後實際上是做業量的暴漲,多是重複執行,也多是調度屬性配置的不是很合理。

--分析做業增加趨勢
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
;

--執行結果--

image

從執行結果能夠看出來12-14日提交到MaxCompute且執行成功的做業數的波動趨勢。

三、分析存儲費用

存儲費用的計費規則相對來講比較複雜,由於下載到的明細是每一個小時取一次數據。按照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
;

--執行結果--

image

根據計算結果能夠分析得出結論:

  1. 存儲在13日爲最高有一個增加的過程,可是在14日是有下降。
  2. 存儲優化,建議表設置生命週期,刪除長期不使用的臨時表等。

四、分析下載費用

對於公網或者跨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
;

按照執行結果也能夠分析出某個時間段內的下載費用走勢。另外能夠經過tunnel show history查看具體歷史信息,具體命令詳見官方文檔

image

如下幾種計算做業與SQL相似,按照官方計費文檔編寫SQL便可。

五、分析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
;

六、分析外部表做業(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
;

總結

MaxCompute產品消費的增加(暴漲)每每背後都是因爲做業量的大幅度提高,要優化本身的費用成本,首選要知道本身SQL等做業中存在什麼問題,要優化具體哪個SQL。本文指望可以給予你們一些幫助。更多關於費用成本優化的文章能夠詳見,雲棲社區《幫助企業作好MaxCompute大數據平臺成本優化的最佳實踐》和《衆安保險若是優化本身的MaxCompute費用成本實踐》。

 

原文連接 更多技術乾貨 請關注阿里云云棲社區微信號 :yunqiinsight

相關文章
相關標籤/搜索