kakakakakku blog

Weekly Tech Blog: Keep on Learning!

DuckDB: bar 関数で棒グラフを作る

DuckDB in Action を読んでいたら,Chapter.1 / Chapter.10 に「bar 関数」が出てきた📊 たくさん組み込み関数があるんだな〜と思って実際に試してみた❗️小ネタだけど検証ログを残しておく✍

ちなみに DuckDB のドキュメントだと Text Functions のページに載っていた.

bar(x, min, max[, width])

duckdb.org

お試し1

WITH で映画のレーティングデータを適当に作って bar() で棒グラフを作ってみた📊

⚫◗ WITH ratings(movie, rating) AS (
    VALUES 
        ('Movie A', 4.5),
        ('Movie B', 3.8),
        ('Movie C', 4.9),
        ('Movie D', 2.1),
        ('Movie E', 3.3)
)
SELECT
    movie,
    rating,
    bar(rating, 0, 5) AS bar
FROM ratings;
┌─────────┬──────────────┬─────────────────────────────────────────────────────────────────────────────────┐
│  movie  │    rating    │                                       bar                                       │
│ varchardecimal(2,1) │                                     varchar                                     │
├─────────┼──────────────┼─────────────────────────────────────────────────────────────────────────────────┤
│ Movie A │          4.5 │ ████████████████████████████████████████████████████████████████████████        │
│ Movie B │          3.8 │ ████████████████████████████████████████████████████████████▊                   │
│ Movie C │          4.9 │ ██████████████████████████████████████████████████████████████████████████████▍ │
│ Movie D │          2.1 │ █████████████████████████████████▌                                              │
│ Movie E │          3.3 │ ████████████████████████████████████████████████████▊                           │
└─────────┴──────────────┴─────────────────────────────────────────────────────────────────────────────────┘

お試し2

個人的な検証用 AWS アカウントで AWS Data ExportsCost and Usage Reports 2.0 (CUR 2.0) データを Parquet 形式でエクスポートしている.kakakakakku-cur-00001.snappy.parquet をローカルに落としてきて,2025/01/01 から 2025/01/07 の1週間でサービス別の合計金額から棒グラフを作ってみた📊

検証する日以外は基本的に課金されないようにしていて,棒グラフの結果は微妙だけど,期待した結果が取得できている👌

SELECT
    line_item_product_code,
    SUM(CAST(line_item_unblended_cost AS DECIMAL(16,8))) AS sum_line_item_unblended_cost,
    bar(sum_line_item_unblended_cost, 0, 0.6) AS bar
FROM 'kakakakakku-cur-00001.snappy.parquet'
WHERE STRFTIME(line_item_usage_start_date, '%Y-%m-%d') BETWEEN '2025-01-01' AND '2025-01-07'
GROUP BY
    line_item_product_code
ORDER BY
    sum_line_item_unblended_cost DESC;
┌────────────────────────┬──────────────────────────────┬──────────────────────────────────────────────────────────────────────────────────┐
│ line_item_product_code │ sum_line_item_unblended_cost │                                       bar                                        │
│        varchardecimal(38,8)         │                                     varchar                                      │
├────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────┤
│ AmazonRoute53          │                   0.55000000 │ █████████████████████████████████████████████████████████████████████████▎       │
│ AmazonS3               │                   0.00122256 │ ▏                                                                                │
│ AWSCloudShell          │                   0.00000116 │                                                                                  │
│ awskms                 │                   0.00000000 │                                                                                  │
│ AWSCloudFormation      │                   0.00000000 │                                                                                  │
│ AWSEvents              │                   0.00000000 │                                                                                  │
│ AWSDataTransfer        │                   0.00000000 │                                                                                  │
│ AmazonCloudWatch       │                   0.00000000 │                                                                                  │
└────────────────────────┴──────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────┘

関連情報

AWS CDK で Cost and Usage Reports 2.0 (CUR 2.0) エクスポートを設定する📝

kakakakakku.hatenablog.com

CUR 2.0 データからコスト分析をするときのクエリ例を探すときは「AWS Well-Architected Cost & Usage Report Library」が参考になる📝(一部 CUR 2.0 に対応していなかったりするけど Legacy CUR を読み替えれば OK👌)

catalog.workshops.aws

CUR 2.0 データのカラムの意味を確認する場合はドキュメント参照📝

docs.aws.amazon.com