

DuckDB実践入門 PCで使える高速で快適なデータ分析用DB―基本からエコシステム活用まで
3,740円
(3,400円+税)
【注意】本書のEPUB版は固定レイアウト型になっております。文字の大きさの変更や検索、引用などはお使いいただけません。画面の大きい端末でご利用ください。
関連サイト
本書の関連ページが用意されています。
内容紹介
ローカルで大規模データを高速分析! 画期的データベースの使い方を包括的に解説。
従来のデータ分析ツールはコストが高く、個人や小規模ユーザーには導入・運用が難しい面がありました。DuckDBは「分析処理用SQLite」とも言える画期的なデータベースです。
データをメモリに保存するインメモリDBで、ローカルでギガバイト級データを高い性能で処理できます。主要なOS上で動作、多様なデータソースに対応、手軽に分析を開始できます。
本書は、DuckDBの基本的な使い方から、高度なデータ分析手法までを取り上げています。まずは、コマンドラインでの操作、Pythonエコシステムとのシームレスな統合によるクエリの実行、そしてSQLを用いた効率的な分析タスクの手法を解説。データパイプラインの構築についても掘り下げ、実践的な知識を提供します。
さらに、クラウド上でDuckDBを利用できるMotherDuck、サーバーレス分析プラットフォームについても紹介。大規模データセットを扱う上でのパフォーマンスの考慮事項や、データアプリケーションの構築とデプロイも解説し、DuckDBを最大限に活用するためのノウハウを多数掲載。
※本書は『DuckDB in Action』の翻訳書です。
書誌情報
- 著者: Mark Needham, Michael Hunger, Michael Simons(著), 設樂 洋爾(訳)
- 発行日: 2025-08-20 (紙書籍版発行日: 2025-08-20)
- 最終更新日: 2025-08-20
- バージョン: 1.0.0
- ページ数: 408ページ(PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: インプレス
対象読者
データエンジニア、データサイエンティスト、開発者。 データ分析基盤を整備することなく、すでに手元にある構造化データを効率的に分析したい、と考えている人たち。コマンドラインツールに慣れ親しんでいて、Pythonについてもある程度の知識があるとよい。
著者について
Mark Needham

オンライン分析処理データベースDBClickHouseのプロダクトマーケティングエンジニア。データインフラ分野で10年間の業務経験があり、グラフデータベースのNeo4j、リアルタイム分析プラットフォームのApache Pinotに取り組んできた。また、個人的な活動として15年間、ソフトウェアに関するブログを執筆、markhneedham.comで公開。
Michael Hunger

35年以上にわたりソフトウェア開発に情熱を注いでいる。直近の14年間は、グラフデータベースのNeo4jにおいて製品イノベーションと開発者向け製品戦略の責任者などを務める。また、Java技術の発展に貢献している人物としてJava Championsに選出されている。個人のブログサイトはjexp.de。
Michael Simons

Neo4jのシニアスタッフソフトウェアエンジニア。Neo4jのJavaエコシステム全体への統合で重要な役割を果たしている。20年以上にわたりプロの開発者として活動。Java Championsにも選出されている。著書に『Spring Boot 2』、共著書に『arc42 by Example』がある。個人のブログサイトはinfo.michael-simons.eu。
設樂 洋爾

1979年札幌生まれ、札幌育ち。北海道大学大学院情報科学研究科コンピュータサイエンス専攻博士後期課程を修了。株式会社えにしテック共同創業者・CTO。訳書に『Go言語でつくるインタプリタ』(オライリージャパン)がある。
目次
序文
まえがき
- 謝辞
- 本書について
- 著者について
- 訳者まえがき
目次
第1章 DuckDB入門
- 1.1 DuckDBとは何か?
- 1.2 DuckDBに注目すべき理由
- 1.3 いつDuckDBを使うべきか?
- 1.4 いつDuckDBを使うべきではないか?
- 1.5 ユースケース
- 1.6 DuckDBはどこに適しているか?
- 1.7 データ処理フローのステップ
- 1.7.1 データ形式とソース
- 1.7.2 データ構造
- 1.7.3 SQLの開発
- 1.7.4 結果の利用と処理
- 1.8 まとめ
第2章 DuckDBを使い始める
- 2.1 サポートしている環境
- 2.2 DuckDB CLIをインストールする
- 2.2.1 macOS
- 2.2.2 LinuxとWindows
- 2.3 DuckDB CLIを使う
- 2.3.1 SQL文
- 2.3.2 ドットコマンド
- 2.3.3 CLIの引数
- 2.4 DuckDBの拡張システム
- 2.5 CSVファイルをDuckDB CLIで解析する
- 2.5.1 結果モード
- 2.6 まとめ
第3章 SQLクエリの実行
- 3.1 SQLの簡単なおさらい
- 3.2 エネルギー生産の分析
- 3.2.1 データセットのダウンロード
- 3.2.2 ターゲットのスキーマ
- 3.3 データ定義言語クエリ
- 3.3.1 CREATE TABLE文
- 3.3.2 ALTER TABLE文
- 3.3.3 CREATE VIEW文
- 3.3.4 DESCRIBE文
- 3.4 データ操作言語クエリ
- 3.4.1 INSERT文
- 3.4.2 データのマージ
- 3.4.3 DELETE文
- 3.4.4 SELECT文
- 3.5 DuckDB固有のSQL拡張
- 3.5.1 SELECTの取り扱い
- 3.5.2 名前で挿入する
- 3.5.3 どこからでもエイリアスにアクセスする
- 3.5.4 関連するすべての列によるグループ化と並べ替え
- 3.5.5 データのサンプリング
- 3.5.6 オプションパラメータを持つ関数
- 3.6 まとめ
第4章 高度な集約とデータ分析
- 4.1 データ取り込み時の事前集計
- 4.2 データを要約する
- 4.3 サブクエリ
- 4.3.1 式としてのサブクエリ
- 4.4 グループ化セット
- 4.5 ウィンドウ関数
- 4.5.1 パーティションの定義
- 4.5.2 フレーミング
- 4.5.3 名前付きウィンドウ
- 4.5.4 パーティション内の前後の行にアクセスする
- 4.6 WHERE句の外の条件とフィルタリング
- 4.6.1 HAVING句の使用
- 4.6.2 QUALIFY句の使用
- 4.6.3 FILTER句の使用
- 4.7 PIVOT文
- 4.8 ASOF JOINの使用
- 4.9 テーブル関数の使用
- 4.10 LATERAL JOINの使用
- 4.11 まとめ
第5章 永続化なしのデータ探索
- 5.1 なぜデータを永続化せずにデータベースを使うのか
- 5.2 ファイルタイプとスキーマの推論
- 5.2.1 CSVの解析について
- 5.3 JSONの入れ子(ネスト)構造の解体
- 5.4 CSVからApache Parquetへの変換
- 5.5 Parquetファイルの分析とクエリ
- 5.6 SQLiteや他のデータベースのクエリ
- 5.7 Excelファイルの操作
- 5.8 まとめ
第6章 Pythonエコシステムとの統合
- 6.1 始め方
- 6.1.1 Pythonパッケージのインストール
- 6.1.2 データベースコネクションを開く
- 6.2 リレーショナルAPIの使用
- 6.2.1 Python APIを使ったCSVデータの取り込み
- 6.2.2 クエリの組み立て
- 6.2.3 SQLクエリ
- 6.3 pandasデータフレームのクエリ
- 6.4 ユーザー定義関数
- 6.5 Apache ArrowとPolarsとの相互運用性
- 6.6 まとめ
第7章 MotherDuck-クラウド上のDuckDB
- 7.1 MotherDuckの紹介
- 7.1.1 仕組み
- 7.1.2 MotherDuckを使用する理由
- 7.2 MotherDuckの始め方
- 7.2.1 UI経由でのMotherDuckの使用
- 7.2.2 トークンベースの認証を使用してDuckDBをMotherDuckに接続する
- 7.3 MotherDuckを最大限に活用する
- 7.3.1 MotherDuckへのデータベースのアップロード
- 7.3.2 MotherDuckでデータベースを作成する
- 7.3.3 データベースの共有
- 7.3.4 S3シークレットの管理とS3バケットからのデータのロード
- 7.3.5 データ取り込みとMotherDuckの使用を最適化する
- 7.3.6 AIを使用したクエリ
- 7.3.7 インテグレーション
- 7.4 まとめ
第8章 DuckDBでデータパイプラインを構築
- 8.1 データパイプラインとDuckDBの役割
- 8.2 dltを使ったデータ取り込み
- 8.2.1 サポートされているソースのインストール
- 8.2.2 パイプラインの構築
- 8.2.3 パイプラインのメタデータを探る
- 8.3 dbtによるデータ変換とモデリング
- 8.3.1 dbtプロジェクトのセットアップ
- 8.3.2 ソースを定義する
- 8.3.3 モデルを使った変換の記述
- 8.3.4 変換とパイプラインのテスト
- 8.3.5 すべてのCSVファイルを変換する
- 8.4 Dagsterによるデータパイプラインのオーケストレーション
- 8.4.1 アセットの定義
- 8.4.2 パイプラインの実行
- 8.4.3 パイプライン内の依存関係を管理する
- 8.4.4 アセットにおける高度な計算
- 8.4.5 MotherDuckへのアップロード
- 8.5 まとめ
第9章 データアプリケーションの構築とデプロイ
- 9.1 Streamlitを使用したカスタムデータアプリケーションの構築
- 9.1.1 Streamlitとは何か
- 9.1.2 アプリの構築
- 9.1.3 Streamlitコンポーネントの使用
- 9.1.4 plot.lyを使用したデータの可視化
- 9.1.5 コミュニティクラウドにアプリをデプロイする
- 9.2 Apache Supersetを使用したBIダッシュボードの構築
- 9.2.1 Apache Supersetとは
- 9.2.2 Supersetのワークフロー
- 9.2.3 最初のダッシュボードの作成
- 9.2.4 SQLクエリからデータセットを作成する
- 9.2.5 ダッシュボードのエクスポートとインポート
- 9.3 まとめ
第10章 大規模データセットのためのパフォーマンスの考慮事項
- 10.1 Stack Overflowデータセット全体の読み込みとクエリ
- 10.1.1 データダンプと抽出
- 10.1.2 データモデル
- 10.1.3 CSVファイルデータの探索
- 10.1.4 DuckDBへのデータのロード
- 10.1.5 大規模なテーブルに対する高速な探索クエリ
- 10.1.6 平日の投稿
- 10.1.7 タグにenumを使用する
- 10.2 クエリのプランと実行
- 10.2.1 プランナーと最適化
- 10.2.2 ランタイムとベクトル化
- 10.2.3 ExplainとExplain Analyzeによるクエリプランの可視化
- 10.3 Stack OverflowデータのParquetへのエクスポート
- 10.4 Parquetファイルからニューヨークタクシーデータセットを探索する
- 10.4.1 S3アクセスのための認証情報の設定
- 10.4.2 ファイルタイプの自動推論
- 10.4.3 Parquetスキーマの探索
- 10.4.4 ビューの作成
- 10.4.5 データの分析
- 10.4.6 タクシーデータセットの活用
- 10.5 まとめ
第11章 本書のまとめ
- 11.1 本書で学んだこと
- 11.2 DuckDBの今後の安定版
- 11.3 カバーしきれなかった領域
- 11.4 さらに学ぶには
- 11.5 DuckDBによるデータエンジニアリングの未来