Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データエンジニアリング領域におけるDuckDBのユースケース

chanyou0311
February 26, 2025

 データエンジニアリング領域におけるDuckDBのユースケース

「DuckDBの魅力解剖!〜現場から見る活用術とその可能性〜」の登壇資料です。
https://findy.connpass.com/event/343059/

chanyou0311

February 26, 2025
Tweet

More Decks by chanyou0311

Other Decks in Technology

Transcript

  1. Yu Nakamura - chanyou • スタートアップでデータエンジニアとして交通データ分析基盤 の構築‧運⽤を経験 • その後、株式会社タイミーの DRE

    チームにジョイン データ基盤の構築‧運⽤に注⼒ • 最近はデータ基盤における Platform Engineering に関⼼があり ます • 広島在住。趣味はおうち Kubernetes クラスタ • YAPC::Hiroshima 2024 のスタッフなど
  2. タイミーの実績 スキマ バイト No.1 ※1 ※2 [調査⽅法]インターネット調査 [調査期間]2025年1⽉31⽇〜2025年2⽉4⽇ [調査概要]スキマバイトアプリサービスの 実態調査

    [調査委託先]株式会社マクロミル ※3 2024年12⽉時点 ※4 2024年12⽉時点 利⽤率 ‧リピート率 ※1 ※2 導⼊事業者数 159,000企業 ワーカー数 1,000万⼈ ※4 ※3
  3. クライアントAPIが充実 • CLI • C • Java • Go •

    Node.js • Python • R • WebAssembly 他にも Dart, Rust, Ruby などのクライアントAPIも公開されている
  4. Python の場合 DataFrame と相互変換が可能 • クエリ結果を Pandas や Polars の

    DataFrame に変換できる • DataFrame に対して DuckDB でクエリを実⾏することも可能 https://duckdb.org/docs/clients/python/overview
  5. 外部データソースの読み書きに対応 • PostgreSQL や MySQL といった RDBMS に直接クエリを実⾏できる • CSV,

    Parquet, Delta, Iceberg といったファイルにクエリを実⾏できる ◦ ローカル以外に S3, GCS, Blob Storage などのオブジェクトストレージに 直接クエリを実⾏できる https://duckdb.org/docs/extensions/httpfs/s3api
  6. DuckDB の Good な点 • 🚀 ⼤量データでも⾼いパフォーマンスで実⾏できる • 🧰 幅広いデータ形式の読み込みに対応している

    • 💰 データ量に依存したクエリ料⾦がかからない • 🤝 dbt アダプタなど、周辺エコシステムとの親和性が⾼い
  7. DuckDB の More な点 • 👮 きめ細かなアクセス制御‧監査ログの取得が難しい • 💥 DuckDB

    のデータベースファイルを SSoT として運⽤しようとすると、 途端に破綻する
  8. 💥 SSoT として運⽤しようとすると、途端に破綻する • ⽇々更新されるデータベースファイルをリモートで保持する必要がある ◦ クライアントでクエリを実⾏するには、ダウンロードが必要 ◦ 定期的に pull

    しないとクエリ結果が変わってしまう • 分析結果を他⼈に共有しようとすると、さらに煩雑に… ◦ ファイルを共有するか、リモートのファイルから再現する丁寧なクエリを⽤意 するか • 前者を取った場合、XXX分析結果_20250227_最新版.duckdb といったファイルが⽣ まれ、統制の効かないデータ基盤に…😱
  9. オブジェクトストレージへのクエリエンジン • オブジェクトストレージに Parquet や Iceberg 形式でデータを保持しておいて、 DuckDB でクエリを実⾏する •

    必要に応じてクエリ結果をオブジェクトストレージに書き戻すこともできる • 類似ソリューション ◦ AWS Athena や BigQuery Omni など ▪ 🦆 クラウドにロックインされず、どこでも実⾏できる ◦ Pandas などの DataFrame ▪ 🦆 Python 実⾏環境が不要で、⼿軽に実⾏できる
  10. データの⽐較⽅法 • S3 のファイルの読み込みは read_parquet() 関数ですぐ読み込める • BigQuery はロード後のテーブルを GCS

    に Parquet 形式でエクスポートして から read_parquet() で読み込む ◦ DuckDB から BigQuery に直接クエリできる Community Extension もあるが、⼀部のフィールドでうまく クエリできない問題があって⾒送った • データの⽐較は EXCEPT 句で実⾏できる
  11. データの前処理による料⾦コストの削減 • ⽣データをDWHにロードしてからデータを加⼯する ELT パターンが主流 ◦ ⼤規模になるにつれて Transform のクエリコストがかさみがち •

    DuckDB を使うと安価なコンピュータ上でデータの前処理や結合をしてから DWHにロードする構成が取れる ◦ 例)⼤量のログデータから分析対象だけWHEREで絞ってDWHにロードする ◦ 例)DWHはBI⽤のマート層だけ保持するようにして、それより前は全部DuckDB にやらせる • dbt-duckdb を使うと⽐較的容易に実現できそう