クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

CSVファイルをSQLで読み込む

このレッスンのあとで: CSV ファイルを、名前を指定して、表のように問い合わせられる。

45分のレッスンコマンドなし

CSV ファイルを、表のように SQL で読む

DuckDB では、CSV ファイルを表のように、そのまま SQL で問い合わせられます。

read_csv にファイルの名前を渡すだけで、列の名前と型を DuckDB が推測してくれます。データを表に取り込む手間はありません。

このレッスンのゴール

メモ

CSV ファイルを、名前を指定して、表のように問い合わせられる。

重要な言葉

ことばいみれい
read_csvCSV ファイルを、表のように読む関数read_csv('bike_log.csv')
ヘッダー行ファイルの1行目にある、列の名前
型の推測値を見て、列の型を DuckDB が決めること
区切り文字値と値を分ける文字カンマ、タブ
DESCRIBE列の名前と型を表示する命令
JSON Lines1行に1つの JSON を書くファイルの形

学生が入力するセルは、このプレビューでは空白です。

ファイルの名前を、表の名前の代わりに書く

from の後ろに表の名前を書く代わりに、read_csv('ファイル名') と書きます。すると、ファイルが1つの表として読まれます。

1行目が列の名前、2行目からがデータです。そのあとは、いつもの group by や where がそのまま使えます。

例: ファイルを読むクエリ

コード: duckdb
-- ファイル名を渡すと、ファイルが表のように読めます。
select station, count(*) as rides, sum(minutes) as total_minutes
from read_csv('bike_log.csv')
group by station
order by station;

この教材で、ファイルを読める場所

レッスンのページの中の Run は、ファイルを読めません。ファイルを読めるのは、プレイグラウンドで、自分でアップロードしたファイルだけです。

対応するのは、64 KB までの CSV、TSV、JSON Lines です。Parquet は使えません。

そこで、このレッスンの Run は、ファイルと同じ形に作った表で動かします。

試す: 列の型を調べる

コード: duckdb
-- 表の列の名前と型を調べます。
-- ファイルなら、read_csv の結果の列がこう調べられます。
describe select * from bike_log;

例: bike_log.csv の中身

ride_idstationminutesstarted_at
1駅前122026-05-01 08:10:00
2公園252026-05-01 09:30:00
3駅前82026-05-01 12:05:00
4大学312026-05-02 07:55:00

学生が入力するセルは、このプレビューでは空白です。

ファイルの数字は、BIGINT と推測される

実際に bike_log.csv を read_csv で読んでみました。ride_id と minutes は BIGINT と推測されました。

station は VARCHAR、started_at は TIMESTAMP です。

ところが、表を INTEGER で作ると、INTEGER のままです。ファイルの数字は、大きな値も入るように、広い型で読まれます。

例: 列に入っている値と、推測された型

列入っている値推測された型
ride_id1, 2, 3BIGINT
station駅前, 公園VARCHAR
minutes12, 25, 8BIGINT
started_at2026-05-01 08:10:00TIMESTAMP

学生が入力するセルは、このプレビューでは空白です。

試す: 駅ごとの貸出数

コード: duckdb
-- ファイルと同じ形の表で、同じクエリを動かします。
select station, count(*) as rides, sum(minutes) as total_minutes
from bike_log
group by station
order by station;
-- group by station を、日付ごとに変えてみましょう。
-- cast(started_at as date) を使います。

よくある間違い

注意

CSV の数字の列に n/a のような文字が1つ混ざると、その列は全部 VARCHAR になります。合計が出ないときは、まず describe で型を調べましょう。

さらに挑戦

タブ区切りのファイルは、read_csv に区切り文字を教えて読みます。JSON Lines は read_json で読みます。

自分でプレイグラウンドに 64 KB 以下の CSV をアップロードして、ファイルの名前で問い合わせてみましょう。まず describe で型を確かめます。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。