試験公開中

このエントリーをはてなブックマークに追加

DuckDB実践入門 PCで使える高速で快適なデータ分析用DB―基本からエコシステム活用まで

インプレス

3,740円 (3,400円+税)

「分析処理用SQLite」とも言えるデータベースDuckDBの基本から解説―コマンドでの操作から始め、Python環境からの活用、SQLでの効率的な分析、データパイプライン構築へとより実践的な内容に進み、さらにクラウド上でDuckDBを提供するMotherDuck、大規模データでの性能、データアプリ構築・展開について説明。

【注意】本書の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
  • バージョン: 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によるデータエンジニアリングの未来

付録A DuckDBのクライアントAPI

付録B SQL標準に対する便利な拡張

索引

Home 書籍一覧 DuckDB実践入門 PCで使える高速で快適なデータ分析用DB―基本からエコシステム活用まで ▲ ページトップへ戻る