以下の内容はhttps://kazuhira-r.hatenablog.com/entry/2025/10/18/210033より取得しました。


Ubuntu Linux 24.04 LTSにDuckDBをインストールしてみる

これは、なにをしたくて書いたもの?

前々からちょっと気になっていた、DuckDBを少し使ってみようと思いまして。

今回はUbuntu Linux 24.04 LTSにインストールしてみます。

DuckDB

DuckDBのWebサイトはこちら。

DuckDB – An in-process SQL OLAP database management system

GitHubリポジトリーはこちら。

GitHub - duckdb/duckdb: DuckDB is an analytical in-process SQL database management system

DuckDBとはなにか?ですが、ドキュメントを見ても説明そのものは書かれていない気がしますね…。

GitHubにはあったので、引用します。

DuckDBは高性能な分析データベースシステムです。高速、信頼性、移植性、そして使いやすさを重視して設計されています。多数の機能の
サポートや拡張機能もあるようです。

DuckDB is a high-performance analytical database system. It is designed to be fast, reliable, portable, and easy to use. DuckDB provides a rich SQL dialect with support far beyond basic SQL. DuckDB supports arbitrary and nested correlated subqueries, window functions, collations, complex types (arrays, structs, maps), and several extensions designed to make SQL easier to use.

GitHub - duckdb/duckdb at v1.4.1

スタンドアロンで動作するCLIアプリケーション、Python、R、Java、Wasmなどのクライアントもあり、pandasなどとも統合可能です。

DuckDB is available as a standalone CLI application and has clients for Python, R, Java, Wasm, etc., with deep integrations with packages such as pandas and dplyr.

なぜDuckDBなのか?というページは読んでおくとよさそうです。

Why DuckDB – DuckDB

特徴はこちら。

  • シンプル
    • 外部依存関係なし
    • サーバーソフトウェアではなく、ホスト側に組み込まれて動作するアプリケーション
  • ポータブル
    • 主要なOSで実行可能
    • リソースの限られた環境から、100コア以上のCPUやテラバイトのメモリーを持つ環境でも導入可能
  • 機能が豊富
  • 高速
  • 拡張機能
  • 無料で利用可能
    • MITライセンス

ドキュメントはこちら。

Documentation – DuckDB

ひとまず使ってみて、どういうものなのか感覚を掴んでいってみましょうか。

環境

今回の環境はこちら。Ubuntu Linux 24.04 LTSです。

$ uname -srvmpio
Linux 6.8.0-85-generic #85-Ubuntu SMP PREEMPT_DYNAMIC Thu Sep 18 15:26:59 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
vagrant@server:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.3 LTS
Release:        24.04
Codename:       noble


$ uname -srvmpio
Linux 6.8.0-85-generic #85-Ubuntu SMP PREEMPT_DYNAMIC Thu Sep 18 15:26:59 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

DuckDBをインストールする

LinuxでのDuckDBのインストール方法はこちら。今回はCLIを対象としていますが、各種プログラミング言語向けの話は今回は置いておきます。

DuckDB Installation(platofrmはLinux、環境はCLI)

インストール方法は3種類あり、curlとsh、Dockerイメージ、バイナリーになります。

curlとshでインストールしてみます。

$ curl https://install.duckdb.org | sh

でも、よく見るとバイナリーをダウンロードしてきてインストールしているのと同じみたいですね。

https://install.duckdb.org/v1.4.1/duckdb_cli-linux-amd64.gz

*** DuckDB Linux/MacOS installation script, version 1.4.1 ***


         .;odxdl,
       .xXXXXXXXXKc
       0XXXXXXXXXXXd  cooo:
      ,XXXXXXXXXXXXK  OXXXXd
       0XXXXXXXXXXXo  cooo:
       .xXXXXXXXXKc
         .;odxdl,


######################################################################## 100.0%

Successfully installed DuckDB binary to /home/user/.duckdb/cli/1.4.1/duckdb
  with a link from                      /home/user/.duckdb/cli/latest/duckdb

Hint: Append the following line to your shell profile:
export PATH='/home/user/.duckdb/cli/latest':$PATH


