DuckDB in Action を読んでいたら,Chapter.1 / Chapter.10 に「bar 関数」が出てきた📊 たくさん組み込み関数があるんだな〜と思って実際に試してみた❗️小ネタだけど検証ログを残しておく✍
ちなみに DuckDB のドキュメントだと Text Functions のページに載っていた.
bar(x, min, max[, width])
お試し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 │ │ varchar │ decimal(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 Exports の Cost 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 │ │ varchar │ decimal(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) エクスポートを設定する📝
CUR 2.0 データからコスト分析をするときのクエリ例を探すときは「AWS Well-Architected Cost & Usage Report Library」が参考になる📝(一部 CUR 2.0 に対応していなかったりするけど Legacy CUR を読み替えれば OK👌)
CUR 2.0 データのカラムの意味を確認する場合はドキュメント参照📝