データエンジニアリング領域におけるDuckDBのユースケース
by
chanyou0311
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
2025/02/27 Yu Nakamura - chanyou データエンジニアリング領域における DuckDBのユースケース @chanyou0311
Slide 2
Slide 2 text
Yu Nakamura - chanyou ● スタートアップでデータエンジニアとして交通データ分析基盤 の構築‧運⽤を経験 ● その後、株式会社タイミーの DRE チームにジョイン データ基盤の構築‧運⽤に注⼒ ● 最近はデータ基盤における Platform Engineering に関⼼があり ます ● 広島在住。趣味はおうち Kubernetes クラスタ ● YAPC::Hiroshima 2024 のスタッフなど
Slide 3
Slide 3 text
タイミーとは 3 「働きたい時間」と「働いてほしい時間」を マッチングするスキマバイトサービス 従来の「求⼈サイト」でも「派遣」でもない
Slide 4
Slide 4 text
タイミーの実績 スキマ バイト No.1 ※1 ※2 [調査⽅法]インターネット調査 [調査期間]2025年1⽉31⽇〜2025年2⽉4⽇ [調査概要]スキマバイトアプリサービスの 実態調査 [調査委託先]株式会社マクロミル ※3 2024年12⽉時点 ※4 2024年12⽉時点 利⽤率 ‧リピート率 ※1 ※2 導⼊事業者数 159,000企業 ワーカー数 1,000万⼈ ※4 ※3
Slide 5
Slide 5 text
目次 ● DuckDB の特徴 ● データエンジニアリング領域における DuckDB の評価 ● タイミーにおけるユースケース ● その他に想定されるユースケース
Slide 6
Slide 6 text
1 DuckDB の特徴
Slide 7
Slide 7 text
DuckDB とは? ● OLAP 特化の DB Engine ● SQLite のようなインプロセス型のデータベース ● MIT ライセンスで C++ 実装
Slide 8
Slide 8 text
DuckDB の特徴 ● シングルバイナリでセットアップが容易 ● クライアントAPIが充実 ● 外部データソースの読み書きに対応
Slide 9
Slide 9 text
シングルバイナリでセットアップが容易 ● セットアップスクリプトを実⾏するだけ ● バイナリをダウンロードしてパスを通してもよい https://duckdb.org/docs/installation/index?version=stable&environment=cli&platform=linux&download_method=direct&architecture=x86_64
Slide 10
Slide 10 text
シングルバイナリでセットアップが容易 ● duckdb <データベースファイルパス> で起動できる ● ファイルパスを省略すると、インメモリモードで起動する
Slide 11
Slide 11 text
クライアントAPIが充実 ● CLI ● C ● Java ● Go ● Node.js ● Python ● R ● WebAssembly 他にも Dart, Rust, Ruby などのクライアントAPIも公開されている
Slide 12
Slide 12 text
Python の場合 DataFrame と相互変換が可能 ● クエリ結果を Pandas や Polars の DataFrame に変換できる ● DataFrame に対して DuckDB でクエリを実⾏することも可能 https://duckdb.org/docs/clients/python/overview
Slide 13
Slide 13 text
外部データソースの読み書きに対応 ● PostgreSQL や MySQL といった RDBMS に直接クエリを実⾏できる ● CSV, Parquet, Delta, Iceberg といったファイルにクエリを実⾏できる https://duckdb.org/docs/data/parquet/overview.html https://duckdb.org/docs/extensions/postgres.html
Slide 14
Slide 14 text
外部データソースの読み書きに対応 ● S3, GCS, Blob Storage などのオブジェクトストレージに直接クエリを 実⾏できる https://duckdb.org/docs/extensions/httpfs/s3api.html
Slide 15
Slide 15 text
DuckDB の特徴 ● シングルバイナリでセットアップが容易 ● クライアントAPIが充実 ● 外部データソースの読み書きに対応
Slide 16
Slide 16 text
2 データエンジニアリング領域における DuckDB の評価
Slide 17
Slide 17 text
DuckDB の Good な点 ● 🚀 ⼤量データでも⾼いパフォーマンスで実⾏できる ● 🧰 幅広いデータ形式の読み込みに対応している ● 💰 データ量に依存したクエリ料⾦がかからない ● 🤝 dbt アダプタなど、周辺エコシステムとの親和性が⾼い
Slide 18
Slide 18 text
DuckDB の More な点 ● 👮 きめ細かなアクセス制御‧監査ログの取得が難しい ● 💥 DuckDB のデータベースファイルを SSoT として運⽤しようとすると、 途端に破綻する
Slide 19
Slide 19 text
👮 きめ細かなアクセス制御‧監査ログの取得が難しい ● テーブルレベル、⾏レベル、列レベルのアクセス制御が DuckDB 単体では できない ● 動的なマスキングも難しい ● 監査ログの取得もクライアントの設定次第で、強制が難しい
Slide 20
Slide 20 text
💥 SSoT として運⽤しようとすると、途端に破綻する ● ⽇々更新されるデータベースファイルをリモートで保持する必要がある ○ クライアントでクエリを実⾏するには、ダウンロードが必要 ○ 定期的に pull しないとクエリ結果が変わってしまう
Slide 21
Slide 21 text
💥 SSoT として運⽤しようとすると、途端に破綻する ● 分析結果を他⼈に共有しようとすると、さらに煩雑に… ● やがて 20250227_最新版.duckdb といったファイルが⽣まれ、統制の効かないデータ基盤 に…😱 ○ 「爆速なExcel」といった位置付けになってしまう
Slide 22
Slide 22 text
データエンジニアリング領域における DuckDB の位置付けは?
Slide 23
Slide 23 text
データエンジニアリング領域における DuckDB ● これまでの中央集権的なデータウェアハウスを完全に代替するものではない ○ アクセス制御も監査ログも必要だし、容易なコラボレーションも推進し たい ● 永続性を求めないケースでの相性がよい ○ オブジェクトストレージへのクエリエンジン ○ データの前処理や検証
Slide 24
Slide 24 text
オブジェクトストレージへのクエリエンジン ● オブジェクトストレージに Parquet や Iceberg 形式でデータを保持しておい て、DuckDB でクエリを実⾏する ● 必要に応じてクエリ結果をオブジェクトストレージに書き戻すこともできる
Slide 25
Slide 25 text
オブジェクトストレージへのクエリエンジン ● 類似ソリューション ○ AWS Athena や BigQuery Omni など ■ 🦆 クラウドにロックインされず、どこでも実⾏できる ○ Pandas などの DataFrame ■ 🦆 Python 実⾏環境が不要で、⼿軽に実⾏できる
Slide 26
Slide 26 text
データの前処理や検証 ● データの前処理 ○ 複雑な結合‧重複排除 ● データの検証 ○ データの完全性‧⼀意性‧最新性の検証 ● スクリプト内部に閉じた利⽤が想定される ● スクリプト実⾏後にデータが揮発しても問題ない
Slide 27
Slide 27 text
3 タイミーにおける ユースケース
Slide 28
Slide 28 text
シチュエーション ● S3 に保存された Parquet ファイルを BigQuery にロードするケース ● ロードする前後のデータが完全に⼀致することを保証したい DuckDB を使って前後のデータの差分が1件もないことを検証した
Slide 29
Slide 29 text
データの⽐較⽅法 ● S3 のファイルの読み込みは read_parquet() 関数ですぐ読み込める ● BigQuery はロード後のテーブルを GCS に Parquet 形式でエクスポートして から read_parquet() で読み込む ○ DuckDB から BigQuery に直接クエリできる Community Extension もあるが、⼀部のフィールドでうまく クエリできない問題があって⾒送った ● データの⽐較は EXCEPT 句で実⾏できる
Slide 30
Slide 30 text
実装イメージ 異なるデータソースでも1回のクエリで結合できて便利
Slide 31
Slide 31 text
4 その他に想定される ユースケース
Slide 32
Slide 32 text
データの検証‧スクリプト内での利⽤ ● レコードの⼀意性のチェック ● テーブルの鮮度のチェック(最新レコードの⽇時と現在時刻の⽐較) dbt でも実施できるが、 dbt に依存しない⼿軽な実⾏環境として採⽤できる
Slide 33
Slide 33 text
データの前処理による料⾦コストの削減 ● ⽣データをDWHにロードしてからデータを加⼯する ELT パターンが主流 ○ ⼤規模になるにつれて Transform のクエリコストがかさみがち
Slide 34
Slide 34 text
データの前処理による料⾦コストの削減 ● DuckDB を使うと安価なコンピュータ上でデータの前処理や結合をしてから DWHにロードする構成が取れる ○ 例)⼤量のログデータから分析対象だけWHEREで絞ってDWHにロードする ○ 例)DWHはBI⽤のマート層だけ保持するようにして、それより前は全部DuckDB にやらせる
Slide 35
Slide 35 text
ひとりアナリストのデータ基盤として ● データの管理と分析を1名で⾏っている場合は DuckDB の⼿軽さがフィットしそう ○ 分析チームの⽴ち上げフェーズなど ● データの管理者と分析者が分かれたり、複数⼈で分析を⾏うようになると コラボレーションのハードルが⼀気に⾼くなる ● この場合、DuckDB は「爆速なExcel」といった認識で使うのが良さそう ○ その場限りのローカル分析環境として
Slide 36
Slide 36 text
5 まとめ
Slide 37
Slide 37 text
まとめ ● DuckDB を使うと、データの置き場所や形式を問わずクエリできる ○ 場所や形式を横断したクエリもサクッと実⾏できる ● ガバナンスやコラボレーションを意識した使い⽅は現状難しい ○ 分析⽬的で広く社内で使ってもらうのにはハードルがある ● 永続性を求めないケースでの相性がよい ○ オブジェクトストレージへのクエリエンジン ○ データの前処理や検証
Slide 38
Slide 38 text
https://hrmos.co/pages/timee/jobs/1682251404118319115 データ基盤を通して、プロダクトと組織の成⻑を⼀緒に⽀えましょう! We're hiring!