MaxCompute料金の配分を知り、MaxComputeの使用時に料金が予想を超えないようにしたい場合は、MaxComputeの請求書を取得して分析し、リソース使用率を最大化し、コストを削減できます。 このトピックでは、請求書の使用記録に基づいてMaxCompute料金の分布を分析する方法について説明します。
背景情報
MaxComputeはビッグデータ分析プラットフォームです。 MaxComputeのコンピューティングリソースには、サブスクリプションと従量課金の課金方法を使用できます。 MaxComputeプロジェクトに基づいて毎日請求され、翌日の06:00までに毎日請求書が生成されます。 MaxComputeの課金対象項目と課金方法の詳細については、「概要」をご参照ください。
Alibaba Cloudは、データ開発中またはMaxComputeのバージョンリリース前に、MaxComputeの請求額の変動 (ほとんどの場合、料金の増加) に関する情報を提供します。 請求額の変動を分析し、分析結果に基づいてMaxComputeプロジェクトのジョブのパフォーマンスを向上させることができます。 Alibaba Cloud管理コンソールの [課金管理] ページで、すべての商用サービスの使用記録をダウンロードできます。 請求書の取得とダウンロードの方法の詳細については、「請求書の詳細の表示」をご参照ください。
ステップ1: 請求書の使用記録をダウンロードする
節約プランがどのように適用されるか (割引額、プランの詳細、使用状況、対象範囲を含む) に関する詳細を表示するには、 使用状況記録
ページでは、毎日のリソース使用状況記録をダウンロードして表示し、料金の発生状況を確認します。 たとえば、毎日のストレージとコンピューティングの料金を確認し、どのジョブから料金が発生するかを判断できます。

