SuperAPI AI 工具集

convert-file

数据与分析

查看项目

更新于 10-15 01:19

技能介绍

用途

convert-file 是一个基于 DuckDB 的数据文件格式转换技能,用于把输入数据文件从一种格式转换为另一种格式。当用户表达“转换为 parquet”“另存为 xlsx”“导出为……”等意图时使用。

主要能力

支持的目标格式及对应处理方式:

  • .parquet、.pq:默认格式,无需额外子句
  • .csv:FORMAT csv, HEADER
  • .tsv:FORMAT csv, HEADER, DELIMITER '\t'
  • .json:FORMAT json, ARRAY true
  • .jsonl、.ndjson:FORMAT json, ARRAY false
  • .xlsx:FORMAT xlsx,需要 INSTALL excel; LOAD excel;
  • .geojson:FORMAT GDAL, DRIVER 'GeoJSON',需要 LOAD spatial;
  • .gpkg:FORMAT GDAL, DRIVER 'GPKG',需要 LOAD spatial;
  • .shp:FORMAT GDAL, DRIVER 'ESRI Shapefile',需要 LOAD spatial;

支持远程输入(s3://、gs://、gcs://、https://、http://),并按协议加载相应扩展与密钥。支持分区输出(PARTITION_BY (col),仅适用于 Parquet 和 CSV 输出)以及 Parquet 压缩(CODEC 'zstd')。

使用方式

第一步,解析输入与输出。输入为 $0;若为不带 / 的裸文件名,则用 find "$PWD" -name "$0" -not -path '/.git/' 2>/dev/null | head -1 解析为完整路径。输出为 $1;若未提供,则默认使用与输入相同的文件名主干加 .parquet 扩展名(例如 data.csv → data.parquet)。根据输出文件扩展名推断目标格式。

第二步,执行转换。运行单条 DuckDB 命令,并根据输入和输出格式按需前置扩展加载:

duckdb -c " <EXTENSION_LOADS> COPY (FROM '<INPUT_PATH>') TO '<OUTPUT_PATH>' <FORMAT_CLAUSE>; "

远程输入需前置协议设置:

  • s3://:LOAD httpfs; CREATE SECRET (TYPE S3, PROVIDER credential_chain);
  • gs:// / gcs://:LOAD httpfs; CREATE SECRET (TYPE GCS, PROVIDER credential_chain);
  • https:// / http://:LOAD httpfs;

若用户提到分区(如“partition by year”),在格式子句中添加 PARTITION_BY (col),仅适用于 Parquet 和 CSV 输出。若用户提到压缩(如“use zstd”),为 Parquet 输出添加 CODEC 'zstd'。

第三步,报告结果。成功时报告:输入文件及检测到的格式;输出文件、格式和大小(ls -lh);若易于计算则报告行数。失败时:若提示 duckdb: command not found,则转交 /duckdb-skills:install-duckdb;若缺少扩展,则安装后重试;若输入解析错误,建议用户检查输入格式,或先尝试 /duckdb-skills:read-file 检查文件。

适用场景

适用于需要在常见数据格式之间快速转换的场合,包括本地文件与远程对象存储文件,以及需要分区或压缩输出的 Parquet/CSV 场景。

限制

分区输出仅支持 Parquet 和 CSV。Excel、GeoJSON、GPKG、Shapefile 等格式需要相应扩展(excel、spatial)。远程输入需要按协议加载 httpfs 并配置密钥。若未提供输出路径,默认输出为 Parquet 格式。