mcpField
R
read-file

read-file

github.com/duckdbデータ・データベース6131.2k 回インストール28 週間前に更新
リポジトリ

read-file について

read-file は、DuckDB でデータファイルを読み取り、分析するスキルです。インラインマクロでリーダーを選び、ローカルとリモートのパスに対応します。

主な機能

  1. 01DuckDB によるファイル読み取り
  2. 02複数のリーダーから形式を選択
  3. 03リモートファイルプロトコルへの対応

活用シーン

  1. 01未知のデータファイルの確認
  2. 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:-データの内容を説明してください:列の型、行数、注目すべきパターンを要約してください。}

コメント