このトピックでは、Hologres 共有クラスター (Lakehouse Acceleration) インスタンスの課金について説明します。
課金モデル
Hologres 共有クラスター (Lakehouse Acceleration) は、サーバーレスアプローチを使用して、MaxCompute データウェアハウスおよび OSS データレイク内のデータに対するクエリを高速化します。また、データレイクとデータウェアハウスにまたがる統合分析もサポートしています。このサービスは、元の共有クラスター (MaxCompute BI Acceleration) と同じ課金方法を使用します。Hologres では、各 SQL クエリジョブのスキャンデータ量に基づいて課金されます。
クエリジョブのコストを計算する数式は次のとおりです。
クエリジョブあたりのコスト = スキャンされた入力データ量 × 単価Hologres 共有クラスター (Lakehouse Acceleration) は、専用のコンピューティングリソースを使用します。
Hologres 共有クラスター (Lakehouse Acceleration) は、各クエリジョブでスキャンされたデータ量に基づいて課金されます。各クエリは最低 10 MB で課金されます。クエリの起動オーバーヘッドがあるため、10 MB 未満のデータをスキャンするジョブも、最低料金である 10 MB 分が課金されます。
請求書は 1 時間ごとに生成されます。各請求書には、その 2 時間前までの課金データが含まれます。
クエリを実行しない場合、料金は発生しません。
パーティションテーブルをクエリする際は、パーティションフィルター条件を適用してスキャンデータ量を削減し、クエリパフォーマンスを向上させてください。
クエリするフィールドを減らし、フィルター条件を追加することで、スキャンデータ量を削減し、クエリコストを低減できます。
MaxCompute テーブルを Hash Clustering テーブルに変換して、バケットプルーニング、集約、ストレージを最適化します。詳細については、「Hash Clustering」をご参照ください。
料金
2023年3月8日より、共有クラスター (Lakehouse Acceleration) インスタンスでのすべてのクエリに 50% の割引が適用されます。このキャンペーンは 2025年4月1日に終了します。
次の表に料金情報を示します。
課金方法 | リージョン | 通常価格 | キャンペーン価格 | 単位 |
SQL クエリごとのスキャンデータ量に応じた従量課金 | 中国 (北京) | 0.066705 | 0.0333525 | USD/GB |
中国 (上海) | 0.066705 | 0.0333525 | USD/GB | |
中国 (杭州) | 0.066705 | 0.0333525 | USD/GB | |
中国 (深セン) | 0.066705 | 0.0333525 | USD/GB | |
シンガポール | 0.084049 | 0.0420245 | USD/GB |
ライフサイクル管理
Hologres 共有クラスター (Lakehouse Acceleration) は、SQL クエリによってスキャンされたデータ量に基づいて課金される従量課金サービスです。この課金方法を使用するインスタンスのライフサイクルは次のとおりです。
Alibaba Cloud の Web サイトから Hologres 共有クラスター (Lakehouse Acceleration) インスタンスを購入して有効にすると、使用を開始できます。その後、システムは前日のすべての SQL クエリのデータを集約し、請求書を生成し、ご利用のアカウントから料金を自動的に引き落とします。
ご利用の Alibaba Cloud アカウントに支払い遅延がある場合、そのアカウント配下のすべてのインスタンスは支払い遅延状態になります。支払い遅延の総額が 1,000 USD 未満の場合、インスタンスは正常に実行され続けます。
支払い遅延の総額が 1,000 USD に達すると、システムは支払いの引き落としを試みます。引き落としに失敗した場合でも、インスタンスは 14 日間正常に実行され続けます。
引き落とし失敗から 15 日目に、インスタンスのサービスが一時停止されます。インスタンスはロック済み状態になり、アクセスできなくなります。この期間中に請求書は生成されません。
サービスが一時停止されてから 15 日目に、インスタンスはリリースされます。これは、インスタンスがコンソールから削除され、そのすべてのデータが消去されて回復できなくなることを意味します。
クエリ詳細
スーパーユーザは、すべてのユーザーのクエリ詳細を表示できます。Resource Access Management (RAM) ユーザーは、自身が実行した SQL ステートメントに関する情報を表示できます。検索ステートメントは次のとおりです。
select usename,status,query_id,command_tag,duration,query,read_bytes,application_name FROM hologres.hg_query_log;クエリの詳細については、「クエリ管理」をご参照ください。
スキャンデータ量のクエリ
権限
スキャンデータ量をクエリするには、特定の権限が必要です。権限ルールと権限付与方法は次のとおりです。
インスタンス内のすべての DB でスキャンされたデータ量をクエリする。
ユーザーにスーパーユーザ権限を付与する。
スーパーユーザアカウントは、インスタンス内のすべての DB でスキャンされたデータ量を表示できます。権限付与コマンドは次のとおりです。
-- "Alibaba Cloud アカウント ID" を実際のユーザー名に置き換えます。 RAM ユーザーの場合、アカウント ID の前に "p4_" を追加します。 ALTER USER "Alibaba Cloud account ID" SUPERUSER;ユーザーを pg_read_all_stats ユーザーグループに追加する。
スーパーユーザに加えて、Hologres では pg_read_all_stats ユーザーグループのユーザーがすべての DB でスキャンされたデータ量を表示できます。一般ユーザがすべてのログを表示する必要がある場合、スーパーユーザに依頼してこのグループに追加してもらうことができます。権限付与コマンドは次のとおりです。
GRANT pg_read_all_stats TO "Alibaba Cloud account ID";-- 標準 PostgreSQL 権限モデルでの権限付与 CALL spm_grant('pg_read_all_stats', 'Alibaba Cloud account ID'); -- 簡易権限モデル (SPM) での権限付与 CALL slpm_grant('pg_read_all_stats', 'Alibaba Cloud account ID'); -- スキーマレベルの簡易権限モデル (SLPM) での権限付与
現在の DB でスキャンされたデータ量を表示する。
簡易権限モデル (SPM) またはスキーマレベルの簡易権限モデル (SLPM) を有効化します。ユーザーを db_admin ユーザーグループに追加します。db_admin ロールは、現在の DB でスキャンされたデータ量を表示できます。
CALL spm_grant('<db_name>_admin', 'Alibaba Cloud account ID'); -- SPM での権限付与 CALL slpm_grant('<db_name>.admin', 'Alibaba Cloud account ID'); -- SLPM での権限付与一般ユーザは、現在の DB で自身が実行したクエリによってスキャンされたデータ量のみをクエリできます。
権限操作の詳細については、「権限管理の概要」をご参照ください。
指定期間のスキャンデータ量のクエリ
次の SQL コマンドを使用して、詳細データを取得できます。このコマンドを実行するアカウントには、インスタンスのスーパーユーザロールが必要です。
インスタンスに log_min_duration_statement パラメーターが設定されている場合、実行時間が log_min_duration_statement パラメーターの値以上である SQL ステートメントの課金詳細のみをクエリできます。log_min_duration_statement パラメーターの詳細については、「スロークエリログの表示と分析」をご参照ください。次のステートメントを使用して、log_min_duration_statement パラメーターの値を表示できます。
show log_min_duration_statement;構文例
select to_char(query_end,'DD Mon YYYY') as day ,round( sum( case when read_bytes < 10*1024*1024 then 10*1024*1024 else read_bytes end )/1024/1024 ) as "scan_size_mb" -- 各クエリは最低 10 MB で課金されます。 ,count(*) as "sql_count" from hologres.hg_query_log where status = 'SUCCESS' and command_tag in ('SELECT') and read_bytes is not null and query_end >= 'start_time'::TIMESTAMPTZ and query_end < 'end_time'::TIMESTAMPTZ group by 1 order by 3 desc;例
次の例は、2022年1月1日 10:00 から 2022年1月1日 11:00 までのスキャンデータ量をクエリする方法を示しています。
select to_char(query_end,'DD Mon YYYY') as day ,round( sum( case when read_bytes < 10*1024*1024 then 10*1024*1024 else read_bytes end )/1024/1024 ) as "scan_size_mb" -- 各クエリは最低 10 MB で課金されます。 ,count(*) as "sql_count" from hologres.hg_query_log where status = 'SUCCESS' and command_tag in ('SELECT') and read_bytes is not null and query_end >= '2022-01-01 10:00:00+08'::TIMESTAMPTZ and query_end < '2022-01-01 11:00:00+08'::TIMESTAMPTZ group by 1 order by 3 desc;
指定期間における各 SQL クエリのスキャンデータ量のクエリ
次の SQL コマンドを使用して、指定期間に各 SQL クエリでスキャンされたデータ量を確認できます。このコマンドを実行するアカウントには、インスタンスのスーパーユーザロールが必要です。
構文例
select usename ,status ,query_id ,datname ,command_tag ,duration ,message ,query_start ,query_end ,query_date ,query ,case when read_bytes < 10*1024*1024 then 10*1024*1024 else read_bytes end as billing_read_bytes -- 各クエリは最低 10 MB で課金されます。 ,application_name from hologres.hg_query_log where status = 'SUCCESS' and command_tag in ('SELECT') and read_bytes is not null and query_end >= 'start_time'::TIMESTAMPTZ and query_end < 'end_time'::TIMESTAMPTZ;billing_read_bytes フィールドは、課金に使用されるスキャンデータ量を表します。
例
次の例は、2022年3月1日 10:00 から 2022年3月1日 11:00 までに各 SQL クエリでスキャンされたデータ量をクエリする方法を示しています。
select usename ,status ,query_id ,datname ,command_tag ,duration ,message ,query_start ,query_end ,query_date ,query ,case when read_bytes < 10*1024*1024 then 10*1024*1024 else read_bytes end as billing_read_bytes -- 各クエリは最低 10 MB で課金されます。 ,application_name from hologres.hg_query_log where status = 'SUCCESS' and command_tag in ('SELECT') and read_bytes is not null and query_end >= '2022-03-01 10:00:00+08'::TIMESTAMPTZ and query_end < '2022-03-01 11:00:00+08'::TIMESTAMPTZ;