データエンジニアリング領域におけるDuckDBのユースケース
by
chanyou0311
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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!