はじめに
現在行っている就業訓練を通じてデータエンジニアリングに興味をもったので、関連するツールや技術を調べ・学んでいます。
今回はタイトル通り、DuckDBのチュートリアルをDuckDB v1.3.1 で実行した記事です。 元々のチュートリアル記事が2023年4月の旧バージョンのため、細かい差異があったため忘備録として記載しています。
DuckDBとは
軽量なDBアプリケーション、かつOLAP(Online Analytical Processing)と呼ばれる分析用アプリケーションです。
一般的なDB、MySQLやPosgreSQLなどはOLTP(Online Transaction Proccessing)と分類され、トランザクション処理による素早く正確な記録を行うアプリケーションです。
同じDBでも分析用途のため、特性がことなるという点を理解いただければ十分です。
Zennのこちらの記事にDBとしての位置づけや機能の大まかな説明が記載されています。
ご興味ある方は参照ください。
zenn.dev
チュートリアル
実行環境
- OS : macOS Sequoia 15.7.1
- CPU: intel
- バージョン : DuckDB v1.3.1
実行場所 : CLI上で実行
チュートリアル用のデータ: Kaggle 「Netflix daily top 10」 www.kaggle.com
概要
今回行うのは以下、MotherDuck社の公式ブログのチュートリアル「DuckDB Tutorial For Beginners」です。
クラスメソッドさんが日本語に翻訳されているものもあります。日本語化されており、読みやすくなっております。 dev.classmethod.jp
チュートリアル
1. インストール
公式サイトのInstallationを参考にCLIから以下を実行します。
curl https://install.duckdb.org | sh
2. DuckDBの起動と終了コマンド
インストールが完了したら、以下のコマンドでDuckDBを呼び出します。
duckdb
以下のような画面が表示されれば、起動出来ています。

終了の際は、.quit または. exitコマンドで終了します。
.quit
.exit
終了時のコマンドと実行画面は以下のようになっています。

余談ですが、チュートリアル記事に終了コマンドが記載されていなかったためDuckDBを終了できずに5分ほど右往左往しました。終了コマンドを載せているのは私のようなうっかりさんが見た時にパニックにならないようにするためです。
3. チュートリアル用データ(CSV)をDuckDB内で読み込む
DuckDB起動後にSELECT句でCSVを読み込むことが出来ます。
パスとファイル名は自身の環境に沿った形で以下のコマンドで実行できます。
select * from read_csv('path/to/your/file.csv')
実行するとこのように表示されます。

4. CSVデータをDuckDBのテーブルとして取り込む
SQLのCREATEコマンドを使って、CSVをテーブルとして取り込む機能もあります。 取り込んだあとは、show tablesコマンドでテーブルの存在が確認可能になります。 あとは通常のSQL同様にテーブルの中身をselectで取得できるようになっています。
CREATE TABLE mytable AS SELECT * FROM read_csv_auto('path/to/your/file.csv');
show tables;
select * from mytable;
上記のコマンドを実行すると画像のようにテーブル作成・selectでのデータ取得が出来ています。

5. CSVデータをコピー、ファイル形式を変更
今回のチュートリアルで、このCOPYコマンドの使い方が変わっていたので注意です。 現在のDuckDB v1.3.1で実行可能なCOPYコマンドは以下のように実行可能です。 オリジナルの記事では、COPY直後にパスとファイル名を指定していますが、現在利用できないので注意です。
-- 1. テーブルがある場合
COPY mytable TO 'output.csv' (FORMAT 'csv');
COPY mytable TO 'output.parquet' (FORMAT 'parquet');
-- 2. クエリ結果から直接
COPY (SELECT * FROM mytable) TO 'output.csv' (FORMAT 'csv');
COPY (SELECT * FROM mytable) TO 'output.parquet' (FORMAT 'parquet');
-- 3. ファイルからテーブルにロードしたあとエクスポート
CREATE TABLE mytable AS SELECT * FROM read_csv_auto('path/to/your/file.csv');
COPY mytable TO 'output.csv' (FORMAT 'csv');
COPY mytable TO 'output.parquet' (FORMAT 'parquet');

バージョンが変わっており、エラー連発してので大変焦りました。 COPYコマンドに関する公式ドキュメントも貼っておきます。 duckdb.org
6. 変換したParqeutファイルを読み込む
CSVファイルと同様にパスを指定すれば、Parquetも読み込めます。 SELECT句で読み込めると分析が容易になりそうで良いですね。
SELECT * FROM read_parquet('path/to/your/file.parquet');
実行すると以下の画像のようになっています。

まとめ
今回はDuckDBのチュートリアルを2025年11月環境で実行したという記事でした。
アプリケーションの終了方法がわからなくて焦る、バージョンが更新されコマンドの文法が変わるなど焦りました。
とはいえ、触れた所感としては、SQLiteのような軽量なDBとしてCSV等を利用して分析できるのは手軽と感じました。
分析というとBIやクラウドサービスを想定していたので、ローカルで試しながらという方法がこれで取れるかも、と希望が湧いています。 データの加工もSQLで行って、分析と一気通貫でできそうな可能性を感じました。
また、クラウドサービスとの連携やデータレイク、データウェアハウスといったデータ保存領域にも近いアプリケーションであるため、色々と遊ぶことはできそうです。
拡張機能を通じて可視化などもできると聞き及んでいるため、深堀りしたいアプリケーションです。