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
2
350
データエンジニアリング領域における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.7k
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
3
1.2k
データの信頼性を支える仕組みと技術
chanyou0311
6
2k
Pulumi に入門してみた
chanyou0311
1
220
What is DRE? - Road to SRE NEXT@広島
chanyou0311
3
1k
release-please で実現する手軽で不変な Docker イメージタグ付け方法
chanyou0311
0
340
データ基盤を支える技術
chanyou0311
9
4.1k
おうちk8s入門 - すごい広島 IT初心者の会 [84]
chanyou0311
1
320
オンラインコミュニケーションの課題と、その乗り越え方
chanyou0311
0
500
Other Decks in Technology
See All in Technology
Share my, our lessons from the road to re:Invent
naospon
0
110
MIMEと文字コードの闇
hirachan
2
330
コンテナサプライチェーンセキュリティ
kyohmizu
1
120
Classmethod AI Talks(CATs) #17 司会進行スライド(2025.02.19) / classmethod-ai-talks-aka-cats_moderator-slides_vol17_2025-02-19
shinyaa31
0
160
LINEギフトにおけるバックエンド開発
lycorptech_jp
PRO
0
130
分解して理解する Aspire
nenonaninu
2
500
Perlの生きのこり - エンジニアがこの先生きのこるためのカンファレンス2025
kfly8
1
230
わたしがEMとして入社した「最初の100日」の過ごし方 / EMConfJp2025
daiksy
2
620
生成 AI プロダクトを育てる技術 〜データ品質向上による継続的な価値創出の実践〜
icoxfog417
PRO
5
1.8k
白金鉱業Meetup Vol.17_あるデータサイエンティストのデータマネジメントとの向き合い方
brainpadpr
7
930
Raycast AI APIを使ってちょっと便利な拡張機能を作ってみた / created-a-handy-extension-using-the-raycast-ai-api
kawamataryo
0
170
Swiftの “private” を テストする / Testing Swift "private"
yutailang0119
0
140
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Facilitating Awesome Meetings
lara
52
6.2k
Into the Great Unknown - MozCon
thekraken
35
1.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
What's in a price? How to price your products and services
michaelherold
244
12k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
9
500
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
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!