read-file について
read-file は、DuckDB でデータファイルを読み取り、分析するスキルです。インラインマクロでリーダーを選び、ローカルとリモートのパスに対応します。
主な機能
- 01DuckDB によるファイル読み取り
- 02複数のリーダーから形式を選択
- 03リモートファイルプロトコルへの対応
活用シーン
- 01未知のデータファイルの確認
- 02列型、行数、特徴の要約
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ duckdb/ duckdb-skills --skill read-fileインストール後、Claude Code で/read-fileを入力して読み込まれたか確認します。
詳細
DuckDB を使用して、ユーザーがデータファイルを読み取り、分析できるようサポートします。
指定されたファイル名:$0
質問:${1:-データの内容を説明してください}
ステップ 1 — 読み取る
RESOLVED_PATH は $0 です。ユーザーがファイル名のみ(/ を含まない)を指定した場合は、まず find を使ってフルパスを解決します。
read_any マクロをインラインで定義し、ファイルを読み取る DuckDB コマンドを 1 つ実行します。
リモートファイルの場合は、マクロの前に必要な LOAD/SECRET を追加します。
| プロトコル | 追加する内容 |
|---|---|
https:// / http:// | LOAD httpfs; |
s3:// | LOAD httpfs; CREATE SECRET (TYPE S3, PROVIDER credential_chain); |
gs:// / gcs:// | LOAD httpfs; CREATE SECRET (TYPE GCS, PROVIDER credential_chain); |
az:// / azure:// / abfss:// | LOAD httpfs; LOAD azure; CREATE SECRET (TYPE AZURE, PROVIDER credential_chain); |
ローカルファイルの場合、プレフィックスは不要です。
duckdb -csv -c "
CREATE OR REPLACE MACRO read_any(file_name) AS TABLE
WITH json_case AS (FROM read_json_auto(file_name))
, csv_case AS (FROM read_csv(file_name))
, parquet_case AS (FROM read_parquet(file_name))
, avro_case AS (FROM read_avro(file_name))
, blob_case AS (FROM read_blob(file_name))
, spatial_case AS (FROM st_read(file_name))
, excel_case AS (FROM read_xlsx(file_name))
, sqlite_case AS (FROM sqlite_scan(file_name, (SELECT name FROM sqlite_master(file_name) LIMIT 1)))
, ipynb_case AS (
WITH nb AS (FROM read_json_auto(file_name))
SELECT cell_idx, cell.cell_type,
array_to_string(cell.source, '') AS source,
cell.execution_count
FROM nb, UNNEST(cells) WITH ORDINALITY AS t(cell, cell_idx)
ORDER BY cell_idx
)
FROM query_table(
CASE
WHEN file_name ILIKE '%.json' OR file_name ILIKE '%.jsonl' OR file_name ILIKE '%.ndjson' OR file_name ILIKE '%.geojson' OR file_name ILIKE '%.geojsonl' OR file_name ILIKE '%.har' THEN 'json_case'
WHEN file_name ILIKE '%.csv' OR file_name ILIKE '%.tsv' OR file_name ILIKE '%.tab' OR file_name ILIKE '%.txt' THEN 'csv_case'
WHEN file_name ILIKE '%.parquet' OR file_name ILIKE '%.pq' THEN 'parquet_case'
WHEN file_name ILIKE '%.avro' THEN 'avro_case'
WHEN file_name ILIKE '%.xlsx' OR file_name ILIKE '%.xls' THEN 'excel_case'
WHEN file_name ILIKE '%.shp' OR file_name ILIKE '%.gpkg' OR file_name ILIKE '%.fgb' OR file_name ILIKE '%.kml' THEN 'spatial_case'
WHEN file_name ILIKE '%.ipynb' THEN 'ipynb_case'
WHEN file_name ILIKE '%.db' OR file_name ILIKE '%.sqlite' OR file_name ILIKE '%.sqlite3' THEN 'sqlite_case'
ELSE 'blob_case'
END
);
DESCRIBE FROM read_any('RESOLVED_PATH');
SELECT count(*) AS row_count FROM read_any('RESOLVED_PATH');
FROM read_any('RESOLVED_PATH') LIMIT 20;
"
失敗した場合:
duckdb: command not found→/duckdb-skills:install-duckdbを呼び出して再試行します。- 拡張機能が見つからない(例:spatial ファイル、xlsx、sqlite)→ マクロの前に
INSTALL spatial; LOAD spatial;またはINSTALL sqlite_scanner; LOAD sqlite_scanner;を追加して再試行します。 - リーダーの誤り/解析エラー →
read_anyではなく、適切なread_*関数を直接使用します。
ステップ 2 — 回答する
スキーマ、行数、サンプル行を使って、以下に回答します。
${1:-データの内容を説明してください:列の型、行数、注目すべきパターンを要約してください。}
コメント
Markdown 対応