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 选项定制功能模块(如仅启用 fetchforeach 功能)。

qsvlite:最小功能版本,体积约为标准版的 13%。

qsvdp:针对 DataPusher+ 优化,仅包含相关命令和精简版 applydp 功能。

qsv功能

数据处理能力

通过 index 命令为 CSV 创建索引,实现切片(slice)、计数(count)等操作的常数时间复杂度访问,15GB 数据集索引构建仅需 14 秒。

标记 🚀 的命令(如 catsort)即使无索引也支持多线程处理,标记 🏎️ 的命令(如 frequencystats)在有索引时自动启用多线程。

多数命令采用流式架构,支持处理超内存大文件,如 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 前缀的命令(如 extsortextdedup)处理超内存文件,避免全量加载。

性能调优:通过 --features 选项禁用非必需功能(如 python),或启用 polars 功能利用 Pola.rs 引擎加速。

脚本开发:复杂逻辑优先使用 luau 而非 Python,执行效率更高也不需要外部依赖。