qsv 是基于命令行的数据处理工具,支持对 CSV、电子表格、数据库、Parquet 等格式的数据进行查询、切片、索引、分析、过滤、转换、排序、验证、连接、格式化和转换等操作。
命令 | 功能描述 |
---|---|
apply |
对指定 CSV 列执行字符串、日期、数学、货币转换,支持基础 NLP 功能(如相似度、情感分析等) |
count |
统计 CSV 行数,可生成记录宽度统计信息,支持 Polars 多线程读取优化 |
diff |
快速对比两个 CSV 差异,百万行数据对比可在 600ms 内完成 |
geocode |
基于本地 Geonames 和 Maxmind 数据库实现地理编码,支持缓存和多线程,秒处理量达 36 万条 |
joinp |
使用 Pola.rs 引擎实现多种连接类型(包括非等值连接和时间序列专用的 asof 连接) |
sqlp |
执行 Polars SQL 查询,支持处理超内存 CSV 文件,结果可输出为多种格式 |
stats |
计算详细统计指标(如分位数、标准差、稀疏度等),支持数据类型推断 |
validate |
基于 JSON Schema 验证 CSV 数据,支持自定义格式和复合键唯一性校验 |
qsv 针对不同环境提供了多种安装方式。
Linux、macOS、Windows 等系统都提供了预编译版本,包含针对 x86_64 和 Apple Silicon 的 CPU 优化版本(如支持 SSE4.2、AVX2、ARM64 NEON 等指令集)。
Windows 提供 MSI 简易安装程序,安装后自动添加到系统路径,macOS 用户首次运行前需执行 xattr -d com.apple.quarantine qsv
命令解除系统隔离。
可使用 qsv --update
自动更新,自动验证下载包签名保证下载的安装包是最新的官方版本。
常用命令:
• Arch Linux:yay -S qsv
• Homebrew(macOS/Linux):brew install qsv
• Windows Scoop:scoop install qsv
• Ubuntu/Debian:通过官方源安装,需先导入 GPG 密钥。
需要先安装 Rust 环境,支持通过 cargo install qsv --locked --features all_features
命令编译包含全部功能的版本,也可以通过 --features
选项定制功能模块(如仅启用 fetch
和 foreach
功能)。
• qsvlite
:最小功能版本,体积约为标准版的 13%。
• qsvdp
:针对 DataPusher+ 优化,仅包含相关命令和精简版 applydp
功能。
通过 index
命令为 CSV 创建索引,实现切片(slice
)、计数(count
)等操作的常数时间复杂度访问,15GB 数据集索引构建仅需 14 秒。
标记 🚀
的命令(如 cat
、sort
)即使无索引也支持多线程处理,标记 🏎️
的命令(如 frequency
、stats
)在有索引时自动启用多线程。
多数命令采用流式架构,支持处理超内存大文件,如 extdedup
使用内存映射哈希表实现大文件去重,不需要加载全量数据。
输入格式:原生支持 CSV/TSV/SSV、JSON/JSONL、Excel/ODS,通过 Polars 功能扩展可读取 Parquet、Arrow IPC 等格式,自动处理 Snappy 压缩文件(.sz
后缀)。
输出格式:支持转换为 Parquet、PostgreSQL、SQLite、Excel、Data Package 等,sqlp
命令结果可输出为 JSON、Avro 等格式。
编码处理:要求输入为 UTF-8 编码,Windows 环境下可通过 QSV_OUTPUT_BOM
环境变量添加 BOM 头,解决 Excel 对 UTF-8 识别问题。
脚本支持:
• luau
:内置领域特定语言(DSL),支持复杂数据管道构建,可执行表达式或完整脚本,包含数据查询、聚合等辅助函数。
• py
:通过 Python 表达式生成新列或过滤行,需 Python 3.8+ 环境。
外部集成:
• fetch/fetchpost
:支持通过 HTTP 请求与 Web 服务交互,集成 Jaq JSON 查询语言和 MiniJinja 模板引擎,支持 Redis 或磁盘缓存。
• geoconvert
:实现 GeoJSON、SHP 等空间格式与 CSV/SVG 的转换,支持地理空间数据处理。
qsv pro:提供图形界面(GUI)、API 接口、CKAN 集成、自然语言交互等高级功能,支持 Windows Defender 无误报,可从官网或微软应用商店下载。
安全与合规:采用 Rust 语言开发,自动进行安全漏洞审计,预编译二进制文件通过 zipsign 签名验证,支持 JSON Schema 数据验证和复合键唯一性校验。
案例:处理 15GB、2800 万行的 NYC 311 数据集时,index
命令构建索引需 14 秒,stats
统计分析仅需 7.3 秒(启用索引多线程模式)。
工具链整合:通过管道(|
)组合命令,如 qsv slice -i 5 data.csv | qsv flatten
实现数据切片与扁平化展示。
去重与排序:dedup
命令内存去重,extdedup
处理超大文件;sort
支持字母、数字、随机等多种排序方式,sortcheck
验证排序有效性。
格式规范化:input
命令标准化非合规 CSV 文件,fmt
命令调整分隔符、引号规则等格式。
地理编码:geocode
利用本地数据库实现高速地址解析,支持 254 种语言的地名索引更新。
实时交互:lens
命令提供交互式数据查看和过滤界面,基于 csvlens 引擎实现实时数据探索。
工具 | 数据集 | 压缩后大小 | 压缩时间 | 压缩速度 |
---|---|---|---|---|
qsv snappy | NYC 311 (15GB) | 4.95GB | 5.77秒 | 2.58GB/秒 |
zip 3.0 | 同上 | 2.9GB | 248.3秒 | 0.06GB/秒 |
大文件处理:优先使用带 ext
前缀的命令(如 extsort
、extdedup
)处理超内存文件,避免全量加载。
性能调优:通过 --features
选项禁用非必需功能(如 python
),或启用 polars
功能利用 Pola.rs 引擎加速。
脚本开发:复杂逻辑优先使用 luau
而非 Python,执行效率更高也不需要外部依赖。