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
9
3.2k
データエンジニアリング領域における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
3.9k
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
3
1.4k
データの信頼性を支える仕組みと技術
chanyou0311
6
2.1k
Pulumi に入門してみた
chanyou0311
1
300
What is DRE? - Road to SRE NEXT@広島
chanyou0311
3
1.1k
release-please で実現する手軽で不変な Docker イメージタグ付け方法
chanyou0311
0
380
データ基盤を支える技術
chanyou0311
9
4.2k
おうちk8s入門 - すごい広島 IT初心者の会 [84]
chanyou0311
1
350
オンラインコミュニケーションの課題と、その乗り越え方
chanyou0311
0
520
Other Decks in Technology
See All in Technology
Global Azure2025(GitHub Copilot ハンズオン)
tomokusaba
2
720
MCPが変えるAIとの協働
knishioka
1
150
20 Years of Domain-Driven Design: What I’ve Learned About DDD
ewolff
1
310
Как мы автоматизировали интеграционное тестирование с Gonkey и не пожалели. Паша Егорычев, Кирилл Поляков
lamodatech
0
2.1k
DynamoDB のデータを QuickSight で可視化する際につまづいたこと/stumbling-blocks-when-visualising-dynamodb-with-quicksight
emiki
0
140
猫でもわかるS3 Tables【Apache Iceberg編】
kentapapa
2
180
Новые мапы в Go. Вова Марунин, Clatch, МТС
lamodatech
0
2k
Winning at PHP in Production in 2025
beberlei
1
280
Serverlessだからこそコードと設計にはこだわろう
kenichirokimura
2
940
Part2 GitHub Copilotってなんだろう
tomokusaba
2
750
データベース04: SQL (1/3) 単純質問 & 集約演算
trycycle
PRO
0
730
Асинхронная коммуникация в Go: от понятного к душному. Дима Некрасов, Otello, 2ГИС
lamodatech
0
2.1k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
23
1.6k
Fireside Chat
paigeccino
37
3.4k
It's Worth the Effort
3n
184
28k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
How GitHub (no longer) Works
holman
314
140k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
120
52k
Git: the NoSQL Database
bkeepers
PRO
430
65k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
Why Our Code Smells
bkeepers
PRO
336
57k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
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!