この記事について
DuckDB Advent Calendar 2025 の4日目として記事を書く。内容は自分向け。
Disclamer
この記事の内容は、私個人の意見や見解であり、私が所属する組織の公式な立場、方針、意見を反映するものではありません。この記事の内容について、組織はいかなる責任も負いません。
DuckDB CLI の便利技の紹介
Dot Commands のページからいくつか便利なものを紹介する。
.sh でシェルコマンド
公式では .shell CMD ARGS... とあるが、実は .sh と省略が可能である。
.sh ls -aF などで自分はよくファイルを確認する。
カラムを全表示したい
方法1
.maxwidth {n} の指定を使う。思い切って .maxwidth 1000 ぐらいやっておくと潔い。ただし terminal 上では折り返しで非常に見ずらい。 .maxwidth 0 でコンソール幅自動描画に戻せる。
D .maxwidth 1000
D FROM duckdb_extensions() limit 2;
┌────────────────┬─────────┬───────────┬───────────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────┬───────────┬───────────────────┬───────────────────┬────────────────┐
│ extension_name │ loaded │ installed │ install_path │ description │ aliases │ extension_version │ install_mode │ installed_from │
│ varchar │ boolean │ boolean │ varchar │ varchar │ varchar[] │ varchar │ varchar │ varchar │
├────────────────┼─────────┼───────────┼───────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────┼───────────┼───────────────────┼───────────────────┼────────────────┤
│ autocomplete │ true │ true │ (BUILT-IN) │ Adds support for autocomplete in the shell │ [] │ v1.4.2 │ STATICALLY_LINKED │ │
│ aws │ false │ true │ /home/kmkm/.duckdb/extensions/v1.4.2/linux_amd64/aws.duckdb_extension │ Provides features that depend on the AWS SDK │ [] │ 55bf362 │ REPOSITORY │ core │
└────────────────┴─────────┴───────────┴───────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┴───────────┴───────────────────┴───────────────────┴────────────────┘
.maxwidth 0
方法2
.columns を実行すると列ベースで表示される
D .columns
D FROM duckdb_extensions();
┌───────────────────┬───────────┬──────────────────────┬───┬──────────────────────┬──────────────────────┐
│ Column │ Type │ Row 1 │ … │ Row 25 │ Row 26 │
├───────────────────┼───────────┼──────────────────────┼───┼──────────────────────┼──────────────────────┤
│ extension_name │ varchar │ autocomplete │ … │ ui │ vss │
│ loaded │ boolean │ true │ … │ false │ false │
│ installed │ boolean │ true │ … │ false │ false │
│ install_path │ varchar │ (BUILT-IN) │ … │ │ │
│ description │ varchar │ Adds support for a… │ … │ Adds local UI for … │ Adds indexing supp… │
│ aliases │ varchar[] │ [] │ … │ [] │ [] │
│ extension_version │ varchar │ v1.4.2 │ … │ │ │
│ install_mode │ varchar │ STATICALLY_LINKED │ … │ NOT_INSTALLED │ NOT_INSTALLED │
│ installed_from │ varchar │ │ … │ │ │
├───────────────────┴───────────┴──────────────────────┴───┴──────────────────────┴──────────────────────┤
│ 26 rows (3 shown) 9 columns │
└────────────────────────────────────────────────────────────────────────────────────────────────────────┘
.rows で戻す。
方法3
.mode lines の .mode で表示形式の変更もありだが行が多いとスクロールされるので若干不便なため lmit 句 を入れると良い。 .mode duckbox で mode をデフォルトに戻せる。.help mode で一覧を見れる。
D .mode lines
D FROM duckdb_extensions() limit 2;
extension_name = autocomplete
loaded = true
installed = true
install_path = (BUILT-IN)
description = Adds support for autocomplete in the shell
aliases = []
extension_version = v1.4.2
install_mode = STATICALLY_LINKED
installed_from =
extension_name = aws
loaded = false
installed = true
install_path = /home/kmkm/.duckdb/extensions/v1.4.2/linux_amd64/aws.duckdb_extension
description = Provides features that depend on the AWS SDK
aliases = []
extension_version = 55bf362
install_mode = REPOSITORY
installed_from = core
D .mode duckbox
その他の表示方法は Output Formats を参照
.open ではなく ATTACH statment
.open でデータベースファイルを開くと、current session のデータベースは自動で close されてしまう。両方使う場合は ATTACH 'file.db' AS file_db; と実行すれば SELECT * FROM file_db.some_table でアクセス可能。
sqliteファイルを開く
上記の ATTACH にて type指定すればよい。
ATTACH IF NOT EXISTS 'sqlite_file.db' AS sqlite_db (TYPE SQLITE);
databaseの種類は次で確認できる。
from duckdb_databases();
┌───────────────┬──────────────┬────────────────┬─────────┬───┬─────────┬──────────┬───────────┬─────────┐
│ database_name │ database_oid │ path │ comment │ … │ type │ readonly │ encrypted │ cipher │
│ varchar │ int64 │ varchar │ varchar │ │ varchar │ boolean │ boolean │ varchar │
├───────────────┼──────────────┼────────────────┼─────────┼───┼─────────┼──────────┼───────────┼─────────┤
│ sqlite_db │ 2059 │ sqlite_file.db │ NULL │ … │ sqlite │ false │ false │ NULL │
│ memory │ 592 │ NULL │ NULL │ … │ duckdb │ false │ false │ NULL │
│ system │ 0 │ NULL │ NULL │ … │ duckdb │ false │ false │ NULL │
│ temp │ 1995 │ NULL │ NULL │ … │ duckdb │ false │ false │ NULL │
├───────────────┴──────────────┴────────────────┴─────────┴───┴─────────┴──────────┴───────────┴─────────┤
│ 4 rows 10 columns (8 shown) │
└────────────────────────────────────────────────────────────────────────────────────────────────────────┘
環境変数読めるよ
確認だけなら .sh env | grep HOME などでもよいが、 getenv(...) で利用もできる
SELECT getenv('HOME') as home;
┌────────────┐
│ home │
│ varchar │
├────────────┤
│ /home/abcd │
└────────────┘
シークレットの確認
FROM duckdb_secrets(); で見れる。以下見やすくするため .mode line にて表示
D .mode line
D FROM duckdb_secrets();
name = secret
type = s3
provider = credential_chain
persistent = false
storage = memory
scope = ['s3://', 's3n://', 's3a://']
secret_string = name=secret;type=s3;provider=credential_chain;serializable=true;scope=s3://,s3n://,s3a://;endpoint=s3.amazonaws.com;region=ap-northeast-1
D .mode duckbox
個別のパスについて状況を確認するには which_secret() が使える。
D SELECT * FROM which_secret('s3://bucket/path_to/file.parquet', 's3');
┌─────────┬────────────┬─────────┐
│ name │ persistent │ storage │
│ varchar │ varchar │ varchar │
├─────────┼────────────┼─────────┤
│ secret │ TEMPORARY │ memory │
└─────────┴────────────┴─────────┘
以上です。