Slide 1

Slide 1 text

© Techtouch, Inc. 15分で学ぶDuckDBの可愛い使い方 DuckDBの最近の更新 テックタッチ株式会社 木村 誠(@not_rogue)

Slide 2

Slide 2 text

目次 ● 自己(&会社)紹介 ● 15秒でわかるDuckDB(すでに説明されてたら飛ばします) ● DuckDB 最近の更新 ○ メディア・イベント/ユースケース ○ 最近のリリースから気になる機能をお話 ○ 拡張

Slide 3

Slide 3 text

3 © Techtouch, Inc. 自己紹介 ● 木村誠(Zennとかでは@not_rogue) ● Zennで最初にDuckDBの記事書いたよ ○ 🦆🦆🦆🦆🦆🦆DuckDB入門🦆🦆🦆🦆🦆🦆 ○ 日本語で紹介したのは多分最初の方 ○ (公平性のため:日本語でもR/Arrow界隈の人で紹介してた方はいます)

Slide 4

Slide 4 text

4 © Techtouch, Inc. ドヤ顔タイム` Google Trendで見ると2023年くらいからポツポツ検索されるように my blog here

Slide 5

Slide 5 text

5 © Techtouch, Inc. 自己紹介 ● 木村誠(Zennとかでは@not_rogue) ● Zennで最初にDuckDBの記事書いたよ ○ 🦆🦆🦆🦆🦆🦆DuckDB入門🦆🦆🦆🦆🦆🦆 ○ 日本語で紹介したのは多分最初の方 ■ (公平性のため:日本語でもR/Arrow界隈の人で紹介してた方はいます) ● ちょっと前に会社のブログでも書いたよ ○ DuckDBでお手軽!データフェデレーション ○ jq的に使うのも便利だよというお話 ● DuckDBは主にファイルビュアー的に使ってるよ ○ S3にあるJSON眺めたり、ExcelとCSVを比較したり

Slide 6

Slide 6 text

15秒でわかるDuckDB (すでに説明されてたら飛ばします)

Slide 7

Slide 7 text

10 © Techtouch, Inc. 15秒でわかるDuckDB ● OLAP特化のSQLite的なデータベースだよ ○ OLAP特化=データ量が多いテーブルに(比較的)即時性はいらない・多くないクエリを実行 ● 便利なSQL構文があったり、(ある程度)大きなデータもローカルで処理できるよ ● 詳しくは↓の記事とか見てね ○ 🦆🦆🦆🦆🦆🦆DuckDB入門🦆🦆🦆🦆🦆🦆 ○ DuckDB雑紹介(1.1対応版)@DuckDB座談会 by ktz-saz

Slide 8

Slide 8 text

DuckDB 最近の話題

Slide 9

Slide 9 text

12 © Techtouch, Inc. DuckDB 最近の更新: 目的 ● 最近のDuckDB関連の(面白と思った)話題をお話 ● お話すること ○ (DuckDB本体以外の)エコシステム/コミュニティ関係のアップデート ○ 最近のリリース ○ 拡張 ● 提供したい情報 ○ あまりDuckDB知らない方 => ■ DuckDBが最近注力してる(であろう)ことから、DuckDB利用のイメージをつかんでいただく ○ DuckDB知ってる方 => ■ どれか一つくらい知らない便利情報共有できると嬉しいな ● お話しないこと ○ 個々の話題の深掘り

Slide 10

Slide 10 text

DuckDBコミュニティまわりの最近の話題 tl;dr 盛り上がってますね

Slide 11

Slide 11 text

14 © Techtouch, Inc. DuckDBコミュニティまわりの最近の話題:メディア/イベント ● DuckCon ○ 2022年から半年に一回くらい開催されてる(#1〜#6)、名前の通りDuckDBのConference ○ よくあるトピック(YouTubeに動画アップされます) ■ DuckDB Labsの人による最近の振り返り&今後の予定 ■ 利用ユーザーの事例紹介 ■ ライブラリ・エコシステム(dbtとか)の紹介 ■ 内部実装の話 ● 本が三冊出版 ○ DuckDB Up and Runing(2024) ○ DuckDB in Action(2024) ○ Getting Started with DuckDB(2024) ● 日本国内 ○ 企業のテックブログに限っても多分10〜20社くらいは書かれてそう ○ Zennでは72記事、Qiitaでは50記事 ■ なんとなくGIS・WASM・AWSのログ閲覧の記事が人気な雰囲気

Slide 12

Slide 12 text

15 © Techtouch, Inc. DuckDBコミュニティまわりの最近の話題: ● DuckCon#5のOpeningより引用

Slide 13

Slide 13 text

17 © Techtouch, Inc. DuckDBコミュニティまわりの最近の話題:Survey ● 2024後半にコミュニティでアンケートが行われてました(n>500) ○ by DuckDB Labs(contributorが何人かいたりサポート提供してる企業) ● ユーザーの利用イメージを特に掴めそうな箇所をいくつか抜粋 質問 回答 所感 動かしている環境 Laptop 87%, Server 58% データフォーマット Parquet 79%, CSV 73% JSON 42%, NDJSON(JSONL)11% NDJSON(JSONL)が意外と少ない データセットサイズ 1GB以下 12% 1~10GB 30% 10-100GB 31% 100GB-1TB 20% 数100MB~数GBかな?と思ってたので意外と多い。 (1TB規模は別々の処理の合計を答えた回答かも?) クライアント Python 73% Command Line 47% R/WASM/Java/Node.jsが10% 程度

Slide 14

Slide 14 text

18 © Techtouch, Inc. DuckDB 最近の更新: エコシステム:ユースケース 名前 ソース 概要 okta DataCouncil(ブログ) データパイプラインの一部を lambda上のDuckDBで実行 (特にSnowflakeだとtoo muchなサイズのデータ) dozzle ソースコード DockerコンテナのログをWebブラウザで閲覧できるようにするツール。 DuckDB(WASM)でログ(JSON)に対しSQLを実行できるようにしてます。 watershed DuckCon#3 GXのSaas GCSにあるParquetデータを集計(テナントあたり数百MB)。 元々PostgreSQLから以降してコスト削減 airbnb Medium メトリクスの集計 Rill ドキュメント データソース(S3とかSnowflake)からデータを取り込む、OLAP Engineとして利用(他にApache Druid/Apache Pinot/Clickhouse) (接続先のDBとしてもあり) 時雨堂 Zenn DuckDB(WASM)を使ったダッシュボード Newmo テックブログ GIS情報(GeoJSON)のブラウザでの編集(DuckDB(WASM)) IVRy テックブログ S3のファイルビュアーとして(この用途では他にもたくさん事例がありそう)

Slide 15

Slide 15 text

19 © Techtouch, Inc. DuckDB 最近の更新: エコシステム:ユースケース:Dozzleの例

Slide 16

Slide 16 text

DuckDB 最近のリリース tl;dr 便利に早くなってるよ

Slide 17

Slide 17 text

21 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース ● リリース状況 ○ https://duckdb.org/docs/dev/release_calendar.html ○ 2025/02時点最新は1.2 ■ 1.3は5月予定 ○ 大体半年に一回くらいのリリースされます ● リリースブログでよく取り上げられる話題: ○ SQL構文の拡張/利便性の改善 ○ パフォーマンス改善 ○ 読み込み対象の拡充 ○ 安定性改善 ● それぞれの話題から、(僕が好きな)DuckDB-ishな機能をいくつかご紹介します ○ DuckDBが力を入れてる箇所・人気の理由をご紹介 余談:リリースにはアヒルの学術名が付けられ、専用のアイコンも付与されます

Slide 18

Slide 18 text

22 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース:SQL構文の拡張/利便性の改善: positional join ● DuckDBが実装してるJOINいろいろ Ver JOIN 補足 outer join/inner join よく見るJOIN cross product join natural join inner join + usingのシンタックスシュガー? 0.8 semi join in + サブクエリのシンタックスシュガー? 0.8 anti join not in + サブクエリのシンタックスシュガー? 0.8 asof join 条件を満たすレコードのうち特に近いもので JOIN lateral join 0.7 positional join 後述

Slide 19

Slide 19 text

23 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース:SQL構文の拡張/利便性の改善: positional join ● 名前の通り、並び順でJOINする機能 例 a1,a2,a3,b1,b2 apple, alpine, amsterdam, brunei, bangladesh atmark, ,arigato, beijing, brussel example1.csv line_number, content 1, aiu 2, kakiku 3, sasisu example2.csv D select * from './example1.csv' positional join read_csv('./example2.csv'); ┌─────────┬─────────┬────────────┬──────────┬─────────────┬──────── ───── │ a1 │ a2 │ a3 │ b1 │ b2 │ line_number │ content │ │ varchar │ varchar │ varchar │ varchar │ varchar │ int64 │ varchar │ ├─────────┼─────────┼────────────┼──────────┼─────────────┼──────── ───── │ apple │ alpine │ amsterdam │ brunei │ bangladesh │ 1 │ aiu │ │ atmark │ │ arigato │ beijing │ brussel │ 2 │ kakiku │ │ NULL │ NULL │ NULL │ NULL │ NULL │ 3 │ sasisu │ query結果

Slide 20

Slide 20 text

24 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース: SQL構文の拡張/利便性の改善: positional join ● 名前の通り、並び順でJOINする機能 ● どんな時に嬉しい? ○ pandas(concat)や、Linuxのpasteと同じ働き ○ それらと同じく下のような場合に便利 ■ 複数のファイルが行番号(でのみ)対応するような場合 ■ 連番とかIDとか各行につける ● (order by以外では)並び順を無視するのが主流[要出典]なSQL/RDBの世界では、珍しい機能で pandasやonelinerの代替としての立場もあるDuckDBっぽい機能 ○ (余談)ClickHouseにはpaste joinという似た機能があります ● (補足)並び順とはなんぞや ○ 単一ファイル読み込み(read_json/read_csv/read_parquet)ではファイル内の順番が(原則)保存 ○ 保証される・されない場合は -> https://duckdb.org/docs/sql/dialect/order_preservation.html

Slide 21

Slide 21 text

25 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース:SQL構文の拡張/利便性の改善: カラム選択系 ● カラム選択を便利にする機能が色々あります ● ”Friendlier SQL”を紹介してる記事があるので、そちらもご参照ください ○ https://duckdb.org/docs/sql/dialect/friendly_sql.html ○ https://duckdb.org/2022/05/04/friendlier-sql.html Ver リリース内容 補足 1.2 RENAME Snowflakeにもあるやつ 1.2 カラムをLIKE SELECT * LIKE ‘val%’みたいなの。COLUMNSのシンタックスシュガー 1.1 * columns構文 PythonとかTypeScriptにあるunpack(spread)と同じ役割 0.6 columns構文 カラムを正規表現(など)で指定。 ちなみにClickHouse由来 前から UNION BY NAME UNION ALLのカラム名での紐付け版。ヘッダーが異なるファイルを読む時 地味に便利 0.6(CSV) 0.9(JSON) union_by_name 複数ファイルを読む時に、各ファイルのカラムの論理和を読み込み結果のカ ラム名とする =ファイル毎にカラム名が違っても大丈夫

Slide 22

Slide 22 text

26 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース: パフォーマンス関係:CSV Readerの改善 ● CSV関係は、ほぼ毎回リリースブログに載るレベルで重視されてるようです(JSONはあまりない) ● 彼らがCSVを重視する理由は、インタビューのPodcastなどで説明 ○ ユースケースの一つ ○ データベースで最初の方にやることなので、そこでストレスを生みたくない Ver リリース内容 補足 1.2 new algorithm unlimited row length 新しいアルゴリズムで 15%改善 1.1 parallel union_by_name デフォルトではサンプルしたファイルでカラムを決定しますが、 union_by_name=trueでは複数ファイルのカラムを使います。その高速 化 0.10 CSV Reader Rework むっちゃ早くなったよ!( Parallel State Machine) 0.6 Parallel CSV Loading 複数ファイル読み込みを並列実行

Slide 23

Slide 23 text

27 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース: パフォーマンス関係:CSV Readerの改善 ● 新旧バージョンでの高速化を確認してみる(ダミーデータを使用。正確な測定ではないのはご注意) # read_csvを使ってcountするSQLをファイルに記載 > cat count.sql .timer on select count(1) from read_csv('people-2000000.csv', header=False, columns={'Index': 'VARCHAR', 'User Id': 'VARCHAR', 'First Name': 'VARCHAR', 'Last Name': 'VARCHAR', 'Sex': 'VARCHAR', 'Email': 'VARCHAR', 'Phone': 'VARCHAR', 'Data of birth': 'VARCHAR', 'Job Title': 'VARCHAR'}) > cat count.sql | duckman run v0.5.0 ┌──────────┐ │ count(1) │ ├──────────┤ │ 2000001 │ └──────────┘ Run Time (s): real 0.609 user 0.549122 sys 0.040836 0.5では200万行のカウントに0.6ms程度

Slide 24

Slide 24 text

28 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース: パフォーマンス関係:CSV Readerの改善 ● 新旧バージョンでの高速化を確認してみる(ダミーデータを使用。正確な測定ではないのはご注意) time wc -l people-2000000.csv 2000001 people-2000000.csv ________________________________________________________ Executed in 109.87 millis fish external usr time 85.72 millis 0.56 millis 85.16 millis sys time 22.70 millis 1.27 millis 21.42 millis wc -lでカウントすると110から130ms程度です(ちなみにpandasだと秒のオーダー) (DuckDBはCSVとして扱うために追加の処理を行ってる、時間の計測方法が違うので同条件ではないことは注意) > cat count.sql | duckman run v1.2.0 ┌────────────────┐ │ count(1) │ │ int64 │ ├────────────────┤ │ 2000001 │ │ (2.00 million) │ └────────────────┘ Run Time (s): real 0.112 user 0.582470 sys 0.058470 1.2では200万行のカウントに110ms程度

Slide 25

Slide 25 text

29 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース: パフォーマンス関係:CSV Readerの改善 ● 高速化の方法や歴史については、DuckDBのCSVについて1時間話すセミナーがあります。そちら をご参照してください ○ DSDSD31st Efficient CSV Parsing - On the Complexity of Simple Thing ■ (動画 資料) ● Parallel-State machine、その他細かいテクニック色々

Slide 26

Slide 26 text

30 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース:読み込み対象の拡充 ● 読み書き対象の拡充はリリースに頻出する話題の一つ ○ 追加されたフォーマットがどこまで何をサポートしてるかはバラバラなので、ご利用前に確認お願いします ● (DB内ではない)どこか別のところにあるデータを読むという、DuckDBのユースケース・特徴が見 て取れそう バージョン 追加されたフォーマット 1.1 DeltaLake 0.10 read_text/read_blob 0.9 iceberg 0.6 json それ以前から SQLite/PostgreSQL/Excel/MySQL/Arrow (Community)Extension avro/BigQuery/Protocol Buffers/ODBC/

Slide 27

Slide 27 text

31 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース: 安定性改善:データベースファイルの互換性 ● DuckDB自身でデータを持つ(ファイルに保存)こともできます ● 0.10.0で、DuckDBのデータベースファイルが後方互換性を持つように ● 1.0.0のリリースブログ他でも取り上げており、彼ら的には重要と思ってそうなポイント # duckmanは特定のバージョンでDuckDBを実行するラッパーです > duckman run v0.5.0 sample_files_0.5.db -c 'create or replace table t1 as select 1 as c' # 0.6で開こうとするとエラー > duckman run v0.6.0 sample_files_0.5.db -c 'select * from t1' Error: unable to open database "sample_files_0.5.db": IO Error: Trying to read a database file with version number 38, but we can only read version 39. The database file was created with an older version of DuckDB. 0.10.0以前では違うバージョンのDBを開こうとするとエラー > duckman run v0.10.0 sample_files_0.10.db -c 'create or replace table t1 as select 1 as c' > duckman run v1.2.0 sample_files_0.10.db -c 'select * from t1' ┌───────┐ │ c │ │ int32 │ ├───────┤ │ 1 │ └───────┘ 0.10.0以降では後方互換性がある(1.2で0.10のデータベースが読めてる)

Slide 28

Slide 28 text

32 © Techtouch, Inc. DuckDB 最近の更新: 最近のリリース:安定性改善:サポート ● サポートポリシーの明確化と、エンタープライズサポートの公開 ● サポートポリシー ○ マイナーなプラットフォームとか回答の約束は出来ないといったお話 ● エンタープライズサポート ○ DuckDB Labs(DuckDBの創始者が所属してる組織)がサポートしてくれる ○ 「Negotiable support volume」なので実際どこまでサポートしてくれるかは相談してみてください

Slide 29

Slide 29 text

DuckDB 拡張

Slide 30

Slide 30 text

35 © Techtouch, Inc. DuckDB 最近の更新: 拡張 ● ExtensionでDuckDBの機能を拡張することができます ● 最近の動き色々としては、DuckDBコントリビューター以外もやすいようにしたいぽい? ○ use DuckDB as a platform to build their own stuff to build extensions on, and where DuckDB kind of becomes this fabric of efficient operators and efficient data representations, all that stuff, that you can glue various extensions together. And it's all accessible from sort of a unified interface look like SQL. バージョン リリース内容 補足 1.2 C API Cでも作れるようにすることで(元々は C++)、他の言語にも対 応しやすくなったり、バージョンあげやすくなるらしい 1.1 Community Extension DuckDB Labs以外の人が拡張を頒布するリポジトリ 1.1 query/query_table 参照するテーブルを動的に変えられる (pivotのような汎用的なSQLマクロを作れるように) 0.9 DuckDB-wasm対応(一部) バージョン外 extension-template 拡張作るためのテンプレート( C++)

Slide 31

Slide 31 text

36 © Techtouch, Inc. DuckDB 最近の更新: 拡張 ● ExtensionでDuckDBの機能を拡張することができます ● おもしろそうと思った拡張を適当に紹介 ○ Community Extension/Experimentalも含むので自己責任で 名前 機能 shellfs コマンド(lsとか)の実行結果を読み書き gsheets Google Spreadsheetにアクセス duckpgq PGQ(SQL:2023のグラフクエリ拡張)の対応 mysql/postgres DuckDBからPostgreSQL/MySQLにクエリ

Slide 32

Slide 32 text

37 © Techtouch, Inc. DuckDB 最近の更新: 拡張 ● lsのコマンド結果をwhereで絞り込んでいる例 ○ 逆方向(SQL結果をパイプ経由でコマンドに)もできます # read_csvの引数がコマンド。一行目がカラム名になるのでechoをくっつけてます D select * from read_csv('echo file_name; ls |') where file_name like '%.csv'; ┌────────────────────┐ │ file_name │ │ varchar │ ├────────────────────┤ │ people-100.csv │ │ people-1000.csv │ │ people-10000.csv │ │ people-100000.csv │ │ people-1000000.csv │ │ people-2000000.csv │ │ people-500000.csv │ └────────────────────┘

Slide 33

Slide 33 text

おわりに

Slide 34

Slide 34 text

39 © Techtouch, Inc. まとめ ● DuckDBの最近のアップデートを見ていきました ○ コミュニティ・エコシステム ○ SQL構文の拡張/利便性の改善 ○ パフォーマンス改善 ○ 読み込み対象の拡充 ○ 安定性改善 ● ご紹介したリリースから、DuckDBが「便利に」「早く」「より安定して」「色々なデータを閲覧しやす い」ことを重視したデータベースであることを、感じていただければ幸いです

Slide 35

Slide 35 text

すべてのユーザーが システムを使いこなせる世界に システム導入だけで終わらせない、利活用のためのDXプラットフォーム

Slide 36

Slide 36 text

No content