Slide 1

Slide 1 text

5分でわかるDuckDB 合同勉強会 in ⼤都会岡⼭ -2024 Winter- chanyou

Slide 2

Slide 2 text

Yu Nakamura - chanyou ‧󰞵 広島在住でリモートワークしてます ‧📊 普段は事業会社でデータ基盤を作っています ‧🐍 Python とか Google Cloud とかよく使っています ‧🍓 おうち Kubernetes クラスタ ‧📢 mutable.stream という Podcast を2年くらい?

Slide 3

Slide 3 text

DuckDB 使ったことあるよ 🙋

Slide 4

Slide 4 text

DuckDB 知らない! 聞いたことあるけどよくわからない 🙋

Slide 5

Slide 5 text

DuckDB とは?

Slide 6

Slide 6 text

‧OLAP(オンライン分析処理)特化のDB Engine ‧要はめっちゃ早い ‧SQLite のようなインプロセス型のデータベース ‧⾼いポータビリティが特徴 ‧MIT ライセンスで C++ 実装

Slide 7

Slide 7 text

DuckDB の特徴 ‧シングルバイナリでセットアップが容易 ‧充実したクライアントAPI ‧豊富な外部データソースの対応と拡張機能

Slide 8

Slide 8 text

シングルバイナリでセットアップが容易 https://duckdb.org/docs/installation/?version=stable&environment=cli&platform=linux&download_method=direct&architecture=arm64

Slide 9

Slide 9 text

シングルバイナリでセットアップが容易

Slide 10

Slide 10 text

充実したクライアントAPI 公式 CLI ODBC API C C++ Java Julia 公式 Python R Rust Swift WebAssembly (Wasm) Node.js コミュニティからも C# Dart Elixir Go Ruby

Slide 11

Slide 11 text

Pythonだと ‧Pandas, Polars などの DataFrame と相互変換が可能 ‧PySpark にも対応 https://duckdb.org/docs/installation/?version=stable&environment=cli&platform=linux&download_method=direct&architecture=arm64

Slide 12

Slide 12 text

豊富な外部データソースの読み書きに対応 ‧ SQLite, PostgreSQL, MySQL などの RDBMS ‧ CSV, JSON, Parquet といったファイル これらに直接クエリできる。 https://duckdb.org/docs/data/parquet/overview.html

Slide 13

Slide 13 text

豊富な拡張機能‧コミュニティ拡張機能 ‧S3, Azure Blob Storage, GCS などのオブジェクトスト レージ上のファイルの読み書き https://duckdb.org/docs/extensions/httpfs/s3api.html

Slide 14

Slide 14 text

豊富な拡張機能‧コミュニティ拡張機能 ‧BigQuery, Google Spreadsheet の読み書き ‧地理空間関数、H3関数

Slide 15

Slide 15 text

DuckDB を取り巻くツール‧サービス ‧dbt-duckdb ‧dbt の DuckDB アダプタ ‧MotherDuck ‧フルマネージド DuckDB ‧BemiDB ‧ PostgreSQL のデータを同期して S3 に書き出す ‧ 内部で DuckDB のクエリエンジンで⾼速にクエリできる

Slide 16

Slide 16 text

DuckDB のユースケース

Slide 17

Slide 17 text

オブジェクトストレージへのクエリエンジン ‧主要なオブジェクトストレージ‧ファイル形式に対応して いて、たいていのデータが読み込める

Slide 18

Slide 18 text

オブジェクトストレージへのクエリエンジン ‧今までも Pandas などで読み込めたが、シングルバイナリ でより⼿軽にデータアクセスできる ‧Athena や BigQuery Omni のようにロックインされない

Slide 19

Slide 19 text

分散したデータを横断した前処理‧分析 ‧S3, GCSを横断したマルチクラウドな分析も可能 ‧マルチプロダクト環境でスタックが異なっても、 ストレージへの認証さえ通せばほとんど同じクエリで動く ‧組織間のデータ連携でもオブジェクトストレージが使われがち ‧そういった場⾯でも恩恵を受ける

Slide 20

Slide 20 text

スクリプト内での利⽤(データ品質保証の事例)

Slide 21

Slide 21 text

スクリプト内での利⽤(データ品質保証の事例) ‧複雑なデータテストを⾏いたい場合やデータそのものを販売し ているケースにおいて、継続的なテストが軽量に実施できる ‧インメモリモードで揮発しても問題ない

Slide 22

Slide 22 text

セルフホスト型の BI ツールへの統合 ‧アプリケーションに SQLite を組み込むアーキテクチャ ‧同じように BI ツールに DuckDB を組み込むことで、⾼速化でき そう https://superset.apache.org/

Slide 23

Slide 23 text

DuckDB の苦⼿なシーン

Slide 24

Slide 24 text

きめ細かな権限管理への対応が難しい ‧データをオブジェクトストレージに配置して、DuckDB に設定す るシークレットで権限管理する? ‧それでも⾏レベル、列レベルのセキュリティは現時点では実施 できない

Slide 25

Slide 25 text

SSoT がやりにくい ‧複数のデバイスで DuckDB ファイルを同期できない ‧ちゃんと運⽤ルールを敷かないと、どの DuckDB ファイルが最 新なのか分からなくなる ‧オブジェクトストレージを SSoT として保持して、DuckDB はク エリエンジンとして割り切って使うのがよさそう

Slide 26

Slide 26 text

頻繁に更新されるデータの同期には⼯夫が必要 ‧RDB に直接接続するのはあまりやりたくない ‧RDB に SELECT * FROM users クエリ打った結果を DuckDB テー ブルとして保存してから重い処理をさせる、とかはできる ‧定期的に RDB から fetch するのも体験が悪い ‧デイリーで S3 書き出されるファイルや国勢調査の⼩地域ごとの 結果など、更新頻度の低いデータとの相性がよさそう

Slide 27

Slide 27 text

ところで なんでアヒル?

Slide 28

Slide 28 text

Why 🦆DB? DuckDB の FAQ によると… ‧⾶べて、歩けて、泳げる、どこへでも⾏ける! ‧そして雑⾷性で何でも⾷べて、環境変化への耐性が⾼い! そんなアヒルは多⽤途で⾼耐久性を求められる DBMS のマスコッ トとして完璧 💯

Slide 29

Slide 29 text

まとめ ‧DuckDB を使うとデータの置き場所や形式を問わず、あらゆる データをサクッとクエリできる ‧⼤規模組織でデータ分析⽤途で使おうとするとガバナンス周り が⼤変だけど、前処理に限定するなどして活⽤できそう ‧すぐ使い始められるので、ぜひ試して⼀緒に知⾒交換しましょう!

Slide 30

Slide 30 text

おわり 🦆