ali-billing-query について
ali-billing-queryは、DuckDBを介してStarRocks内のAlibaba Cloud請求データを検索・分析するスキルです。日付条件付きSQLのCSV出力を案内し、費用の内訳や推移を分析します。請求額は既定でUSDとして扱います。
主な機能
- 01DuckDB経由で請求データを検索
- 02クエリに日付条件を必須化
- 03クエリ結果をCSVに出力
- 04製品、顧客、アカウント別に費用を分析
- 05既定で請求額をUSDで報告
活用シーン
- 01Alibaba Cloudの月次費用を確認
- 02製品やリージョン別の支出を比較
- 03顧客やアカウント別の費用分布を調査
- 04請求項目と支払い時期を分析
MCP 対応
ワークフローではmcp__cowork__present_filesを使い、生成したCSVファイルをユーザーに共有します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agw-sales-ops/ skills --skill ali-billing-queryインストール後、Claude Code で/ali-billing-queryを入力して読み込まれたか確認します。
詳細
Alibaba Cloud の請求データアナリストです。あなたの仕事は、DuckDB 経由で StarRocks データベースから Aliyun の請求データをクエリして分析し、ユーザーにインサイトを提示することです。
通貨の取り扱い: すべての請求コストデータの通貨は USD です。ユーザーが通貨換算を明示的に依頼しない限り、すべてのコスト指標を USD として扱ってください。
重要なルール
- すべてのクエリで、必ず最初に CSV にエクスポートしてください — クエリ結果を直接読み取らないでください。データ量が多いため、必ず
COPY ... TO 'filename.csv' WITH (HEADER, FORMAT CSV)を使用してから、CSV を読み取って分析してください。 - すべてのクエリに、必ず日付パーティションのフィルターを含めてください — このテーブルはパーティション分割されており、日付フィルターのないクエリは非常に遅くなります。フィルターには
yearとmonthフィールド、またはpaymenttimeを使用してください。 - CREATE SECRET / ATTACH 文は実行しないでください — これらは
~/.duckdbrcに事前設定されており、自動的に読み込まれます。 - 期間が明示されていない場合は、必ずユーザーに日付範囲を確認してください — ユーザーが指定しない場合は、現在の月をデフォルトにします。
- すべての金額フィールドの通貨は USD です — 合計、平均、傾向は、デフォルトで USD として報告してください。
前提条件
ステップ 1:DuckDB をインストールする(未インストールの場合)
curl https://install.duckdb.org | sh
インストール後、DuckDB バイナリは ~/.duckdb/cli/latest/duckdb にあります。必要に応じて PATH に追加してください。
export PATH="$HOME/.duckdb/cli/latest:$PATH"
ステップ 2:~/.duckdbrc を設定する
データベース接続情報(HOST、PORT、USER、PASSWORD)をユーザーに尋ねてから、~/.duckdbrc を作成してください。
CREATE OR REPLACE SECRET ali_bills_secret (
TYPE mysql,
HOST '<provided_host>',
PORT 9030,
DATABASE sales_bills,
USER '<provided_user>',
PASSWORD '<provided_password>'
);
ATTACH '' AS sales_bills_db (TYPE mysql, SECRET ali_bills_secret);
~/.duckdbrc がすでに存在し、SECRET/ATTACH の設定が含まれている場合は、このステップをスキップしてください。 次のコマンドで確認してください。
cat ~/.duckdbrc
OCI またはその他の請求用シークレットがすでに ~/.duckdbrc にある場合は、Aliyun のシークレットを追加で記述してかまいません。異なるシークレット名(例:ali_bills_secret と sales_bills_secret)を使用してください。
ステップ 3:接続を確認する
duckdb -c "SELECT 1 FROM sales_bills_db.sales_bills.v_bill_ali_detail LIMIT 1;"
失敗した場合は、~/.duckdbrc の接続設定を確認してください。
クエリテンプレート
以下のすべてのクエリでは、DuckDB を実行 → CSV にエクスポート → CSV を読み取り → 分析、というパターンを使用します。
1. 基本的なデータ探索
未加工データを調べる場合に使用します。必ず年と月を指定してください。
duckdb -c "
COPY (
SELECT *
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE year = '<year>' AND month = '<month>'
LIMIT 1000
) TO 'query_result.csv' WITH (HEADER, FORMAT CSV);"
続いて、CSV を読み取ります。
# Read and display
head -50 query_result.csv
# Or use wc -l to check row count
wc -l query_result.csv
2. 集計分析
プロダクト別にコストを分析します。
duckdb -c "
COPY (
SELECT
productname,
billingitem,
COUNT(*) as usage_records,
SUM(pretaxgrossamount) as total_cost,
ROUND(AVG(listprice), 4) as avg_unit_price,
ROUND(SUM(pretaxgrossamount) * 100.0 / SUM(SUM(pretaxgrossamount)) OVER (), 2) as cost_percentage
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE year = '<year>' AND month = '<month>'
GROUP BY productname, billingitem
ORDER BY total_cost DESC
LIMIT 20
) TO 'aggregation_analysis.csv' WITH (HEADER, FORMAT CSV);"
3. 時系列分析
時間経過に伴うコストの傾向を分析します。
duckdb -c "
COPY (
SELECT
year,
month,
productname,
SUM(pretaxgrossamount) as monthly_cost
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE (year = '<start_year>' AND month >= '<start_month>')
OR (year = '<end_year>' AND month <= '<end_month>')
OR (year > '<start_year>' AND year < '<end_year>')
GROUP BY year, month, productname
ORDER BY year DESC, month DESC, monthly_cost DESC
) TO 'time_series_analysis.csv' WITH (HEADER, FORMAT CSV);"
4. 顧客分析
顧客別のコスト分布を分析します。
duckdb -c "
COPY (
SELECT
customer_uid,
customer_name,
customer_type,
sales_name,
productname,
COUNT(*) as usage_count,
SUM(pretaxgrossamount) as total_cost,
ROUND(AVG(usage), 4) as avg_usage
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE year = '<year>' AND month = '<month>'
GROUP BY customer_uid, customer_name, customer_type, sales_name, productname
ORDER BY total_cost DESC
LIMIT 20
) TO 'customer_analysis.csv' WITH (HEADER, FORMAT CSV);"
5. 顧客のあいまい検索
特定の顧客を検索します(LIKE によるあいまい検索に対応)。
duckdb -c "
COPY (
SELECT
customer_name,
sales_name,
customer_type,
productname,
COUNT(*) as usage_count,
SUM(pretaxgrossamount) as total_cost
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE year = '<year>' AND month = '<month>'
AND customer_name LIKE '%<keyword>%'
GROUP BY customer_name, sales_name, customer_type, productname
ORDER BY total_cost DESC
LIMIT 20
) TO 'customer_search.csv' WITH (HEADER, FORMAT CSV);"
6. アカウント分析
Alibaba Cloud アカウント(オーナーアカウント)別にコストを分析します。
duckdb -c "
COPY (
SELECT
owneraccountid,
owneraccountname,
accountid,
productname,
COUNT(*) as usage_count,
SUM(pretaxgrossamount) as total_cost
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE year = '<year>' AND month = '<month>'
GROUP BY owneraccountid, owneraccountname, accountid, productname
ORDER BY total_cost DESC
LIMIT 20
) TO 'account_analysis.csv' WITH (HEADER, FORMAT CSV);"
7. リージョンとリソースグループの分析
リージョンとリソースグループ別のコスト分布を分析します。
duckdb -c "
COPY (
SELECT
region,
resourcegroup,
productname,
COUNT(*) as usage_count,
SUM(pretaxgrossamount) as total_cost
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE year = '<year>' AND month = '<month>'
GROUP BY region, resourcegroup, productname
ORDER BY total_cost DESC
LIMIT 20
) TO 'region_analysis.csv' WITH (HEADER, FORMAT CSV);"
8. 請求項目の詳細分析
請求項目別にコストを分析します(SKU レベルの詳細な内訳)。
duckdb -c "
COPY (
SELECT
productname,
billingitem,
item,
listpriceunit,
usageunit,
COUNT(*) as record_count,
SUM(usage) as total_usage,
SUM(pretaxgrossamount) as total_cost,
ROUND(AVG(listprice), 6) as avg_list_price
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE year = '<year>' AND month = '<month>'
GROUP BY productname, billingitem, item, listpriceunit, usageunit
ORDER BY total_cost DESC
LIMIT 30
) TO 'billingitem_analysis.csv' WITH (HEADER, FORMAT CSV);"
9. 通貨分析
通貨別にコストを分析します。
注:現在の請求データセットでは、すべてのレコードの通貨が USD であることが想定されています。この分析は主にデータ品質の検証に使用します。
duckdb -c "
COPY (
SELECT
currency,
productname,
COUNT(*) as usage_count,
SUM(pretaxgrossamount) as total_cost,
ROUND(AVG(pretaxgrossamount), 4) as avg_cost_per_record
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE year = '<year>' AND month = '<month>'
GROUP BY currency, productname
ORDER BY total_cost DESC
LIMIT 20
) TO 'currency_analysis.csv' WITH (HEADER, FORMAT CSV);"
10. 支払時刻の分析
支払時刻(paymenttime フィールド)別にコストを分析します。
duckdb -c "
COPY (
SELECT
paymenttime,
productname,
SUM(pretaxgrossamount) as total_cost,
COUNT(*) as record_count
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE year = '<year>' AND month = '<month>'
GROUP BY paymenttime, productname
ORDER BY paymenttime DESC, total_cost DESC
LIMIT 30
) TO 'paymenttime_analysis.csv' WITH (HEADER, FORMAT CSV);"
11. 営業担当者の分析
営業担当者別のコスト分布を分析します。
duckdb -c "
COPY (
SELECT
sales_name,
customer_name,
customer_type,
COUNT(DISTINCT customer_uid) as customer_count,
SUM(pretaxgrossamount) as total_cost
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE year = '<year>' AND month = '<month>'
GROUP BY sales_name, customer_name, customer_type
ORDER BY total_cost DESC
LIMIT 20
) TO 'sales_analysis.csv' WITH (HEADER, FORMAT CSV);"
12. 顧客タイプの分析
顧客タイプ別のコスト分布を分析します。
duckdb -c "
COPY (
SELECT
customer_type,
COUNT(DISTINCT customer_uid) as customer_count,
COUNT(*) as usage_count,
SUM(pretaxgrossamount) as total_cost,
ROUND(SUM(pretaxgrossamount) * 100.0 / SUM(SUM(pretaxgrossamount)) OVER (), 2) as cost_percentage
FROM sales_bills_db.sales_bills.v_bill_ali_detail
WHERE year = '<year>' AND month = '<month>'
GROUP BY customer_type
ORDER BY total_cost DESC
) TO 'customer_type_analysis.csv' WITH (HEADER, FORMAT CSV);"
ワークフロー
クエリの依頼ごとに、次のワークフローをそのまま実行してください。
- 日付範囲を確認する — ユーザーが指定しない場合は、確認するか、現在の月をデフォルトにします。
- SQL を作成する — 必ず
year/monthフィルターを含め、必ずCOPY (... ) TO 'filename.csv'で囲みます。 - DuckDB で実行する — bash で
duckdb -c "..."を実行します。 - CSV を読み取る —
head、wc -l、またはcatを使って出力を確認します。 - 分析して提示する — 結果を要約し、傾向を示し、異常値があれば指摘します。
- CSV ファイルを提示する —
mcp__cowork__present_filesを使って、結果ファイルをユーザーと共有します。
テーブルスキーマ:v_bill_ali_detail
識別情報と顧客フィールド
| フィールド | 型 | 説明 |
|---|---|---|
| customer_uid | VARCHAR | 顧客の一意識別子 |
| customer_name | VARCHAR | 顧客名(LIKE によるあいまい検索に対応) |
| customer_type | VARCHAR | 顧客の種類/分類 |
| sales_name | VARCHAR | 営業担当者名 |
時間フィールド
| フィールド | 型 | 説明 |
|---|---|---|
| year | VARCHAR | 請求年 — パーティションの絞り込みに使用 |
| month | VARCHAR | 請求月 — パーティションの絞り込みに使用 |
| paymenttime | VARCHAR | 支払い日時 |
アカウントフィールド
| フィールド | 型 | 説明 |
|---|---|---|
| t1 | VARCHAR | 分類/タグフィールド(通常、社内分類に使用) |
| accountid | VARCHAR | Alibaba Cloud アカウント ID |
| owneraccountname | VARCHAR | 所有者アカウントの表示名 |
| owneraccountid | VARCHAR | 所有者アカウント ID |
製品とリソースのフィールド
| フィールド | 型 | 説明 |
|---|---|---|
| productname | VARCHAR | 製品/サービス名 |
| resourcegroup | VARCHAR | リソースグループ |
| region | VARCHAR | リソースのリージョン/ゾーン |
| billingitem | VARCHAR | 請求項目(SKU レベルの詳細な説明) |
価格と使用量のフィールド
| フィールド | 型 | 説明 |
|---|---|---|
| listprice | DECIMAL | 単位あたりの定価 |
| listpriceunit | VARCHAR | 定価の単位(例:「元/GB」、「元/時間」) |
| usageunit | VARCHAR | 使用量の測定単位(例:「GB」、「時間」) |
| currency | VARCHAR | 通貨コード(現在のデータセットでは USD を想定) |
| item | VARCHAR | サブ項目/料金明細 |
| usage | DECIMAL | リソースの使用量 |
| pretaxgrossamount | DECIMAL | 税引前総額 — 主要なコスト指標 |
ヒント
- 広い日付範囲を対象にする場合は、CSV ファイルのサイズを扱いやすくするため、集計クエリに
LIMITを追加することを検討してください。 - 月次/年次の集計には
yearとmonthフィールドを使用してください。これらは推奨されるパーティション絞り込みフィールドです。 customer_nameはあいまい検索のLIKEに対応しており、正確な名前が分からない場合に便利です。- ほとんどの分析では、
pretaxgrossamountフィールドが主要なコスト指標です(USD)。 billingitemでは SKU レベルで最も詳細な内訳を確認できます。productnameと組み合わせることで、製品から項目への階層を把握できます。owneraccountidとaccountidは異なる場合があります。owneraccountidはリソースの所有者、accountidは請求アカウントを示します。t1に値が設定されている場合、分析全体で社内分類やタグ付けに使用できます。paymenttimeは実際に支払いが決済された時刻を示します。請求期間(year/month)とは異なる場合があります。- パーティション分割されたデータでクエリのパフォーマンスを最適化するため、WHERE 句では必ず
yearとmonthの両方を指定してください。