Parquet(等)の中身を手軽に表示・確認するなら DuckDB CLI を使おう! 2025年版
はじめに
3年ほど前に、「Parquetの中身を手軽に表示・確認するならコレを使おう!」という記事をQiitaで書きました。
ありがたいことに今でもこちらの記事は読まれているようなのと、同じようにParquetの中身を確認したいという話題を見かけることがあったので、現在の私のオススメするDuckDB CLIを使うヒントを共有したいと思います。
上記の記事を書いた2022年末の時点でDuckDBはバージョン0.6.1でしたが、2025年10月現在はバージョン1.4.1まで順調にリリースを重ね、人気も高まっているようです。
後述のように便利な機能も多数追加されており、3年前はParquetを開くためのソフトウェアをいくつか紹介しましたが、今では「もう全部DuckDBで良いんじゃないかな」という心境になってます。
DuckDB CLIとは
DuckDB CLIは、DuckDBのシングルバイナリのコマンドラインクライアントです。インストールしてすぐに使えます。
インタラクティブにSQLを実行したり、コマンドの一部として他のツールと組み合わせて使うこともできます。
Linux、macOS、Windowsのamd64/arm64用にはバイナリが配布されています。
LinuxとmacOSの場合はインストールスクリプトを使用してサクッとインストールできるのと、バージョン毎に保持されるので複数のバージョンを使い分けることも可能です。
詳しくは(最近リニューアルされた)インストールページをご確認ください。
DuckDB CLIでParquetの中身を確認する
サンプルとして、GitHubでDuckDB組織の公開している、以下のファイルを使用します。
curlを使用してダウンロードしておきます。
curl -LO https://github.com/duckdb/duckdb-data/releases/download/v1.0/taxi_2019_04.parquet
コマンドラインで確認する
早速コマンドラインで、先ほどダウンロードしたファイルの中身を確認してみましょう。
ここではDuckDB CLI 1.3.0(2025年5月リリース)で追加された、「データベースファイルの代わりにParquetファイルを使用する」機能を使用します。
DuckDB CLIでは -c オプションで文字列のSQLクエリを渡して即座に実行させられます。
以前は、ここで渡すクエリ内でParquetファイルのパスを指定する必要がありました。例えば以下のような感じです。
duckdb -c 'from taxi_2019_04.parquet'
この方法も良いのですが、文字列内にファイル名を書く必要があるのでオートコンプリートでファイル名を補完するようなことはできないのは難点でした。
しかし前述の新機能により、クエリの外部で指定したParquetファイルに対して file という名前のViewが自動的に作成された状態でインメモリデータベースが起動できるようになりました。
これにより、常に同じクエリを使用し、対象ファイル名をクエリ外で直接指定するだけで良くなりました。
例えば、from fileというクエリをtaxi_2019_04.parquetに対して実行するのならば、以下のようになります。
$ duckdb -c 'from file' taxi_2019_04.parquet
┌───────────┬─────────────────────┬─────────────────────┬───┬──────────────┬──────────────────────┐
│ vendor_id │ pickup_at │ dropoff_at │ … │ total_amount │ congestion_surcharge │
│ varchar │ timestamp │ timestamp │ │ float │ float │
├───────────┼─────────────────────┼─────────────────────┼───┼──────────────┼──────────────────────┤
│ 1 │ 2019-04-01 00:04:09 │ 2019-04-01 00:06:35 │ … │ 8.8 │ 2.5 │
│ 1 │ 2019-04-01 00:22:45 │ 2019-04-01 00:25:43 │ … │ 8.3 │ 2.5 │
│ 1 │ 2019-04-01 00:39:48 │ 2019-04-01 01:19:39 │ … │ 47.75 │ 2.5 │
│ 1 │ 2019-04-01 00:35:32 │ 2019-04-01 00:37:11 │ … │ 7.3 │ 2.5 │
│ 1 │ 2019-04-01 00:44:05 │ 2019-04-01 00:57:58 │ … │ 23.15 │ 2.5 │
│ 1 │ 2019-04-01 00:29:16 │ 2019-04-01 00:38:00 │ … │ 9.8 │ 0.0 │
│ 1 │ 2019-04-01 00:06:47 │ 2019-04-01 00:08:15 │ … │ 6.8 │ 2.5 │
│ 1 │ 2019-04-01 00:52:16 │ 2019-04-01 00:55:10 │ … │ 7.8 │ 2.5 │
│ 2 │ 2019-04-01 00:52:28 │ 2019-04-01 01:11:24 │ … │ 20.3 │ 2.5 │
│ 1 │ 2019-04-01 00:02:19 │ 2019-04-01 00:03:05 │ … │ 0.31 │ 0.0 │
│ 1 │ 2019-04-01 00:03:20 │ 2019-04-01 00:03:54 │ … │ 240.35 │ 0.0 │
│ 1 │ 2019-04-01 00:13:40 │ 2019-04-01 00:20:01 │ … │ 10.3 │ 2.5 │
│ 4 │ 2019-04-01 00:25:31 │ 2019-04-01 00:55:21 │ … │ 36.3 │ 2.5 │
│ 2 │ 2019-04-01 00:14:55 │ 2019-04-01 00:42:23 │ … │ 80.16 │ 0.0 │
│ 1 │ 2019-04-01 00:13:51 │ 2019-04-01 00:22:54 │ … │ 14.8 │ 2.5 │
│ 1 │ 2019-04-01 00:24:59 │ 2019-04-01 00:31:29 │ … │ 11.3 │ 2.5 │
│ 1 │ 2019-04-01 00:43:34 │ 2019-04-01 00:50:12 │ … │ 13.56 │ 2.5 │
│ 2 │ 2019-04-01 00:10:05 │ 2019-04-01 00:21:46 │ … │ 15.96 │ 2.5 │
│ 2 │ 2019-04-01 00:38:35 │ 2019-04-01 00:49:10 │ … │ 15.3 │ 2.5 │
│ 1 │ 2019-04-01 00:03:29 │ 2019-04-01 00:10:45 │ … │ 11.75 │ 2.5 │
│ · │ · │ · │ · │ · │ · │
│ · │ · │ · │ · │ · │ · │
│ · │ · │ · │ · │ · │ · │
│ 1 │ 2019-04-30 23:27:52 │ 2019-04-30 23:33:56 │ … │ 12.35 │ 2.5 │
│ 1 │ 2019-04-30 23:50:51 │ 2019-05-01 00:19:26 │ … │ 28.55 │ 2.5 │
│ 2 │ 2019-04-30 23:04:02 │ 2019-04-30 23:10:02 │ … │ 11.76 │ 2.5 │
│ 2 │ 2019-04-30 23:12:33 │ 2019-04-30 23:29:21 │ … │ 26.8 │ 2.5 │
│ 2 │ 2019-04-30 23:33:19 │ 2019-04-30 23:40:45 │ … │ 10.3 │ 2.5 │
│ 2 │ 2019-04-30 23:54:49 │ 2019-05-01 00:08:02 │ … │ 20.54 │ 2.5 │
│ 2 │ 2019-04-30 23:11:31 │ 2019-04-30 23:39:23 │ … │ 37.44 │ 2.5 │
│ 4 │ 2019-04-30 23:18:24 │ 2019-04-30 23:25:34 │ … │ 13.56 │ 2.5 │
│ 4 │ 2019-04-30 23:44:01 │ 2019-04-30 23:48:32 │ … │ 9.3 │ 2.5 │
│ 4 │ 2019-04-30 23:49:10 │ 2019-04-30 23:58:11 │ … │ 15.36 │ 2.5 │
│ 1 │ 2019-04-30 23:05:28 │ 2019-04-30 23:11:30 │ … │ 10.8 │ 2.5 │
│ 1 │ 2019-04-30 23:21:17 │ 2019-04-30 23:32:10 │ … │ 17.15 │ 2.5 │
│ 2 │ 2019-04-30 23:39:31 │ 2019-05-01 22:58:58 │ … │ 29.3 │ 2.5 │
│ 2 │ 2019-04-30 23:28:12 │ 2019-04-30 23:57:11 │ … │ 44.16 │ 0.0 │
│ 2 │ 2019-04-30 23:03:35 │ 2019-04-30 23:12:49 │ … │ 15.99 │ 2.5 │
│ 2 │ 2019-04-30 23:26:25 │ 2019-04-30 23:29:32 │ … │ 10.8 │ 2.5 │
│ 2 │ 2019-04-30 23:42:44 │ 2019-04-30 23:42:44 │ … │ 0.0 │ 0.0 │
│ 2 │ 2019-04-30 22:18:51 │ 2019-04-30 23:05:06 │ … │ 0.0 │ 2.5 │
│ 2 │ 2019-04-30 23:05:44 │ 2019-04-30 23:05:46 │ … │ 0.0 │ 0.0 │
│ 2 │ 2019-04-30 23:07:48 │ 2019-04-30 23:08:18 │ … │ 0.0 │ 0.0 │
├───────────┴─────────────────────┴─────────────────────┴───┴──────────────┴──────────────────────┤
│ 7433139 rows (7.43 million rows, 40 shown) 18 columns (5 shown) │
└─────────────────────────────────────────────────────────────────────────────────────────────────┘
summarize fileというクエリを実行すると、統計値を確認できます(集計のため時間がかかります。今回はGitHub Codespacesの2コアマシンで実行して16秒かかりましたが、プログレスバーが表示されるので安心して待てました)。
$ duckdb -c 'summarize file' taxi_2019_04.parquet
100% ▕██████████████████████████████████████▏ (00:00:16.31 elapsed)
┌──────────────────────┬─────────────┬─────────────────────┬───┬─────────┬─────────────────┐
│ column_name │ column_type │ min │ … │ count │ null_percentage │
│ varchar │ varchar │ varchar │ │ int64 │ decimal(9,2) │
├──────────────────────┼─────────────┼─────────────────────┼───┼─────────┼─────────────────┤
│ vendor_id │ VARCHAR │ 1 │ … │ 7433139 │ 0.00 │
│ pickup_at │ TIMESTAMP │ 2008-08-08 09:13:28 │ … │ 7433139 │ 0.00 │
│ dropoff_at │ TIMESTAMP │ 2008-08-08 20:25:45 │ … │ 7433139 │ 0.00 │
│ passenger_count │ TINYINT │ 0 │ … │ 7433139 │ 0.00 │
│ trip_distance │ FLOAT │ 0.0 │ … │ 7433139 │ 0.00 │
│ rate_code_id │ VARCHAR │ 1 │ … │ 7433139 │ 0.00 │
│ store_and_fwd_flag │ VARCHAR │ N │ … │ 7433139 │ 0.00 │
│ pickup_location_id │ INTEGER │ 1 │ … │ 7433139 │ 0.00 │
│ dropoff_location_id │ INTEGER │ 1 │ … │ 7433139 │ 0.00 │
│ payment_type │ VARCHAR │ 1 │ … │ 7433139 │ 0.00 │
│ fare_amount │ FLOAT │ -450.08 │ … │ 7433139 │ 0.00 │
│ extra │ FLOAT │ -24.6 │ … │ 7433139 │ 0.00 │
│ mta_tax │ FLOAT │ -0.5 │ … │ 7433139 │ 0.00 │
│ tip_amount │ FLOAT │ -88.0 │ … │ 7433139 │ 0.00 │
│ tolls_amount │ FLOAT │ -23.0 │ … │ 7433139 │ 0.00 │
│ improvement_surcha… │ FLOAT │ -0.3 │ … │ 7433139 │ 0.00 │
│ total_amount │ FLOAT │ -450.88 │ … │ 7433139 │ 0.00 │
│ congestion_surcharge │ FLOAT │ -2.5 │ … │ 7433139 │ 0.00 │
├──────────────────────┴─────────────┴─────────────────────┴───┴─────────┴─────────────────┤
│ 18 rows 12 columns (5 shown) │
└──────────────────────────────────────────────────────────────────────────────────────────┘
余談ですが、DuckDB CLIは出力のフォーマットをMarkdownテーブル形式にできるので、良い感じにMarkdownの表を作りたい場合にも便利です。
$ duckdb -markdown -c 'from file limit 10' taxi_2019_04.parquet
| vendor_id | pickup_at | dropoff_at | passenger_count | trip_distance | rate_code_id | store_and_fwd_flag | pickup_location_id | dropoff_location_id | payment_type | fare_amount | extra | mta_tax | tip_amount | tolls_amount | improvement_surcharge | total_amount | congestion_surcharge |
|-----------|---------------------|---------------------|----------------:|--------------:|--------------|--------------------|-------------------:|--------------------:|--------------|------------:|------:|--------:|-----------:|-------------:|----------------------:|-------------:|---------------------:|
| 1 | 2019-04-01 00:04:09 | 2019-04-01 00:06:35 | 1 | 0.5 | 1 | N | 239 | 239 | 1 | 4.0 | 3.0 | 0.5 | 1.0 | 0.0 | 0.3 | 8.8 | 2.5 |
| 1 | 2019-04-01 00:22:45 | 2019-04-01 00:25:43 | 1 | 0.7 | 1 | N | 230 | 100 | 2 | 4.5 | 3.0 | 0.5 | 0.0 | 0.0 | 0.3 | 8.3 | 2.5 |
| 1 | 2019-04-01 00:39:48 | 2019-04-01 01:19:39 | 1 | 10.9 | 1 | N | 68 | 127 | 1 | 36.0 | 3.0 | 0.5 | 7.95 | 0.0 | 0.3 | 47.75 | 2.5 |
| 1 | 2019-04-01 00:35:32 | 2019-04-01 00:37:11 | 1 | 0.2 | 1 | N | 68 | 68 | 2 | 3.5 | 3.0 | 0.5 | 0.0 | 0.0 | 0.3 | 7.3 | 2.5 |
| 1 | 2019-04-01 00:44:05 | 2019-04-01 00:57:58 | 1 | 4.8 | 1 | N | 50 | 42 | 1 | 15.5 | 3.0 | 0.5 | 3.85 | 0.0 | 0.3 | 23.15 | 2.5 |
| 1 | 2019-04-01 00:29:16 | 2019-04-01 00:38:00 | 1 | 1.7 | 1 | N | 95 | 196 | 2 | 8.5 | 0.5 | 0.5 | 0.0 | 0.0 | 0.3 | 9.8 | 0.0 |
| 1 | 2019-04-01 00:06:47 | 2019-04-01 00:08:15 | 1 | 0.0 | 1 | N | 211 | 211 | 3 | 3.0 | 3.0 | 0.5 | 0.0 | 0.0 | 0.3 | 6.8 | 2.5 |
| 1 | 2019-04-01 00:52:16 | 2019-04-01 00:55:10 | 1 | 0.2 | 1 | N | 237 | 162 | 1 | 4.0 | 3.0 | 0.5 | 0.0 | 0.0 | 0.3 | 7.8 | 2.5 |
| 2 | 2019-04-01 00:52:28 | 2019-04-01 01:11:24 | 1 | 4.15 | 1 | N | 148 | 37 | 2 | 16.5 | 0.5 | 0.5 | 0.0 | 0.0 | 0.3 | 20.3 | 2.5 |
| 1 | 2019-04-01 00:02:19 | 2019-04-01 00:03:05 | 1 | 0.0 | 5 | N | 265 | 265 | 2 | 0.01 | 0.0 | 0.0 | 0.0 | 0.0 | 0.3 | 0.31 | 0.0 |
ブラウザ上でインタラクティブに確認する
前回の記事ではインタラクティブな用途にはDuckDBを内蔵したTadを紹介しましたが、今回は今年から利用可能になった、DuckDBのUI拡張機能(2025年3月リリース)をオススメします。
UI拡張機能を使用するのに一番簡単な方法は、-uiオプションを指定してDuckDB CLIを実行することです。
例えば以下のように-uiオプションを指定し、データベースの代わりにParquetファイルを指定して起動できます。
duckdb -ui taxi_2019_04.parquet
するとサーバーが起動し、ブラウザでノートブック形式のエディタが表示されます。
接続されているデータベースの情報が表示され、個々のノートブックやセルを編集してSQLを実行し結果を確認できます。
先ほどコマンドラインで行ったように、from fileを実行してみました。

SQLやファイル名の補完が利くのでとても使いやすいです。

手軽に使えつつ、本格的なクエリを書きたい場合にもそのまますぐに移行できます。
現在は結果のソートなどをインタラクティブに行う機能はありませんが、将来的には実装される予定とのことで楽しみです。
おわりに
最近のDuckDB CLIの機能を使うとParquetを手軽に開いてデータを確認できることをご紹介しました。
これからもDuckDBに注目し、便利に使わせていただきたいと思います。
Discussion