Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
データエンジニアリング領域におけるDuckDBのユースケース
Search
chanyou0311
February 26, 2025
Technology
10
3.7k
データエンジニアリング領域におけるDuckDBのユースケース
「DuckDBの魅力解剖!〜現場から見る活用術とその可能性〜」の登壇資料です。
https://findy.connpass.com/event/343059/
chanyou0311
February 26, 2025
Tweet
Share
More Decks by chanyou0311
See All by chanyou0311
5分でわかるDuckDB
chanyou0311
11
4.3k
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
3
1.7k
データの信頼性を支える仕組みと技術
chanyou0311
6
2.3k
Pulumi に入門してみた
chanyou0311
1
340
What is DRE? - Road to SRE NEXT@広島
chanyou0311
3
1.2k
release-please で実現する手軽で不変な Docker イメージタグ付け方法
chanyou0311
0
470
データ基盤を支える技術
chanyou0311
9
4.4k
おうちk8s入門 - すごい広島 IT初心者の会 [84]
chanyou0311
1
410
オンラインコミュニケーションの課題と、その乗り越え方
chanyou0311
0
580
Other Decks in Technology
See All in Technology
kotlin-lsp の開発開始に触発されて、Emacs で Kotlin 開発に挑戦した記録 / kotlin‑lsp as a Catalyst: My Journey to Kotlin Development in Emacs
nabeo
2
210
re:Invent 2025の見どころと便利アイテムをご紹介 / Highlights and Useful Items for re:Invent 2025
yuj1osm
0
570
短期間でRAGシステムを実現 お客様と歩んだ生成AI内製化への道のり
taka0709
1
140
アノテーション作業書作成のGood Practice
cierpa0905
PRO
1
360
AWS re:Invent 2025事前勉強会資料 / AWS re:Invent 2025 pre study meetup
kinunori
0
1k
知覚とデザイン
rinchoku
1
720
激動の時代を爆速リチーミングで乗り越えろ
sansantech
PRO
1
230
組織全員で向き合うAI Readyなデータ利活用
gappy50
5
2k
AWSが好きすぎて、41歳でエンジニアになり、AAIを経由してAWSパートナー企業に入った話
yama3133
2
220
251029 JAWS-UG AI/ML 退屈なことはQDevにやらせよう
otakensh
0
120
日本のソブリンAIを支えるエヌビディアの生成AIエコシステム
acceleratedmu3n
0
110
実践マルチモーダル検索!
shibuiwilliam
3
520
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
412
23k
A Tale of Four Properties
chriscoyier
161
23k
Music & Morning Musume
bryan
46
6.9k
Become a Pro
speakerdeck
PRO
29
5.6k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
Scaling GitHub
holman
463
140k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Rails Girls Zürich Keynote
gr2m
95
14k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Raft: Consensus for Rubyists
vanstee
140
7.2k
Leading Effective Engineering Teams in the AI Era
addyosmani
7
680
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Transcript
2025/02/27 Yu Nakamura - chanyou データエンジニアリング領域における DuckDBのユースケース @chanyou0311
Yu Nakamura - chanyou • スタートアップでデータエンジニアとして交通データ分析基盤 の構築‧運⽤を経験 • その後、株式会社タイミーの DRE
チームにジョイン データ基盤の構築‧運⽤に注⼒ • 最近はデータ基盤における Platform Engineering に関⼼があり ます • 広島在住。趣味はおうち Kubernetes クラスタ • YAPC::Hiroshima 2024 のスタッフなど
タイミーとは 3 「働きたい時間」と「働いてほしい時間」を マッチングするスキマバイトサービス 従来の「求⼈サイト」でも「派遣」でもない
タイミーの実績 スキマ バイト No.1 ※1 ※2 [調査⽅法]インターネット調査 [調査期間]2025年1⽉31⽇〜2025年2⽉4⽇ [調査概要]スキマバイトアプリサービスの 実態調査
[調査委託先]株式会社マクロミル ※3 2024年12⽉時点 ※4 2024年12⽉時点 利⽤率 ‧リピート率 ※1 ※2 導⼊事業者数 159,000企業 ワーカー数 1,000万⼈ ※4 ※3
目次 • DuckDB の特徴 • データエンジニアリング領域における DuckDB の評価 • タイミーにおけるユースケース
• その他に想定されるユースケース
1 DuckDB の特徴
DuckDB とは? • OLAP 特化の DB Engine • SQLite のようなインプロセス型のデータベース
• MIT ライセンスで C++ 実装
DuckDB の特徴 • シングルバイナリでセットアップが容易 • クライアントAPIが充実 • 外部データソースの読み書きに対応
シングルバイナリでセットアップが容易 • セットアップスクリプトを実⾏するだけ • バイナリをダウンロードしてパスを通してもよい https://duckdb.org/docs/installation/index?version=stable&environment=cli&platform=linux&download_method=direct&architecture=x86_64
シングルバイナリでセットアップが容易 • duckdb <データベースファイルパス> で起動できる • ファイルパスを省略すると、インメモリモードで起動する
クライアントAPIが充実 • CLI • C • Java • Go •
Node.js • Python • R • WebAssembly 他にも Dart, Rust, Ruby などのクライアントAPIも公開されている
Python の場合 DataFrame と相互変換が可能 • クエリ結果を Pandas や Polars の
DataFrame に変換できる • DataFrame に対して DuckDB でクエリを実⾏することも可能 https://duckdb.org/docs/clients/python/overview
外部データソースの読み書きに対応 • PostgreSQL や MySQL といった RDBMS に直接クエリを実⾏できる • CSV,
Parquet, Delta, Iceberg といったファイルにクエリを実⾏できる https://duckdb.org/docs/data/parquet/overview.html https://duckdb.org/docs/extensions/postgres.html
外部データソースの読み書きに対応 • S3, GCS, Blob Storage などのオブジェクトストレージに直接クエリを 実⾏できる https://duckdb.org/docs/extensions/httpfs/s3api.html
DuckDB の特徴 • シングルバイナリでセットアップが容易 • クライアントAPIが充実 • 外部データソースの読み書きに対応
2 データエンジニアリング領域における DuckDB の評価
DuckDB の Good な点 • 🚀 ⼤量データでも⾼いパフォーマンスで実⾏できる • 🧰 幅広いデータ形式の読み込みに対応している
• 💰 データ量に依存したクエリ料⾦がかからない • 🤝 dbt アダプタなど、周辺エコシステムとの親和性が⾼い
DuckDB の More な点 • 👮 きめ細かなアクセス制御‧監査ログの取得が難しい • 💥 DuckDB
のデータベースファイルを SSoT として運⽤しようとすると、 途端に破綻する
👮 きめ細かなアクセス制御‧監査ログの取得が難しい • テーブルレベル、⾏レベル、列レベルのアクセス制御が DuckDB 単体では できない • 動的なマスキングも難しい •
監査ログの取得もクライアントの設定次第で、強制が難しい
💥 SSoT として運⽤しようとすると、途端に破綻する • ⽇々更新されるデータベースファイルをリモートで保持する必要がある ◦ クライアントでクエリを実⾏するには、ダウンロードが必要 ◦ 定期的に pull
しないとクエリ結果が変わってしまう
💥 SSoT として運⽤しようとすると、途端に破綻する • 分析結果を他⼈に共有しようとすると、さらに煩雑に… • やがて 20250227_最新版.duckdb といったファイルが⽣まれ、統制の効かないデータ基盤 に…😱
◦ 「爆速なExcel」といった位置付けになってしまう
データエンジニアリング領域における DuckDB の位置付けは?
データエンジニアリング領域における DuckDB • これまでの中央集権的なデータウェアハウスを完全に代替するものではない ◦ アクセス制御も監査ログも必要だし、容易なコラボレーションも推進し たい • 永続性を求めないケースでの相性がよい ◦
オブジェクトストレージへのクエリエンジン ◦ データの前処理や検証
オブジェクトストレージへのクエリエンジン • オブジェクトストレージに Parquet や Iceberg 形式でデータを保持しておい て、DuckDB でクエリを実⾏する •
必要に応じてクエリ結果をオブジェクトストレージに書き戻すこともできる
オブジェクトストレージへのクエリエンジン • 類似ソリューション ◦ AWS Athena や BigQuery Omni など
▪ 🦆 クラウドにロックインされず、どこでも実⾏できる ◦ Pandas などの DataFrame ▪ 🦆 Python 実⾏環境が不要で、⼿軽に実⾏できる
データの前処理や検証 • データの前処理 ◦ 複雑な結合‧重複排除 • データの検証 ◦ データの完全性‧⼀意性‧最新性の検証 •
スクリプト内部に閉じた利⽤が想定される • スクリプト実⾏後にデータが揮発しても問題ない
3 タイミーにおける ユースケース
シチュエーション • S3 に保存された Parquet ファイルを BigQuery にロードするケース • ロードする前後のデータが完全に⼀致することを保証したい
DuckDB を使って前後のデータの差分が1件もないことを検証した
データの⽐較⽅法 • S3 のファイルの読み込みは read_parquet() 関数ですぐ読み込める • BigQuery はロード後のテーブルを GCS
に Parquet 形式でエクスポートして から read_parquet() で読み込む ◦ DuckDB から BigQuery に直接クエリできる Community Extension もあるが、⼀部のフィールドでうまく クエリできない問題があって⾒送った • データの⽐較は EXCEPT 句で実⾏できる
実装イメージ 異なるデータソースでも1回のクエリで結合できて便利
4 その他に想定される ユースケース
データの検証‧スクリプト内での利⽤ • レコードの⼀意性のチェック • テーブルの鮮度のチェック(最新レコードの⽇時と現在時刻の⽐較) dbt でも実施できるが、 dbt に依存しない⼿軽な実⾏環境として採⽤できる
データの前処理による料⾦コストの削減 • ⽣データをDWHにロードしてからデータを加⼯する ELT パターンが主流 ◦ ⼤規模になるにつれて Transform のクエリコストがかさみがち
データの前処理による料⾦コストの削減 • DuckDB を使うと安価なコンピュータ上でデータの前処理や結合をしてから DWHにロードする構成が取れる ◦ 例)⼤量のログデータから分析対象だけWHEREで絞ってDWHにロードする ◦ 例)DWHはBI⽤のマート層だけ保持するようにして、それより前は全部DuckDB にやらせる
ひとりアナリストのデータ基盤として • データの管理と分析を1名で⾏っている場合は DuckDB の⼿軽さがフィットしそう ◦ 分析チームの⽴ち上げフェーズなど • データの管理者と分析者が分かれたり、複数⼈で分析を⾏うようになると コラボレーションのハードルが⼀気に⾼くなる
• この場合、DuckDB は「爆速なExcel」といった認識で使うのが良さそう ◦ その場限りのローカル分析環境として
5 まとめ
まとめ • DuckDB を使うと、データの置き場所や形式を問わずクエリできる ◦ 場所や形式を横断したクエリもサクッと実⾏できる • ガバナンスやコラボレーションを意識した使い⽅は現状難しい ◦ 分析⽬的で広く社内で使ってもらうのにはハードルがある
• 永続性を求めないケースでの相性がよい ◦ オブジェクトストレージへのクエリエンジン ◦ データの前処理や検証
https://hrmos.co/pages/timee/jobs/1682251404118319115 データ基盤を通して、プロダクトと組織の成⻑を⼀緒に⽀えましょう! We're hiring!