次のパラメーターを設定します。
Product: 使用状況レコードをダウンロードするサービス。 このパラメーターをMaxCompute(Postpay) に設定します。
请求可能なアイテム:
MaxCompute(Postpay): 従量課金の課金方法。
ODPSDataPlus: サブスクリプションの課金方法。
期間: データをクエリする時間範囲。 表示する請求書の開始時刻と終了時刻を指定できます。
12月1日にジョブを開始し、12月2日にジョブが完了した場合、時間範囲の開始時刻を12月1日に設定する必要があります。 そうしないと、ダウンロードした使用状況レコードにジョブのリソース使用状況が見つかりません。 ジョブのリソース消費レコードは、12月2日に生成された請求書に表示されます。
[CSV 形式でエクスポート] をクリックします。 しばらくすると、に行くことができます [レコードのエクスポート]
ページで使用状況レコードをダウンロードします。
ステップ2 (オプション): 使用記録をMaxComputeにアップロードする
MaxCompute SQLを使用して請求書の使用記録を分析する場合は、この手順を実行して請求書の使用記録をMaxComputeにアップロードします。 Excelを使用して請求書の使用記録のみを分析する場合は、この手順をスキップしてください。
MaxComputeクライアント (odpscmd) に
maxcomputefeeという名前のMaxComputeテーブルを作成します。 サンプル文:CREATE TABLE IF NOT EXISTS maxcomputefee ( projectid STRING COMMENT 'ProjectId' ,feeid STRING COMMENT 'MeteringId' ,meteringtime STRING COMMENT 'MeteringTime' ,type STRING COMMENT 'MeteringType, such as Storage, ComputationSQL, or DownloadEx' ,starttime STRING COMMENT 'StartTime' ,storage BIGINT COMMENT 'Storage' ,endtime STRING COMMENT 'EndTime' ,computationsqlinput BIGINT COMMENT 'SQLInput(Byte)' ,computationsqlcomplexity DOUBLE COMMENT 'SQLComplexity' ,uploadex BIGINT COMMENT 'UploadEx' ,download BIGINT COMMENT 'DownloadEx(Byte)' ,cu_usage DOUBLE COMMENT 'MRCompute(Core*Second)' ,Region STRING COMMENT 'Region' ,input_ots BIGINT COMMENT 'InputOTS(Byte)' ,input_oss BIGINT COMMENT 'InputOSS(Byte)' ,source_id STRING COMMENT 'DataWorksNodeID' ,source_type STRING COMMENT 'SpecificationType' ,RecycleBinStorage BIGINT COMMENT 'RecycleBinStorage' ,JobOwner STRING COMMENT 'JobOwner' ,Signature STRING COMMENT 'Signature' );使用状況レコードのフィールド:
ProjectId: Alibaba CloudアカウントのMaxComputeプロジェクトまたは現在のRAMユーザーが属するAlibaba CloudアカウントのMaxComputeプロジェクトのIDまたは名前。
MeteringId: 課金ID。 課金IDは、ストレージタスク、SQLコンピューティングタスク、アップロードタスク、またはダウンロードタスクのIDを示します。 SQLコンピューティングタスクのIDはInstanceIDで指定され、アップロードタスクまたはダウンロードタスクのIDはTunnel SessionIdで指定されます。
MeteringType: 課金タイプ。 有効な値: Storage、ComputationSql、UploadIn、UploadEx、DownloadIn、およびDownloadEx。 赤で表示されている項目のみが、課金ルールに基づいて課金されます。
ストレージ: 1時間あたりに読み取られるデータの量。 単位はバイトです。
StartTimeまたはEndTime: ジョブの実行が開始された時刻またはジョブが停止した時刻。 ストレージデータのみが1時間ごとに取得されます。
SQLInput(Byte): SQL計算項目。 このフィールドは、SQL文が実行されるたびに入力データの量を指定します。 単位はバイトです。
SQLComplexity: SQL文の複雑さ。 このフィールドは、SQL課金要因の1つです。
UploadExまたはDownloadEx(Byte): インターネット経由でアップロードまたはダウンロードされるデータの量。 単位はバイトです。
MRCompute(Core * Second): MapReduceジョブまたはSparkジョブの課金可能時間。 この値は、次の式を使用して計算されます。
コア数 × ジョブの実行時間 (秒)。 計算後、結果を請求可能時間に変換する必要があります。InputOTS(Byte) またはInputOSS(Byte): Tablestore外部テーブルまたはOSS外部テーブルを使用してTablestoreまたはObject Storage Service (OSS) から読み取られるデータの量。 単位はバイトです。 これらのフィールドは、Tablestore外部テーブルまたはOSS外部テーブルの料金が発生するときに使用されます。
RecycleBinStorage: 1時間あたりにバックアップ用に読み取られるデータの量。 単位はバイトです。
リージョン: MaxComputeプロジェクトが存在するリージョンです。
JobOwner: ジョブを送信するユーザー。
Signature: SQLジョブの署名。 同じ内容を持ち、複数回繰り返し実行またはスケジュールされるSQLジョブのシグネチャは同じです。
次のTunnelコマンドを実行して、請求書の使用記録をアップロードします。
請求書の使用記録を含むCSVファイルをMaxComputeにアップロードする前に、CSVファイルの列の数とデータ型が、maxcomputefeeテーブルの列の数とデータ型と同じであることを確認してください。 上記の条件が満たされない場合、データのアップロードは失敗します。
tunnel upload ODPS_2019-01-12_2019-01-14.csv maxcomputefee -c "UTF-8" -h "true" -dfp "yyyy-MM-dd HH:mm:ss";
説明Tunnelコマンドの設定の詳細については、「Tunnelコマンド」をご参照ください。
DataWorksのデータインポート機能を使用して、請求書の使用記録をアップロードすることもできます。 詳細については、「DataWorksの使用 (オフラインおよびリアルタイム) 」をご参照ください。
次のステートメントを実行して、すべての使用状況レコードがアップロードされているかどうかを確認します。
SELECT * FROM maxcomputefee limit 10;
ステップ3: 請求書の使用記録を分析する
SQLジョブの料金を分析する
MaxCompute SQLジョブは、95% のクラウドユーザーのビジネス要件を満たしています。 MaxCompute SQLジョブの料金も、MaxComputeの請求額の大部分を占めています。
SQLジョブの計算料金=入力データ量 × SQLの複雑さ × GBあたりの料金 (USD 0.0438)
Excelを使用して使用レコードを分析する: usage recordsのMeteringTypeがComputationSqlであるレコードを分析します。 SQLジョブの料金を並べ替え、特定のSQLジョブの料金が予想よりも高いかどうか、または多数のSQLジョブが存在するかどうかを確認します。 SQLジョブの料金は、次の式を使用して計算できます。
SQLジョブの料金=SQLInput(Byte)/1024/1024/1024 × SQLの複雑さ × SQLジョブの単価。MaxCompute SQLを使用して使用レコードを分析する: MaxCompute SQLを使用して使用レコードを分析する前に、手順2で説明したデータアップロードが完了し、maxcomputefeeテーブルが生成されていることを確認してください。
-- Sort SQL jobs based on sqlmoney to analyze the fees of SQL jobs. SELECT to_char(endtime,'yyyymmdd') as ds,feeid as instanceid ,projectid ,computationsqlcomplexity -- SQL complexity ,SUM((computationsqlinput / 1024 / 1024 / 1024)) as computationsqlinput -- Amount of input data (GB) ,SUM((computationsqlinput / 1024 / 1024 / 1024)) * computationsqlcomplexity * 0.0438 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 ;実行結果から次の結論を引き出すことができます。
大規模なジョブの料金を削減するために、読み取りたいデータの量とSQLの複雑さを減らすことができます。
dsフィールドに基づいて毎日処理されるデータの量を要約し、特定の期間におけるSQLジョブの料金の傾向を分析できます。 たとえば、ExcelファイルやQuick BIなどのツールを使用して折れ線グラフを作成し、トレンドを表示できます。分析結果に基づいて最適化するノードを特定するには、次の手順を実行します。
instanceidで指定されたインスタンスの実行ログのLogView URLを取得します。
MaxComputeクライアント (odpscmd) またはDataWorksコンソールで
wait <instanceid>;コマンドを実行し、instanceidで指定されたインスタンスの実行ログを表示します。
次のコマンドを実行して、ジョブの詳細を表示します。
DESC instance 2016070102275442go3xxxxxx;次の応答が返されます。
ID 2016070102275442go3xxxxxx Owner ALIYUN$***@aliyun-inner.com StartTime 2016-07-01 10:27:54 EndTime 2016-07-01 10:28:16 Status Terminated console_query_task_1467340078684 Success Query select count(*) from src where ds='20160628';webブラウザでLogView URLを入力し、Enterキーを押します。 LogViewで、[SourceXML] タブをクリックして、SKYNET_NODENAMEパラメーターの値を表示します。
説明LogViewを使用してジョブに関する情報を表示する方法の詳細については、「LogView V2.0を使用してジョブ情報を表示する」をご参照ください。
SKYNET_NODENAMEパラメーターの値を取得できない場合、またはSKYNET_NODENAMEパラメーターが空の場合は、[SQLスクリプト] タブをクリックしてコードスニペットを取得できます。 次に、コードスニペットに基づいてDataWorksコンソールで最適化するノードを見つけ、ノードを最適化します。 詳細については、「DataWorksコード検索」をご参照ください。
DataWorksコンソールで、SKYNET_NODENAMEパラメーターの値に基づいてノードを検索し、ノードを最適化します。
仕事の数の傾向を分析する
多くの場合、操作の繰り返しやスケジューリング属性の無効設定により、ジョブ数が急増すると料金が増加します。
Excelを使用して使用レコードを分析する: usage recordsのMeteringTypeがComputationSqlであるレコードを分析します。 プロジェクトごとに1日あたりのジョブ数を収集し、特定のプロジェクトのジョブ数が大きく変動するかどうかを確認します。
MaxCompute SQLを使用して使用レコードを分析する: MaxCompute SQLを使用して使用レコードを分析する前に、手順2で説明したデータアップロードが完了し、maxcomputefeeテーブルが生成されていることを確認してください。
-- Analyze the trend of the number of jobs. 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 ;実行結果を次の図に示します。
実行結果は、MaxComputeに送信され、2019年1月12日から2019年1月14日までに正常に実行されたジョブの数の傾向を示します。
ストレージ料金の分析
Excelを使用して、ストレージ用にCNY 0.01を充電する理由を分析します
この問題は、MaxComputeに保存されている既存のデータで、データ量が0.5 GBを超えないことが原因です。
MeteringTypeがStorageのレコードを表示します。
maxcompute_docプロジェクトには508バイトのデータが格納されます。 詳細は以下の図をご参照ください。 に基づいてサイズが512 MB以下のデータに対してCNY 0.01が請求されますストレージ課金ルール
データがテストにのみ使用される場合は、次の操作を実行して問題を解決できます。 テーブルデータのみが使用されなくなった場合は、
Drop tableステートメントを実行して、プロジェクト内のテーブルデータを削除します。プロジェクトが使用されなくなった場合は、MaxComputeコンソールにログインし、[プロジェクト] ページでプロジェクトを削除します。
.
Excelを使用して、
1日以内に保存されたデータの保存料を分析するMeteringTypeがStorageのレコードを表示します。 alianプロジェクトでは、合計333,507,833,900バイトのデータが保存されます。 データは08:00にアップロードされます。 したがって、ストレージは09:07から課金され、15時間のストレージに対して課金されます。
説明課金サイクルが1日の場合、課金は1日の終わりに停止します。 その結果、最後のレコードはその日の請求書に含まれません。
24時間以内の平均貯蔵は基づいて計算されます
ストレージ課金ルール 次に、課金式を使用して平均ストレージ料金が計算されます。
-- Calculate the average storage. 333507833900 Byte×15/1024/1024/1024/24=194.127109076362103 GB The storage fee per day is calculated by using the following formula. Four decimal places are retained in the result. 194.127109076362103 GB × USD 0.0006 per GB per day = USD 0.1165 per day
MaxCompute SQLを使用して使用レコードを分析する: MaxCompute SQLを使用して使用レコードを分析する前に、手順2で説明したデータアップロードが完了し、maxcomputefeeテーブルが生成されていることを確認してください。
-- Analyze storage fees. SELECT t.ds ,t.projectid ,t.storage ,CASE WHEN t.storage < 0.5 THEN t.storage*0.01 --- If the actually used storage space of a project is greater than 0 MB and less than or equal to 512 MB, the unit price for the storage space is CNY 0.01 per GB per day. WHEN t.storage >= 0.5 THEN t.storage*0.004 --- If the actually used storage space of a project is greater than 512 MB, the unit price for the storage space is CNY 0.004 per GB per day. 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 ;実行結果を次の図に示します。
実行結果から次の結論を引き出すことができます。保管料は2019年1月12日に増加し、2019年1月14日に減少しました。
ストレージ料金を削減するために、テーブルのライフサイクルを指定し、不要な一時テーブルを削除することを推奨します。
MaxCompute SQLを使用して、長期ストレージ、低頻度アクセス (IA) ストレージ、長期ストレージアクセス、および低頻度ストレージアクセスを分析する: MaxCompute SQLを使用して使用記録を分析する前に、手順2で説明したデータのアップロードが完了し、maxcomputefeeテーブルが生成されていることを確認します。
-- Analyze long-term storage fees. SELECT to_char(starttime,'yyyymmdd') as ds ,projectid ,SUM(storage/1024/1024/1024)/24*0.0011 AS longTerm_storage FROM maxcomputefee WHERE TYPE = 'ColdStorage' and to_char(starttime,'yyyymmdd') >= '20190112' GROUP BY to_char(starttime,'yyyymmdd') ,projectid; -- Analyze the IA storage fees. SELECT to_char(starttime,'yyyymmdd') as ds ,projectid ,SUM(storage/1024/1024/1024)/24*0.0011 AS lowFre_storage FROM maxcomputefee WHERE TYPE = 'LowFreqStorage' and to_char(starttime,'yyyymmdd') >= '20190112' GROUP BY to_char(starttime,'yyyymmdd') ,projectid; -- Analyze long-term storage access fees. SELECT to_char(starttime,'yyyymmdd') as ds ,projectid ,SUM(computationsqlinput/1024/1024/1024)*0.522 AS longTerm_IO FROM maxcomputefee WHERE TYPE = 'SqlLongterm' and to_char(starttime,'yyyymmdd') >= '20190112' GROUP BY to_char(starttime,'yyyymmdd') ,projectid; -- Analyze IA storage access fees. SELECT to_char(starttime,'yyyymmdd') as ds ,projectid ,SUM(computationsqlinput/1024/1024/1024)*0.522 AS lowFre_IO FROM maxcomputefee WHERE TYPE = 'SqlLowFrequency' and to_char(starttime,'yyyymmdd') >= '20190112' GROUP BY to_char(starttime,'yyyymmdd') ,projectid;
ダウンロード料金の分析
MaxComputeプロジェクトでのインターネットベースのデータダウンロードまたはクロスリージョンデータのダウンロードの場合、ダウンロードしたデータの量に基づいて課金されます。
ダウンロードジョブの料金=ダウンロードしたデータの量 × GBあたりの料金 (USD 0.1166)
Excelを使用して使用状況レコードを分析する: MeteringTypeがDownloadExであるレコードを分析します。
たとえば、0.036 GB (38,199,736バイト) のダウンロードトラフィックのレコードがあります。 この場合、ダウンロード料金は、ダウンロード料金 (従量課金) に記載されている課金ルールに基づいて、
(38,199,736バイト /1024/1024/1024) × USD 0.1166 /GB = USD 0.004の式を使用して計算されます。データのダウンロードを最適化します。 トンネルに設定されたサービスがインターネットアクセスのために請求されているかどうかを確認することもできます。 詳細については、「エンドポイント」をご参照ください。 たとえば、中国 (上海) リージョンに属する中国蘇州にあり、大量のデータをダウンロードしたいとします。 この場合、中国 (上海) リージョンのElastic Compute Service (ECS) インスタンスを使用して、仮想マシン (VM) にデータをダウンロードできます。 その後、サブスクリプションECSインスタンスを使用してデータをダウンロードできます。
MaxCompute SQLを使用して使用レコードを分析する: MaxCompute SQLを使用して使用レコードを分析する前に、手順2で説明したデータのインポートが完了し、maxcomputefeeテーブルが生成されていることを確認してください。
-- Analyze download fees. SELECT TO_CHAR(starttime,'yyyymmdd') AS ds ,projectid ,SUM((download/1024/1024/1024)*0.1166) 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 ;
MapReduceジョブの料金を分析する
1日のMapReduceジョブの計算料金=1日の合計請求可能時間 × タスクあたりの1時間あたりの料金 (USD 0.0690)
Excelを使用して使用レコードを分析する: usage records内のMeteringTypeがMapReduceであるレコードを分析します。 SpecificationTypeで指定された値に基づいて、MapReduceジョブの料金を計算して並べ替えます。 MapReduceジョブまたはSparkジョブの料金は、次の式を使用して計算されます。
コア数 × ジョブの実行期間 (秒)/3600 × 単価 (USD 0.0690).MaxCompute SQLを使用して使用レコードを分析する: MaxCompute SQLを使用して使用レコードを分析する前に、手順2で説明したデータアップロードが完了し、maxcomputefeeテーブルが生成されていることを確認してください。
-- Analyze the fees of MapReduce jobs. SELECT TO_CHAR(starttime,'yyyymmdd') AS ds ,projectid ,(cu_usage/3600)*0.0690 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 ;
Tablestore外部テーブルまたはOSS外部テーブルを使用するジョブの料金を分析する
Tablestore外部テーブルまたはOSS外部テーブルを使用するSQLジョブのコンピューティング料金=入力データ量 × GBあたりの料金 (USD 0.0044)
Excelを使用して使用レコードを分析する: 使用レコードのMeteringTypeがComputationSq10TSまたはComputationSq10SSであるレコードを分析します。 Tablestore外部テーブルまたはOSS外部テーブルを使用するSQLジョブのコンピューティング料金を並べ替えます。 コンピューティング料金は、次の式を使用して計算されます。
SQLInput (バイト)/1024/1024/1024 × 単価 (USD 0.0044)MaxCompute SQLを使用して使用レコードを分析する: MaxCompute SQLを使用して使用レコードを分析する前に、手順2で説明したデータアップロードが完了し、maxcomputefeeテーブルが生成されていることを確認してください。
-- Analyze the fees of SQL jobs that use Tablestore external tables. SELECT TO_CHAR(starttime,'yyyymmdd') AS ds ,projectid ,(computationsqlinput/1024/1024/1024)*1*0.03 AS ots_fee FROM maxcomputefee WHERE type = 'ComputationSqlOTS' AND TO_CHAR(starttime,'yyyymmdd') >= '20190112' GROUP BY TO_CHAR(starttime,'yyyymmdd') ,projectid ,computationsqlinput ORDER BY ots_fee DESC ; -- Analyze the fees of SQL jobs that use OSS external tables. SELECT TO_CHAR(starttime,'yyyymmdd') AS ds ,projectid ,(computationsqlinput/1024/1024/1024)*1*0.03 AS oss_fee FROM maxcomputefee WHERE type = 'ComputationSqlOSS' AND TO_CHAR(starttime,'yyyymmdd') >= '20190112' GROUP BY TO_CHAR(starttime,'yyyymmdd') ,projectid ,computationsqlinput ORDER BY oss_fee DESC ;
Sparkジョブのコンピューティング料金を分析する
1日のSparkジョブの計算料金=1日の合計請求可能時間 × タスクあたりの1時間あたりの料金 (USD 0.1041)
Excelを使用して使用状況レコードを分析する: 使用状況レコードのMeteringTypeがsparkであるレコードを分析します。 Sparkジョブのコンピューティング料金を並べ替えます。
Sparkジョブのコンピューティング料金は、次の式を使用して計算されます。
コア数 × ジョブの実行期間 (秒)/3600 × 単価 (USD 0.1041)。MaxCompute SQLを使用して使用レコードを分析する: MaxCompute SQLを使用して使用レコードを分析する前に、手順2で説明したデータアップロードが完了し、maxcomputefeeテーブルが生成されていることを確認してください。
-- Analyze the fees of Spark jobs. SELECT TO_CHAR(starttime,'yyyymmdd') AS ds ,projectid ,(cu_usage/3600)*0.1041 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 ;
関連ドキュメント
TO_CHARは、日付関数または文字列関数です。 TO_CHAR関数の詳細については、「TO_CHAR」をご参照ください。