To launch DuckDB now, type
/home/user/.duckdb/cli/latest/duckdb

ひとまず以下を.bashrcに追記して、シェルを再度起動。

export PATH='/home/user/.duckdb/cli/latest':$PATH

インストールされましたね。

$ duckdb --version
v1.4.1 (Andium) b390a7c376

オプションを見てみましょう。

$ duckdb --help
Usage: duckdb [OPTIONS] FILENAME [SQL]
FILENAME is the name of a DuckDB database. A new database is created
if the file does not previously exist.
OPTIONS include:
   -ascii               set output mode to 'ascii'
   -bail                stop after hitting an error
   -batch               force batch I/O
   -box                 set output mode to 'box'
   -column              set output mode to 'column'
   -cmd COMMAND         run "COMMAND" before reading stdin
   -c COMMAND           run "COMMAND" and exit
   -csv                 set output mode to 'csv'
   -echo                print commands before execution
   -f FILENAME          read/process named file and exit
   -init FILENAME       read/process named file
   -[no]header          turn headers on or off
   -help                show this message
   -html                set output mode to HTML
   -interactive         force interactive I/O
   -json                set output mode to 'json'
   -line                set output mode to 'line'
   -list                set output mode to 'list'
   -markdown            set output mode to 'markdown'
   -newline SEP         set output row separator. Default: '\n'
   -no-stdin            exit after processing options instead of reading stdin
   -nullvalue TEXT      set text string for NULL values. Default 'NULL'
   -quote               set output mode to 'quote'
   -readonly            open the database read-only
   -s COMMAND           run "COMMAND" and exit
   -safe                enable safe-mode
   -separator SEP       set output column separator. Default: '|'
   -storage-version V   database storage compatibility version to use. Default: 'v0.10.0'
   -table               set output mode to 'table'
   -ui                  launches a web interface using the ui extension (configurable with .ui_command)
   -unredacted          allow printing unredacted secrets
   -unsigned            allow loading of unsigned extensions
   -version             show DuckDB version

ちなみにDuckDBはシングルバイナリーみたいですね。

$ ll ~/.duckdb/cli/latest
lrwxrwxrwx 1 xxxxx xxxxx 31 10月 18 20:00 /home/vagrant/.duckdb/cli/latest -> /home/vagrant/.duckdb/cli/1.4.1/


$ ll ~/.duckdb/cli/1.4.1
合計 55512
drwxrwxr-x 2 xxxxx xxxxx     4096 10月 18 20:00 ./
drwxrwxr-x 3 xxxxx xxxxx     4096 10月 18 20:00 ../
-rwxrwxr-x 1 vagrant vagrant 56833496 10月 18 20:00 duckdb*

Getting Startedをやってみる

ひとまずGetting Startedをやってみます。

Command Line Client – DuckDB

基本的な実行方法は以下になるようです。

$ duckdb ⟨OPTIONS⟩ ⟨FILENAME⟩

Command Line Client / Usage

そして、起動時にファイル名を指定しない場合はインメモリーデータベース、指定した場合は永続化したデータベースを使うようです。

## インメモリーデータベース
$ duckdb
DuckDB v1.4.1 (Andium) b390a7c376
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
D


$ duckdb my_database.duckdb
DuckDB v1.4.1 (Andium) b390a7c376
Enter ".help" for usage hints.
D

Command Line Client / Usage / In-Memory vs. Persistent Database

プロンプトはDなんですね。

D select 'hello';
┌─────────┐
│ 'hello' │
│ varchar │
├─────────┤
│ hello   │
└─────────┘


D select * from generate_series(5);
┌─────────────────┐
│ generate_series │
│      int64      │
├─────────────────┤
│               0 │
│               1 │
│               2 │
│               3 │
│               4 │
│               5 │
└─────────────────┘

ちなみに補完が効きます。

Command Line Client / Usage / Editor Features

CLIでは.で始まるコマンドが使えるようです。いくつか試してみます。

Command Line Client / Usage / Dot Commands

ファイルからのSQLの読み込み。

select_example.sql

select *
from generate_series(5);

.readというコマンドで読み込むようです。

