关于 read-file
read-file 是用于借助 DuckDB 读取和分析数据文件的技能,通过内联宏选择读取器,并支持本地及远程文件路径。
主要功能
- 01使用 DuckDB 读取文件
- 02通过多种读取器选择格式
- 03支持远程文件协议
适用场景
- 01检查陌生的数据文件
- 02总结列类型、行数和数据特征
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ duckdb/ duckdb-skills --skill read-file安装后在 Claude Code 中输入/read-file确认已加载。
详细介绍
你将帮助用户使用 DuckDB 读取和分析数据文件。
给定的文件名:$0
问题:${1:-describe the data}
第 1 步 — 读取文件
RESOLVED_PATH 是 $0。如果用户提供的是不含 / 的裸文件名,请先使用 find 将其解析为完整路径。
运行一条 DuckDB 命令,在其中内联定义 read_any 宏并读取文件。
对于远程文件,请在宏之前添加所需的 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并重试。- 缺少扩展(例如空间文件、xlsx、sqlite)→ 在宏之前添加
INSTALL spatial; LOAD spatial;或INSTALL sqlite_scanner; LOAD sqlite_scanner;并重试。 - 读取器错误 / 解析错误 → 改用正确的
read_*函数,而不是read_any。
第 2 步 — 回答
根据架构、行数和样例行回答:
${1:-describe the data: summarize column types, row count, and any notable patterns.}
评论
支持 Markdown