D .read select_example.sql
┌─────────────────┐
│ generate_series │
│      int64      │
├─────────────────┤
│               0 │
│               1 │
│               2 │
│               3 │
│               4 │
│               5 │
└─────────────────┘

.modeで出力モードの変更。

D .mode json
D .read select_example.sql
[{"generate_series":0},
{"generate_series":1},
{"generate_series":2},
{"generate_series":3},
{"generate_series":4},
{"generate_series":5}]


D .mode csv
D .read select_example.sql
generate_series
0
1
2
3
4
5


D .mode markdown
D .read select_example.sql
| generate_series |
|----------------:|
| 0               |
| 1               |
| 2               |
| 3               |
| 4               |
| 5               |

デフォルトはduckboxというモードのようです。

D .mode duckbox
D .read select_example.sql
┌─────────────────┐
│ generate_series │
│      int64      │
├─────────────────┤
│               0 │
│               1 │
│               2 │
│               3 │
│               4 │
│               5 │
└─────────────────┘

非対話形式での実行。

Command Line Client / Non-Interactive Usage

SQLファイルをリダイレクトで読み込ませる場合。

$ duckdb < select_example.sql
┌─────────────────┐
│ generate_series │
│      int64      │
├─────────────────┤
│               0 │
│               1 │
│               2 │
│               3 │
│               4 │
│               5 │
└─────────────────┘

SQLを直接渡す場合。

$ duckdb :memory: 'select * from generate_series(5)'
┌─────────────────┐
│ generate_series │
│      int64      │
├─────────────────┤
│               0 │
│               1 │
│               2 │
│               3 │
│               4 │
│               5 │
└─────────────────┘

第1引数はデータベースで、永続化したデータベースを使わない場合は:memoryを指定するようです。

というか、これでもいいんですよね。

$ echo 'select * from generate_series(5)' | duckdb
┌─────────────────┐
│ generate_series │
│      int64      │
├─────────────────┤
│               0 │
│               1 │
│               2 │
│               3 │
│               4 │
│               5 │
└─────────────────┘

これでもよさそうです。

$ duckdb -c 'select * from generate_series(5)'
┌─────────────────┐
│ generate_series │
│      int64      │
├─────────────────┤
│               0 │
│               1 │
│               2 │
│               3 │
│               4 │
│               5 │
└─────────────────┘

CSVファイルの作成。

$ duckdb -c "copy (select 42 as woot union all select 43 as woot) to 'test.csv' (header);"

test.csv

woot
42
43

標準入力から読み取ってみます。

$ cat test.csv | duckdb -c "select * from read_csv('/dev/stdin')"
┌───────┐
│ woot  │
│ int64 │
├───────┤
│    42 │
│    43 │
└───────┘

ちなみにファイルからも読めますが。

$ duckdb -c "select * from read_csv('test.csv')"
┌───────┐
│ woot  │
│ int64 │
├───────┤
│    42 │
│    43 │
└───────┘

JSONで出力。

$ duckdb -json -c "select * from read_csv('test.csv')"
[{"woot":42},
{"woot":43}]

標準入力から読み取って、標準出力へ書き出し。

$ cat test.csv | duckdb -c "copy (select * from read_csv('/dev/stdin')) to '/dev/stdout' with (format csv, header)"
woot
42
43

コマンド的にも使えそうですね。

その他

DuckDBはCSVJSON、Parquetなど、様々なファイルフォーマットを扱えるようです。

Importing Data – DuckDB

また拡張機能もあり、Amazon S3MySQLPostgreSQLとインテグレーションしたりもできるようです。

Extensions – DuckDB

Core Extensions – DuckDB

コア拡張機能のリストを見ているだけでもおもしろいです。

おわりに

DuckDBをUbuntu Linux 24.04 LTSにインストールしてみました。

本当にインストールして少し動かしただけなのですが、ドキュメントを見ているとおもしろそうだなーと思います。

使い倒すようなエントリーをここで書くかはわかりませんが、いろいろ試していってみたいと思います。




以上の内容はhttps://kazuhira-r.hatenablog.com/entry/2025/10/18/210033より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14