qsv: 极速数据整理工具包
| 目录 | |
|---|---|
![]() Hi-ho "Quicksilver" away! 原始标志详情 * Base AI 重新构想的标志 * 活动标志存档 | qsv 是一个用于查询、切片、 排序、分析、过滤、丰富、转换、 验证、连接、格式化、转换、聊天、 FAIR化及记录表格数据(CSV、Excel、等)的数据处理工具包。 命令简单、可组合且___"极速"__。 * 命令 * 安装:CLI • MCP Server • Cowork Plugin * 快速入门 / Notebooks / 课程与练习 * FAQ * 性能调优 * 👉 基准测试 🚀 • 交互式基准测试 📈 * 📊 可视化图库 🗺️ * 🗃️ Neurosymbolic Visual Data Schematics 📈 * 环境变量 * 功能标志 * 目标/非目标 * 测试 * NYC SOD 2022/csv,conf,v8/PyConUS 2025/ csv,conf,v9/NYC SOD 2026 * **"我们实现了 ACI 吗?"_** 系列 - 1 • 2 • 3 * 赞助 |
在 qsv.dathere.com 上试用!
| Command | Description |
|---|---|
| apply✨ 📇🧠🤖🚀🔣👆⛩️ | 对给定的 CSV 列应用一系列字符串、日期、数学和货币转换。它还包含一些基本的 NLP 功能(similarity、sentiment analysis、profanity、eudex、language 和 name gender)检测。其 summarize 子命令使用兼容 OpenAI API 的 LLM(本地或商业)来压缩一列或一组列,并支持使用 MiniJinja 模板化的可自定义逐条记录提示词。 |
| applydp✨ 📇🚀🔣👆 ![]() | applydp 是 apply 的精简版本,仅包含与 Datapusher+ 相关的子命令/操作(仅 qsvdp 二进制变体)。 |
| behead | 从 CSV 中删除表头。 |
| blake3 🚀 | 计算或检查文件的 BLAKE3 哈希值。 |
| cat 🗄️ | 按行或按列连接 CSV 文件。 |
| clean | 删除 qsv 生成的缓存文件(.idx 索引、stats 和 frequency 缓存),以减少杂乱并简化数据打包。使用 --stale 时,仅删除源文件已更改或已不存在的缓存。可选标志还会清理 schema、validate 和 moarstats 的输出。 |
| clipboard✨ 🖥️ | 从剪贴板提供输入或将输出保存到剪贴板。 |
| color✨ 🤯🐻❄️🖥️ | 将表格数据输出为美观的彩色表格,始终适应终端大小。除了 CSV 及其方言外,使用 "polars" 功能还支持 Arrow、Avro/IPC、Parquet、JSON 数组和 JSONL 格式。 |
| count 📇🐻❄️🏎️ | 统计行数,并可选地编译 CSV 文件的记录宽度统计信息。(对于 15gb、28m 行的 NYC 311 数据集,无索引时耗时 11.87 秒。有索引时即时完成。)如果启用了 polars 功能,则使用 Polars 的多线程、内存映射 CSV 读取器,即使没有索引也能快速计数 |
| datefmt 📇🚀👆 | 使用 strftime 日期格式说明符 将识别的日期字段(识别 19 种格式)格式化为指定的日期格式。 |
| dedup 🤯🚀👆 | 删除重复行(另请参阅 extdedup、extsort、sort 和 sortcheck 命令)。 |
| denull | 检测空值哨兵——代表缺失值的字面文本,如 NULL 或 N/A,这会导致 stats 将数值列类型化为 String(其 nullcount 保持为 0,不计算四分位数),并静默降低下游的 viz、schema 和 describegpt 性能。默认情况下报告;--apply 按列清空其确认的列中的哨兵值。使用有界内存扫描一次。数值哨兵(-999)故意不被检测——它们被解析为有效数字,且任何扫描都无法将它们与真实数据区分开来。 |
| describegpt 📇🗃️🤖🌐🪄📚⛩️ ![]() | 推断 "neuro-symbolic" 数据字典、描述和标签,或针对 CSV 文件提问,使用可配置的 MiniJinja 提示文件,支持任何 OpenAI API 兼容的云端/本地 LLM。(例如 Markdown、JSON、TOON、JSON Schema、Semantic Markdown、OKF、Everything、Content Type inferencing、Spanish、Mandarin、Controlled Tags; --prompt "What are the top 10 complaint types by community board & borough by year?" - 确定性、无幻觉的 SQL RAG 结果;迭代式、基于会话的 SQL RAG 优化 - 优化后的 SQL RAG 结果) |
| diff 🚀 | 以惊人的速度查找两个 CSV 之间的差异! 例如 在 600ms 内比较两个 100 万行 x 9 列的 CSV! |
| edit | 替换由行和列指定的单元格的值。 |
| enum 👆 | 通过添加一列递增或 uuid 标识符来枚举行,从而添加新列。也可用于复制列或用常量值填充新列。 |
| excel 🚀 | 将指定的 Excel/ODS 工作表导出为 CSV 文件。 |
| exclude 👆 | 基于指定列,从一组 CSV 数据中移除另一组数据。 |
| explode 🔣👆 | 根据给定的分隔符拆分列值,将行拆分为多行。implode 的逆操作。 |
| extdedup 👆 | 使用内存映射的 磁盘哈希表 从任意大小的 CSV/文本文件中删除重复行。与 dedup 命令不同,此命令不会将整个文件加载到内存中,也不会对去重后的文件进行排序。 |
| extsort 📇🚀👆 | 使用多线程 外部归并排序 算法对任意大小的 CSV/文本文件进行排序。 |
| fetch✨ 📇🧠🌐 | 使用 HTTP Get 为每一行向 Web 服务发送/获取数据。内置 HTTP/2 自适应流量控制,支持 jaq JSON 查询语言,动态限流(RateLimit)以及缓存,可使用 Redis 或磁盘缓存实现持久化缓存。 |
| fetchpost✨ 📇🧠🌐⛩️ | 类似于 fetch,但使用 HTTP Post(HTTP GET 与 POST 方法)。支持 HTML 表单(application/x-www-form-urlencoded)、JSON(application/json)和自定义内容类型——并能够使用 MiniJinja 模板引擎利用 CSV 数据渲染负载。 |
| fill 👆 | 填充空值。 |
| fixedwidth | 将固定宽度文本(字段位于固定的字节列位置,无分隔符)转换为 CSV。 |
| fixlengths | 通过填充或截断,强制 CSV 具有相同长度的记录。 |
| flatten | CSV 记录的扁平化视图。适用于一次查看一条记录。 例如 qsv slice -i 5 data.csv | qsv flatten。 |
| fmt | 使用不同的分隔符、记录终止符或引号规则重新格式化 CSV。(支持 ASCII 分隔数据。) |
| foreach✨ | 对给定 CSV 文件中的每条记录执行一次 shell 命令。 |
| frequency 📇😣🏎️👆🪄 ![]() | 构建各列的频率分布表。如果存在索引,则使用多线程以加快速度(示例:CSV JSON TOON)。 |
| get✨ 📇🧠🌐 ![]() | 从本地文件、URL(http/https 和 dathere://)以及 CKAN(ckan://)获取表格数据,并放入可管理的、可查询的磁盘缓存中——支持条件重新验证(ETag/Last-Modified)、透明的 zstd 压缩、BLAKE3 哈希及自动索引。缓存的资源可通过 dc: 前缀被任何 qsv 命令复用(例如 qsv stats dc:data.csv),过期条目会自动刷新。高效地为 luau 查找表、validate dynamicEnum 参考数据提供种子,并加速 Datapusher+ 采集。 |
| geocode✨ 📇🧠🚀🌐🔣👆🌎 | 针对可更新的 Geonames 城市本地副本和 Maxmind GeoLite2 数据库进行地理编码——借助缓存和多线程,此离线路径每秒可地理编码多达 360,000 条记录!也可通过 OpenCage 地理编码器在线进行地理编码(正向和反向)。 |
| geoconvert✨ 🌎 | 在多种空间格式与 CSV/SVG 之间进行转换,包括 GeoJSON、SHP 等。 |
| headers 🗄️ | 显示 CSV 的表头。或显示多个 CSV 文件之间所有表头的交集。 |
| implode 😣👆 | 通过按关键列分组并使用给定分隔符连接值列来合并行。这是 explode 的逆操作。 |
| index | 为 CSV 创建索引(📇)。此操作非常快速(即使是 15gb、2800 万行的 NYC 311 数据集也仅需 14 秒完成索引)& 提供对 CSV 的常数时间索引/随机访问。有了索引,count、sample & slice 可即时工作;luau 中启用随机访问模式;并且为 frequency、split、stats & schema 命令启用多线程(🏎️)。 |
| input | 读取具有特殊注释、引号、修剪、行跳过 & 非 UTF8 编码处理规则的 CSV 数据。通常用于“规范化” CSV,以便使用其他 qsv 命令进行进一步处理。 |
| join 📇😣👆 | 内连接、外连接、右连接、交叉连接、反连接 & 半连接。自动创建一个简单的内存哈希索引以使其快速。 |
| joinp✨ 🐻❄️🚀🪄 | 使用 Pola.rs 引擎进行内连接、外连接、右连接、交叉连接、反连接、半连接、非等值 & asof 连接。与 join 命令不同,joinp 可以处理大于 RAM 的文件,是多线程的,具有连接键验证、保持行顺序选项、连接前和连接后过滤、连接键 Unicode 规范化,支持“特殊”的 非等值连接 和 asof 连接(这对 时间序列数据特别有用)& 其输出列可以合并。 |
| json 👆 | 将 JSON 数组转换为 CSV。 |
| jsonl 🚀🔣 | 将换行符分隔的 JSON(JSONL/NDJSON)转换为 CSV。参见 tojsonl 命令将 CSV 转换为 JSONL。 |
| lens✨ 🗃️🐻❄️🖥️ | 使用 csvlens 引擎交互式地查看、搜索和过滤表格数据文件。除了 CSV 及其方言外,还支持 Arrow、Avro/IPC、Parquet、JSON 数组和 JSONL 格式(需启用 "polars" 功能)。 |
| luau✨ 📇🌐🔣📚 ![]() | 通过为 CSV 文件的每一行执行 Luau 0.728 表达式/脚本(顺序模式),或使用带索引的 随机访问(随机访问模式),创建多个新的计算列、过滤行、计算聚合值并构建复杂的数据管道。 可以处理单个 Luau 表达式,或使用带有离散 BEGIN、MAIN 和 END 部分的 完整数据处理脚本,支持查找表。 它不仅仅是一个 qsv 命令,而是 qsv 的 领域特定语言 (DSL),并提供了 众多 qsv 特定的辅助函数 以构建生产级数据管道。 |
| moarstats 📇🏎️ | 向现有的 stats CSV 文件添加多达 56 项额外的统计度量,包括扩展的离群值、稳健性和双变量统计。(示例)。 |
| partition 👆 | 基于列值对 CSV 进行分区。 |
| pivotp✨ 🐻❄️🚀🪄 | 对 CSV 数据进行透视。具备基于数据类型和统计信息的“智能”聚合自动选择功能。 |
| pragmastat 📇🤯🎲🪄 | 使用 Pragmastat 库计算实用统计量。利用 stats 缓存自动过滤非数值列并支持 Date/DateTime 列。 |
| pro | 与 qsv pro API 交互。 |
| profile✨ 📇🧠🤖📚⛩️ ![]() | 从 CSV(本地路径或 URL)中提取、推导并推断元数据 - 使用数据集的统计配置文件,并通过可配置的元数据 scheming YAML 规范进行映射和驱动(内置 DCAT-US v3、DCAT-AP v3 和 Croissant 1.1;若使用 geoconnex 功能构建,则包含 Geoconnex),并支持针对 URL 输入的可选 CKAN/DCAT 元数据发现。这实现了大规模的 FAIRification。 |
| prompt✨ 🐻❄️🖥️ | 打开文件对话框,以选择文件作为输入或将输出保存到文件。 |
| pseudo 🔣👆 | 通过用递增标识符替换给定列的值来 Pseudonymise 该列的值。 |
| py✨ 📇🔣 | 通过对 CSV 文件的每一行评估 Python 表达式来创建新的计算列或过滤行。Python 的 f-strings 对于扩展格式化特别有用,并且能够评估 Python 表达式。需要 Python 3.11 或更高版本。 |
| rename | 高效地重命名 CSV 的列。 |
| replace 📇🏎️👆 | 使用正则表达式替换 CSV 数据。将正则表达式单独应用于每个字段。 |
| reverse 📇🤯 | 反转 CSV 中行的顺序。与 sort --reverse 命令不同,它保留具有相同键的行的顺序。如果存在索引,则以恒定内存工作。否则,它将把所有数据加载到内存中。 |
safenames![]() | 修改 CSV 的表头,使其仅包含 "safe" 名称 - 保证是"数据库就绪"/"CKAN 就绪"的名称。 |
| sample 📇🏎️🌐🎲🪄 | 使用十种不同的抽样方法从 CSV 中随机抽取行(可选种子) - reservoir (默认), indexed, bernoulli, systematic, stratified, weighted, varopt, mergeable-reservoir, cluster 及 timeseries 抽样。 --varopt 和 --mergeable-reservoir 模式支持可合并 sketch I/O (--sketch-out/--sketch-in),因此分片输入可以被抽样和合并,而无需重新读取语料库。支持从远程 URL 上的 CSV 进行抽样。使用 stats 缓存来跳过不必要的扫描并指导其抽样策略。 |
| schema 📇😣🐻❄️🏎️👆🪄 | 从 CSV 数据推断 JSON Schema Validation Draft 2020-12 (示例) 或 Polars Schema (示例)。 在 JSON Schema Validation 模式下,它生成一个 .schema.json 文件,其中包含从 stats 推导出的推断数据类型及域/范围验证规则。如果存在索引,则使用多线程以加快速度。参见 validate 命令,使用生成的 JSON Schema 验证类似的 CSV 是否符合该模式。使用 --polars 选项时,它生成一个 .pschema.json 文件,所有 polars 命令(sqlp、joinp 和 pivotp)都使用该文件来确定每列的数据类型并优化性能。两种模式均可编辑并可进行微调。对于 JSON Schema,用于细化推断的验证规则。对于 Polars Schema,用于更改推断的 Polars 数据类型。 |
| scoresql✨ 🐻❄️🪄 | 针对 CSV 文件缓存(stats、moarstats、frequency)分析 SQL 查询,在运行查询之前生成带有可操作优化建议的性能评分。支持 Polars(默认)和 DuckDB 模式。 |
| search 📇🏎️👆 | 在 CSV 上运行正则表达式。将正则表达式应用于选定字段,并仅显示匹配的行。 |
| searchset 📇🏎️👆 | 在单次遍历中对 CSV 运行多个正则表达式。 将正则表达式分别应用于每个字段,并仅显示匹配的行。 |
| select 👆 | 选择、重新排序、反转、复制或删除列。 |
| slice 📇🗃️🏎️ | 从 CSV 的任意部分提取行。当存在索引时,此操作只需解析切片中的行(而不是切片开始之前的所有行)。 |
| snappy 🚀🌐 | 使用 Google 的 Snappy 帧格式对输入进行流式压缩/解压缩(更多信息)。 |
| sniff 📇🤖🌐 ![]() | 快速嗅探并推断 CSV 元数据(分隔符、标题行、前言行、引号字符、flexible、is_utf8、平均记录长度、记录数、内容长度以及嗅探 URL 上的 CSV 时的估计记录数、字段数、字段名称和数据类型)。它也是一个通用的 mime 类型检测器。 |
| sort 🤯🚀👆🎲 | 按 字典序、自然序、数值、逆序、唯一或随机(可选种子)顺序对 CSV 数据进行排序(另见 extsort 和 sortcheck 命令)。 |
| sortcheck 👆 | 检查 CSV 是否已排序。使用 --json 选项时,还可获取记录数、排序中断和重复计数。 |
| split 📇🏎️ | 将一个 CSV 文件拆分为多个 CSV 文件。可以按行数、块数或文件大小进行拆分。如果按行或块拆分时存在索引,则使用多线程以加快速度。 |
| sqlp✨ 📇🗄️🐻❄️🚀🪄 | 对多个 CSV、Parquet、JSONL 和 Arrow 文件运行 Polars SQL(一种 PostgreSQL 方言)查询 - 将查询转换为极速的 Polars LazyFrame 表达式,处理大于内存的 CSV 文件。查询结果可以保存为 CSV、JSON、JSONL、Parquet、Apache Arrow IPC 和 Apache Avro 格式。 |
| stats 📇🤯🏎️👆🪄 | 为 CSV 中的每一列计算多达 48 项 summary statistics 并进行 GUARANTEED 数据类型推断(Null、String、Float、Integer、Date、DateTime、Boolean)(示例)。 如果存在索引,则使用多线程以加快速度。使用索引时,可以在纽约市 311 数据的 100 万行样本上编译“流式”统计信息,耗时不到 0.25 秒,而无需索引则需 2.24 秒。 |
| synthesize✨ 📇🎲🤖 | 生成一个在统计上忠实于源 CSV 的合成 CSV。在源文件上运行 stats + frequency,使合成列重现其每列属性——对分类列进行频率加权采样,对数值/日期列进行四分位分桶生成,并保留空值比例。借助 describegpt --dictionary --infer-content-type 提供的数据字典,语义内容类型会为不可枚举列选择逼真的 fake-rs 伪造器(姓名、电子邮件、地址、UUID 等)。字典中的 relationships 数组保留每行内的列间结构——joint(如城市/州/邮编的功能依赖)、ordered(如 created_date ≤ closed_date 的单调链)以及 correlated(通过高斯 copula 实现的数值相关性)。使用 --seed 可完全复现。 |
| table 🤯 | 使用 elastic tabstops 对齐 CSV 输出以便查看;或创建“对齐的 TSV”文件或固定宽度格式文件。要交互式查看 CSV,请使用 lens 命令。 |
| template 📇🚀🔣📚⛩️ ![]() | 使用 MiniJinja 模板引擎(示例)结合 CSV 数据渲染模板。 |
| to✨ 🗄️🐻❄️🚀 | 将 CSV 文件转换为 Parquet、PostgreSQL、SQLite、Excel (XLSX)、LibreOffice Calc (ODS) 和 Data Package。 |
| tojsonl 📇😣🗃️🚀🔣🪄 | 智能地将 CSV 转换为换行分隔的 JSON(JSONL/NDJSON)。通过先扫描 CSV,它会“智能地”推断每列的适当 JSON 数据类型。请参阅 jsonl 命令以将 JSONL 转换为 CSV。 |
| transpose 🤯👆 | 转置 CSV 的行/列。 |
| validate 📇🗄️🚀🌐📚 ![]() | 验证 CSV 数据 blazingly-fast 使用 JSON Schema Validation (Draft 2020-12) (例如 每秒最多 780,031 行1 使用由 schema 命令生成的 NYC's 311 schema) & 将无效记录放入单独的文件,并附带详细的验证错误报告。支持多种自定义 JSON Schema 格式 & 关键字: * currency 带有 ISO-4217 验证的自定义格式 * dynamicEnum 支持针对文件系统或 URL 上的 CSV 进行枚举验证的自定义关键字 (支持 http/https/ckan & dathere URL 方案)* uniqueCombinedWith 用于跨多列验证唯一性以进行复合键验证的自定义关键字。如果未提供 JSON schema 文件,则验证 CSV 是否符合 RFC 4180 标准 且为 UTF-8 编码。 |
| viz✨ 🪄📇🏎️👆🤖🌐🌎 | 使用 plotly 从 CSV 数据生成交互式图表 & 地图。 viz smart 创建一个 Data Schematic — 数据集 schema & 统计信息的 "neuro-symbolic" 交互式渲染 — 使用数据集的统计信息、频率分布、数据字典 & 可选的 LLM 元数据推理/分类来选择适当的可视化,并带有自动地理编码增强。使用 viz_static 功能输出自包含的交互式 HTML 或静态 PNG/SVG/PDF/JPEG/WebP。 (Gallery) |
✨: 由 feature flag 启用。
📇: 在可用时使用索引。
🤯: 将整个 CSV 加载到内存中,尽管 dedup、stats 和 transpose 也支持“流式”模式。
😣: 使用的额外内存与 CSV 中列的基数成正比。
🧠: 昂贵操作会被记忆化,fetch 命令支持可用的跨会话 Redis/磁盘缓存。
🗄️: 扩展输入支持。
🗃️: 有限的扩展输入支持。
🐻❄️: 由 向量化查询引擎驱动/加速的命令。
🤖: 使用自然语言处理或生成式 AI 的命令。
🏎️: 多线程,和/或在有索引(📇)时更快。
🚀: 即使没有索引也是多线程的。
: 具有 CKAN 感知集成选项。
🌐: 具有 Web 感知选项。
🔣: 需要 UTF-8 编码的输入。
👆: 支持强大的列选择器。语法参见 select。
🪄: 使用统计和/或频率表来“更智能”且“更快”工作的“自动魔法”命令。
📚: 支持查找表,允许在运行时对本地或远程参考 CSV 进行“查找”。
🌎: 具有地理空间功能。
⛩️: 使用 MiniJinja 模板引擎。
: 使用 Luau 0.728 作为嵌入式脚本 DSL。
🎲: 随机生成或随机化输出,并提供 --seed 选项以确保可复现性。
🖥️: 属于用户界面 (UI) 功能组的一部分。
安装选项
[!TIP] 要安装 qsv MCP Server 和/或 qsv Claude Cowork 插件,请参阅 入门指南。
选项 0:qsv pro
如果您更喜欢使用图形界面而非命令行来探索数据,不妨试试 qsv pro。借助 qsv,qsv pro 只需拖放文件即可帮助您快速分析电子表格数据,并提供许多其他交互式功能。在 qsvpro.dathere.com 了解更多,或点击下方徽章之一直接下载 qsv pro。
选项 1:下载预构建二进制文件
功能齐全的预构建 二进制变体 提供了适用于 Linux、macOS 和 Windows 的最新 qsv 版本,可 下载,其中包括使用 Rust Nightly 编译的二进制文件(更多信息)。您可以点击下方基于您平台的徽章,下载包含预构建二进制文件的 ZIP 文件。
Apple Silicon、Windows for ARM、IBM Power 服务器(PowerPC64 LE Linux) 和 IBM Z 大型机(s390x) 的预构建二进制文件已启用 CPU 优化(target-cpu=native)。macOS Apple Silicon、Linux x86_64 (GNU)、Linux ARM64 (GNU) 和 Windows x86_64 (MSVC) 的预构建文件也使用 Profile Guided Optimization (PGO) 进行编译,以获得更多的性能提升。
我们未在 x86_64 平台的预构建二进制文件上启用 CPU 优化,因为 CPU 变体过多,这通常会导致非法指令(SIGILL)错误。如果您仍然遇到 SIGILL 错误,发布 zip 归档文件中还包含“便携式”二进制文件(禁用所有 CPU 优化)(qsv 带有表示便携式的 "p" 后缀 - 例如 qsvp, qsvplite qsvpdp)。
对于 Windows,x86_64 MSVC qsvp 二进制文件还有一个 MSI “简易安装程序”。下载并安装简易安装程序后,启动简易安装程序并点击“Install qsv”,以将最新的 qsvp 预构建二进制文件下载到一个已添加到您的 PATH 的文件夹中。之后 qsv 应该已安装完毕,您可以启动一个新的终端来使用 qsv。
对于 macOS,我们使用 "ad-hoc" 签名 来签署我们的二进制文件,因此在你首次运行 qsv 之前,需要 设置适当的 Gatekeeper 安全设置 或运行以下命令以移除 qsv 的隔离属性:
# replace qsv with qsvmcp, qsvlite, qsvdp, qsvpy* if you installed those binary variants
sudo xattr -d com.apple.quarantine qsv
使用预构建二进制文件的额外好处是,它们启用了 self_update 功能,允许您通过简单的 qsv --update 快速将 qsv 更新到最新版本。为了进一步的安全,self_update 功能仅从此 GitHub 仓库获取 releases,并在安装更新前自动验证下载的 zip 归档文件的签名。
[!NOTE]
luau功能在musl预构建二进制文件中不可用2。
手动验证预构建二进制文件 Zip 归档文件的完整性
所有预构建二进制文件 zip 归档文件均使用 zipsign 和以下公钥 qsv-zipsign-public.key 进行签名。要验证下载的 zip 归档文件的完整性:
# if you don't have zipsign installed yet
cargo install zipsign
# verify the integrity of the downloaded prebuilt binary zip archive
# after downloading the zip archive and the qsv-zipsign-public.key file.
# replace <PREBUILT-BINARY-ARCHIVE.zip> with the name of the downloaded zip archive
# e.g. zipsign verify zip qsv-0.118.0-aarch64-apple-darwin.zip qsv-zipsign-public.key
zipsign verify zip <PREBUILT-BINARY-ARCHIVE.zip> qsv-zipsign-public.key
选项 2:包管理器与发行版
qsv 也由多个包管理器和发行版提供分发。
以下是使用各种包管理器和发行版安装 qsv 的相关命令:
# Arch Linux Extra Repository (https://archlinux.org/packages/extra/x86_64/qsv/)
pacman -S qsv
# Homebrew on macOS/Linux (https://formulae.brew.sh/formula/qsv#default)
brew install qsv
# MacPorts on macOS (https://ports.macports.org/port/qsv/)
sudo port install qsv
# Mise on Linux/macOS/Windows (https://mise.jdx.dev)
mise use -g qsv@latest
# Nixpkgs on Linux/macOS (https://search.nixos.org/packages?channel=unstable&show=qsv&from=0&size=50&sort=relevance&type=packages&query=qsv)
nix-shell -p qsv
# Scoop on Windows (https://scoop.sh/#/apps?q=qsv)
scoop install qsv
# Void Linux (https://voidlinux.org/packages/?arch=x86_64&q=qsv)
sudo xbps-install qsv
# Conda-forge (https://anaconda.org/conda-forge/qsv)
conda install conda-forge::qsv
请注意,这些包管理器/发行版提供的 qsv 启用了不同的功能(例如,Homebrew 启用了 apply、fetch、foreach、geocode、lens、luau 和 to 功能。不过,它会自动为 bash、fish 和 zsh shell 安装 shell 补全)。
要了解某个包/发行版的 qsv 启用了哪些功能,请运行 qsv --version(更多信息)。
本着开源的精神,这些包由希望让 qsv 在各种环境中更容易安装的志愿者维护。我们对此深表感激,并通过 GitHub 与包维护者进行松散的合作,但请注意,这些包是由第三方维护的。
Debian 包
datHere 还维护了一个针对 x86_64 架构上最新 Ubuntu LTS 的 Debian 包,以便更容易地通过 DataPusher+ 安装 qsv。
要在 Ubuntu/Debian 上安装 qsv:
wget -O - https://dathere.github.io/qsv-deb-releases/qsv-deb.gpg | sudo gpg --dearmor -o /usr/share/keyrings/qsv-deb.gpg
echo "deb [signed-by=/usr/share/keyrings/qsv-deb.gpg] https://dathere.github.io/qsv-deb-releases ./" | sudo tee /etc/apt/sources.list.d/qsv.list
sudo apt update
sudo apt install qsv
选项 3:从源码编译
git clone https://github.com/dathere/qsv.git
cd qsv
cargo build --release --locked --bin qsv --features all_features
编译后的二进制文件将位于 ./target/release/。
# to compile qsv with all features enabled
cargo build --release --locked --bin qsv --features feature_capable,apply,fetch,foreach,geocode,geoconnex,get,get_cloud,luau,mcp,magika,polars,profile,self_update,synthesize,to,ui,viz_static
# shorthand
cargo build --release --locked --bin qsv -F all_features
# enable all CPU optimizations for the current CPU (warning: creates non-portable binary)
CARGO_BUILD_RUSTFLAGS='-C target-cpu=native' cargo build --release --locked --bin qsv -F all_features
# or build qsv with only the fetch and foreach features enabled
cargo build --release --locked --bin qsv -F feature_capable,fetch,foreach
# for qsvmcp - MCP server optimized variant
cargo build --release --locked --bin qsvmcp -F qsvmcp
# for qsvlite
cargo build --release --locked --bin qsvlite -F lite
# for qsvdp
cargo build --release --locked --bin qsvdp -F datapusher_plus
[!NOTE] 若要使用 Rust nightly 进行构建,请参阅 Nightly Release Builds。
feature_capable、qsvmcp、lite和datapusher_plus是互斥的功能。有关更多信息,请参阅 Special Build Features。
Variants
qsv 有五种二进制变体:
qsv- feature-capable(✨), with the prebuilt binaries enabling all applicable features except Python 2qsvpy- same asqsvbut with the Python feature enabled. Three subvariants are available - qsvpy311, qsvpy312 & qsvpy313 - which are compiled with the latest patch version of Python 3.11, 3.12 & 3.13 respectively. We need to have a binary for each Python version as Python is dynamically linked (more info).qsvmcp- optimized for MCP (Model Context Protocol) server use with geocode, get, get_cloud, mcp, polars, profile, self_update, synthesize, to, and viz_static features enabled. Sharessrc/main.rswithqsv.qsvlite- all features disabled (~16% of the size ofqsv). If you are migrating from xsv and want the same experience and feature set, this is the variant for you.qsvdp- optimized for use with DataPusher+ with only DataPusher+ relevant commands;applydp, a slimmed-down version of theapplyfeature; the--progressbaroption disabled; and the self-update only checking for new releases, requiring an explicit--update(~16% of the size ofqsv).
[!NOTE] 带有 "p" 后缀的 qsv "portable" 子变体可用 -
qsvp,qsvplite和qsvpdp。这些子变体在编译时未启用任何 CPU 特性。如果您拥有旧的 CPU 架构,或在运行常规 qsv 二进制文件时遇到 "Illegal instruction (SIGILL)" 错误,请使用这些子变体。
Shell Completion
qsv 具有广泛且可扩展的 shell completion 支持。它目前支持以下 shell:bash、zsh、powershell、fish、nushell、fig 和 elvish。你可以点击下方的徽章之一来下载适用于你 shell 的 shell completions 脚本:
要自定义 shell 补全,请参阅 Shell Completion 文档。如果你使用的是 Bash,还可以按照 100.dathere.com 上的分步教程来学习如何启用 Bash shell 补全。
正则表达式语法
--select 选项和若干命令(apply、applydp、datefmt、exclude、fetchpost、replace、schema、search、searchset、select、sqlp、stats 和 validate)允许用户指定正则表达式。我们使用 regex crate 来解析、编译和执行这些表达式。4
其语法可在 此处 找到,"它与其他正则引擎类似,但缺少一些已知无法高效实现的功能。这包括但不限于环视(look-around)和反向引用(backreferences)。作为交换,此 crate 中的所有正则搜索都具有最坏情况 O(m * n) 的时间复杂度,其中 m 与正则表达式的大小成正比,n 与被搜索字符串的大小成正比。"
如果你想测试你的正则表达式,regex101 支持 regex crate 使用的语法。只需选择 "Rust" 风味即可。
[!CAUTION] JSON SCHEMA VALIDATION REGEX: 当
schema命令推断 JSON Schema Validation 文件时,如果使用--pattern-columns选项,将为选定的列推导出一个正则表达式。虽然推导出的正则表达式保证有效,但它可能不是最高效的。
在将生成的 JSON Schema 文件用于生产环境并与validate命令配合使用之前,建议用户检查并根据需要优化推导出的正则表达式。
在此过程中,请注意,在 JSON Schema Validation 模式下,validate命令也可以使用--fancy-regex选项支持包含环视(look-around)和反向引用(backreferences)的“高级”正则表达式。
File formats
qsv 识别 UTF-8/ASCII 编码的 CSV (.csv)、SSV (.ssv) 和 TSV 文件 (.tsv & .tab)。CSV 文件假定使用 ","(逗号)作为分隔符,SSV 文件使用 ";"(分号)作为分隔符
而 TSV 文件使用 "\t"(制表符)作为分隔符。分隔符是一个单个的 ASCII 字符,可以通过 --delimiter 命令行选项设置,
或者通过 QSV_DEFAULT_DELIMITER 环境变量设置,或者在设置 QSV_SNIFF_DELIMITER 时自动检测。
当使用 --output 选项时,qsv 将以 UTF-8 编码文件,并根据文件扩展名自动更改生成文件中使用的分隔符 - 即 .csv 使用逗号,.ssv 使用分号,.tsv & .tab 文件使用制表符。
JSON 文件会被识别并通过 json 命令转换为 CSV。
JSONL/NDJSON 文件也会被识别,并分别通过 jsonl 和 tojsonl 命令与 CSV 进行相互转换。
fetch 和 fetchpost 命令在未使用 --new-column 选项调用时也会生成 JSONL 文件,在使用 --report 选项时生成 TSV 文件。
excel、safenames、sniff、sortcheck 和 validate 命令使用其 JSON 选项生成符合 JSON API 1.1 规范 的 JSON 文件,因此可以返回详细的机器友好元数据,供其他系统使用。
schema 命令生成带有 ".schema.json" 文件扩展名的 JSON Schema Validation (Draft 2020-12) 文件,该文件可与 validate 命令配合使用,以验证具有相同架构的其他 CSV 文件。
describegpt 和 frequency 命令也都会生成 TOON 文件。TOON 是用于 LLM 提示的 JSON 数据模型的紧凑、人类可读编码。
excel 命令识别 Excel 和 Open Document Spreadsheet(ODS) 文件(.xls、.xlsx、.xlsm、.xlsb 和 .ods 文件)。
说到 Excel,如果您在 Excel 中打开 qsv 生成的 CSV 文件时遇到问题,请设置 QSV_OUTPUT_BOM 环境变量,以在生成的 CSV 文件开头添加 字节顺序标记。这是针对 Excel 的 UTF-8 编码检测错误 的变通方法。
to 命令可将 CSV 转换为 Parquet、Excel .xlsx、LibreOffice/OpenOffice Calc .ods 及 Data Package 格式,并填充 PostgreSQL 和 SQLite 数据库。
sqlp 命令以 CSV、JSON、JSONL、Parquet、Apache Arrow IPC 及 Apache AVRO 格式返回查询结果。Polars SQL 还支持通过其 read_csv、read_ndjson、read_parquet 及 read_ipc table functions 直接以各种格式读取外部文件。
sniff 命令还可以使用 --no-infer 或 --just-mime 选项检测任何文件的 mime 类型,无论是本地还是远程(支持 http 和 https 协议)。
它可以检测 130 多种文件格式,包括 MS Office/Open Document 文件、JSON、XML、PDF、PNG、JPEG 以及 GPX、GML、KML、TML、TMX、TSX、TTML 等专用地理空间格式。
点击 此处 查看完整列表。
[!TIP] 当启用
polars功能时,qsv 还可以原生读取.parquet、.ipc、.arrow、.json及.jsonl文件。
Extended Input Support
cat、headers、sqlp、to 及 validate 命令具有扩展输入支持(🗄️)。如果输入为 - 或为空,该命令将尝试使用 stdin 作为输入。如果不是,它将检查是否为目录,如果是,则将目录中的所有文件添加为输入文件。
如果它是一个文件,它会首先检查是否具有 .infile-list 扩展名。如果有,它将加载该文本文件并将每一行解析为输入文件路径。这是一种处理大量输入文件更快且更便捷的方式,无需将它们全部作为独立的命令行参数传递。此外,文件路径可以位于文件系统的任何位置,甚至在不同的卷上。如果输入文件路径不是完全限定的,则将其视为相对于当前工作目录的路径。空行和以 # 开头的行将被忽略。无效的文件路径将被记录为警告并跳过。
对于目录和 .infile-list 输入,具有 .sz 或 .zip 扩展名的 snappy 压缩文件将被自动解压。
最后,如果它只是一个普通文件,则将其视为普通输入文件。
有限的扩展输入支持
describegpt、lens、slice 和 tojsonl 命令具有有限的扩展输入支持(🗃️)。它们的区别在于只处理一个文件。如果提供了 .infile-list 或压缩的 .sz 或 .zip 文件,它们将只处理第一个文件。
关于
.zip输入的说明。 qsv 将.zip归档视为 分隔文本 文件(CSV/TSV/TAB/SSV)的容器。使用归档顺序中的第一个此类条目;具有完整扩展输入支持的命令使用 所有 条目。目录和系统条目(__MACOSX、.DS_Store、…)会被跳过,路径遍历("zip-slip")条目会被拒绝。在.zip内部嵌套 特殊二进制格式(Parquet、Avro 或 Arrow)是 不推荐的工作流 —— 这些格式本身已经压缩,因此对其进行 zip 压缩没有意义 —— 并且它 未被统一处理:大多数命令仅选择第一个 CSV/TSV/TAB/SSV 条目(如果.zip中不包含此类条目则报错),而具有完整扩展输入支持的命令(cat、headers、sqlp、to和validate)确实 会提取非表格的支持条目。为了获得可预测的结果,请 直接 提供.parquet/.avro/.arrow文件(qsv 原生读取它们)。参见 #3988。
自动压缩/解压缩
qsv 支持使用 Snappy 帧格式 进行 自动压缩/解压缩。选择 Snappy 而非 gzip 等更流行的压缩格式,是因为它专为 高性能流式压缩与解压缩 而设计(压缩速度高达 2.58 gb/sec,解压缩速度为 0.89 gb/sec)。
对于除 index、extdedup 和 extsort 命令之外的所有命令,如果输入文件具有 ".sz" 扩展名,qsv 在读取时会 自动 执行流式解压缩。此外,如果输入文件具有扩展的 CSV/TSV ".sz" 扩展名(例如 nyc311.csv.sz/nyc311.tsv.sz/nyc311.tab.sz),qsv 还会使用文件扩展名来确定要使用的分隔符。
类似地,如果 --output 文件具有 ".sz" 扩展名,qsv 在写入时会 自动 执行流式压缩。
如果输出文件具有扩展的 CSV/TSV ".sz" 扩展名,qsv 还会使用文件扩展名来确定要使用的分隔符。
但请注意,压缩文件无法建立索引,因此索引加速命令(frequency、schema、split、stats、tojsonl)将不会多线程运行。没有索引时,随机访问也会被禁用,因此 slice 不会即时完成,且 luau 的随机访问模式将不可用。
此外,还有一个专用的 snappy 命令,包含四个用于直接操作 snappy 文件的子命令——一个多线程的 compress 子命令(比内置的单线程自动压缩快 5-6 倍);一个带有详细压缩元数据的 decompress 子命令;一个用于快速检查文件是否具有 Snappy 头的 check 子命令;以及一个用于确认 Snappy 文件是否有效的 validate 子命令。
snappy 命令可用于压缩/解压缩任何文件,而不仅仅是 CSV/TSV 文件。
使用 snappy 命令,我们可以将纽约市 311 数据(15gb,28m 行)压缩至 4.95 gb,耗时 5.77 秒,使用多线程 compress 子命令 - 2.58 gb/sec,压缩率为 0.33 (3.01:1)。 使用 snappy decompress,我们可以在 16.71 秒 内往返解压缩同一文件 - 0.89 gb/sec。
将其与 zip 3.0 进行比较,后者在同一机器上将同一文件压缩至 2.9 gb,耗时 248.3 秒 - 速度慢了 43 倍,为 0.06 gb/sec,压缩率为 0.19 (5.17:1) - 仅额外节省了 14% (2.45 gb) 的空间。 zip 往返解压缩同一文件也耗时 4.3 倍,为 72 秒 - 0.20 gb/sec。
[!TIP] qsv 除了 Snappy 之外还支持额外的压缩格式:
sqlp命令可以:
- 自动解压 gzip、zstd 和 zlib 压缩的输入文件
- 在使用 Arrow、Avro 和 Parquet 格式时自动压缩输出文件(通过
--format和--compression选项)当启用
polars功能时,qsv 可以自动解压这些压缩文件格式:
- CSV:
.csv.gz,.csv.zst,.csv.zlib- TSV/TAB:
.tsv.gz,.tsv.zst,.tsv.zlib;.tab.gz,.tab.zst,.tab.zlib- SSV:
.ssv.gz,.ssv.zst,.ssv.zlib
.zip归档文件在所有构建版本中都会自动解压(包括 qsvlite —— zip 不需要 polars):使用归档顺序中的第一个 CSV/TSV/TAB/SSV 条目,分隔符取自该条目的扩展名。如果.zip中没有 CSV/TSV/TAB/SSV 条目,则会报错,而不是将任意文件解析为 CSV。此自动解压功能既适用于通过 qsv 标准 CSV 读取器读取的命令(例如
count,stats,frequency),也适用于作为luau,validate和describegpt查找表加载的参考数据。压缩的远程/下载源也会在缓存之前自动解压,因此缓存的副本是纯 CSV(分隔符正确,自动索引):远程
luau/validate/describegpt查找表(http/https,dathere://,ckan://)以及get/dc:缓存资源。.zip/.sz在所有包含这些命令的构建版本中均可用;.gz/.zlib/.zst需要flate2/zstd编解码器(包含在标准qsv和qsvmcp构建版本中),否则可操作的错误信息会指出缺失的构建功能。支持扩展输入和有限扩展输入的命令以不同方式处理
.zip:它们将.zip的内容展开为输入文件(对于cat/sqlp/to等扩展输入命令,展开所有条目;对于slice/tojsonl等有限扩展输入命令,仅展开第一个条目)。
RFC 4180 CSV 标准
qsv 遵循 RFC 4180 CSV 标准。然而,在现实生活中,CSV 格式差异很大 & qsv 实际上并不严格符合该规范,因此它可以处理“现实世界”中的 CSV 文件。 qsv 利用出色的 Rust CSV crate 来读取/写入 CSV 文件。
点击 此处 了解 qsv 如何使用此 crate 符合该标准的更多详细信息。
在处理“非典型”CSV 文件时,您可以使用 input & fmt 命令将它们规范化为符合 RFC 4180 标准。
UTF-8 编码
qsv 需要 UTF-8 编码的输入(ASCII 是其子集)。
如果您需要重新编码 CSV/TSV 文件,可以使用 input 命令进行“有损保存”到 UTF-8 - 将无效的 UTF-8 序列替换为 � (U+FFFD REPLACEMENT CHARACTER)。
或者,如果您希望真正转码为 UTF-8,有一些实用工具,如 iconv,您可以在 Linux/macOS & Windows 上使用它们来完成此操作。
Windows Powershell 和 Windows Excel 使用注意事项
与其他现代操作系统不同,Microsoft Windows 的 默认编码 是 UTF16-LE。这会导致在 Powershell 中将 qsv 的输出重定向到 CSV 文件并尝试用 Excel 打开时出现问题 - 所有内容都会在第一列中,因为 UTF16-LE 编码的 CSV 文件不会被 Excel 正确识别。
# the following command will produce a UTF16-LE encoded CSV file on Windows
qsv stats wcp.csv > wcpstats.csv
这很奇怪,因为你会认为 Microsoft 自家的 Excel 能够正确识别 UTF16-LE 编码的 CSV 文件。无论如何,要在 Windows 上创建一个正确 UTF-8 编码的文件,请使用 --output 选项:
# so instead of redirecting stdout to a file on Windows
qsv stats wcp.csv > wcpstats.csv
# do this instead, so it will be properly UTF-8 encoded
qsv stats wcp.csv --output wcpstats.csv
或者,qsv 可以在 CSV 文件开头添加 字节顺序标记 (BOM),以表明其采用 UTF-8 编码。您可以通过将 QSV_OUTPUT_BOM 环境变量设置为 1 来实现此操作。
这将使 Windows 上的 Excel 能够正确识别该 CSV 文件为 UTF-8 编码。
请注意,macOS 上的 Excel 不存在此问题,因为 macOS(与大多数其他 *nix 系统一样)默认使用 UTF-8 编码。
在其他操作系统上生成的 qsv 输出文件也不存在此问题,因为 Windows 上的 Excel 能够正确识别 UTF-8 编码的 CSV 文件。
解释器
对于复杂的数据处理任务,您可以使用 Luau 和 Python 脚本。
对于复杂的数据处理任务,推荐优先使用 Luau 而非 Python,因为它速度更快、内存效率更高、没有外部依赖,并且作为 qsv 的 DSL 提供了多个数据处理辅助函数。
有关更多信息,请参阅 Luau 与 Python。
qsv 包含的另一个“解释器”是 MiniJinja,它用于 template 和 fetchpost 命令。
内存管理
qsv 支持三种内存分配器 - jemalloc(默认)、mimalloc 和标准分配器。
有关更多信息,请参阅 内存分配器。
它还具备内存溢出(Out-of-Memory)防护功能,具有两种模式 - NORMAL(默认)和 CONSERVATIVE。
有关更多信息,请参阅 内存溢出防护。
环境变量与 dotenv 文件支持
qsv 支持广泛的环境变量列表,并支持使用 .env 文件来设置它们。
有关详细信息,请参阅 环境变量 和 dotenv.template 文件。
功能标志
qsv 具有多个 功能标志,可用于启用/禁用可选功能。
有关更多信息,请参阅 功能。
最低支持的 Rust 版本
qsv 的 MSRV 策略是要求最新的稳定版 Rust 版本,且该版本需 受 Homebrew 支持,目前为 。
qsv 本身可能会升级其 MSRV,但只有当 Homebrew 支持最新的 Rust 稳定版时,才会发布新的 qsv 版本。
目标 / 非目标
QuickSilver 的目标,按优先级排序,是:
- 尽可能快 - 为此,它采用频繁发布、激进的 MSRV 策略、利用 CPU 特性、采用各种缓存策略、使用 HTTP/2,并在可能且合理的情况下使用多线程。它还会在尽可能的时候使用最新的依赖项,并使用 Cargo
patch来获取其依赖项中未发布的修复/功能。更多信息请参阅 Performance。 - 能够处理非常大的文件 - 大多数 qsv 命令都是流式的,使用恒定内存,并且可以处理任意大小的 CSV 文件。对于那些需要将整个 CSV 加载到内存中的命令(以 🤯 标记),qsv 具有内存溢出(Out-of-Memory)防护、批处理策略以及使用磁盘来处理大于内存文件的 "ext"ernal 命令。更多信息请参阅 Memory Management。
- 一套完整的数据处理工具包 - qsv 旨在成为一套全面的数据处理工具包,可用于快速分析和调查,同时也足够健壮,可用于生产数据管道。其众多命令针对常见的数据处理任务,并且可以使用其基于 Luau 的 DSL 组合/构建成复杂的数据处理脚本。
Luau 还将作为整个 qsv recipes 库的骨干 - 用于常见任务(例如街道级地理编码、删除 PII、数据增强等)的可重用脚本,这些脚本会提示输入易于修改的参数。 - 可组合/可互操作 - qsv 旨在具备可组合性,重点在于与其他常见 CLI 工具(如 'awk'、'xargs'、'ripgrep'、'sed' 等)以及知名 ETL/ELT 工具(如 Airbyte、Airflow、Pentaho Kettle 等)的互操作性。其命令可通过管道与其他工具组合使用,并支持其他常见文件格式,如 JSON/JSONL、Parquet、Arrow IPC、Avro、Excel、ODS、PostgreSQL、SQLite 等。请参阅 File Formats 以获取更多信息。
- 尽可能便携 - qsv 旨在具备便携性,在多个平台上提供安装程序,并集成了自更新机制。按优先级顺序,它支持 Linux、macOS 和 Windows。请参阅 Installation Options 以获取更多信息。
- 尽可能易用 - qsv 旨在易于使用。就命令行界面而言,它确实易于使用 :shrug:。其命令拥有众多选项,但具有合理的默认值。用法文本是面向数据分析师受众编写的,而非开发人员;并且用法文本中包含大量示例,测试也兼作示例。借助 qsv pro,它在功能上大幅扩展,同时通过其图形用户界面变得更加易用。
- 尽可能安全 - qsv 旨在具备安全性。它没有外部运行时依赖,是 用 Rust 编写 的,并且其代码库会自动通过自动化的 DevSkim、"cargo audit" 和 Codacy Github Actions 工作流进行安全漏洞审计。
它使用最新稳定版 Rust,采用激进的 MSRV 策略,并使用其所有依赖项的最新版本。
它拥有庞大的测试套件,包含约 5,100 个测试,其中包括若干 属性测试,用于为常用命令 随机生成 参数。
其预构建的二进制归档文件经过 zip 签名,因此您可以 验证其完整性。其自更新机制会在应用更新前自动验证预构建二进制归档文件的完整性。 更多信息请参阅 安全性。 - 尽可能易于贡献 - qsv 旨在易于贡献,注重可维护性。其模块化架构允许轻松添加由特性标志控制的自包含命令,源代码注释详尽,用法文本内嵌,并且提供了辅助函数,便于创建额外的命令和支持性测试。更多信息请参阅 特性 和 贡献指南。
QuickSilver 的非目标包括:
- 尽可能小 - qsv 旨在保持小巧,但不会以牺牲性能、功能、可组合性、可移植性、易用性、安全性或可维护性为代价。不过,我们确实有一个
qsvlite变体,其大小约为qsv的 16%,以及一个qsvdp变体,其大小约为qsv的 16%。然而,这些变体的功能有所减少。 此外,多个命令受功能标志(feature flags)控制,因此您可以仅编译 qsv 所需的特性。 - 多语言支持 - qsv 的 usage text 和 messages 仅支持英语。没有计划支持其他语言。这并不意味着它只能处理英语输入文件。
它可以处理任何语言格式良好的 CSV 文件,只要其采用 UTF-8 编码。此外,它支持除逗号以外的其他分隔符/分隔符;apply whatlang操作可检测 87 种语言;其apply thousands, currency and eudex操作支持不同语言和国家的数字、货币和日期解析/格式化约定。
最后,尽管geocode命令的默认 Geonames 索引仅支持英语,但可以使用geocode index-update子命令和--languages选项重建索引,以返回多种语言的地名(支持 254 种语言)。
测试
qsv 共有 5,126 个测试:其中 4,400 个针对 qsv 二进制文件(包括 tests 目录中的 3,553 个集成测试 + 分布在 src/ 个模块中的 847 个单元测试),另有 726 个针对 MCP 服务器和 Cowork 插件(位于 .claude/skills/tests)。
大多数命令都在单独的文件中拥有自己的测试套件,遵循 test_<COMMAND>.rs 的约定。
除了防止回归问题外,这些测试还作为良好的示例,并经常从每个对应命令的使用说明文本中链接。
要测试每个二进制文件变体:
# to test qsv
cargo test --features all_features
# to test qsvlite
cargo test --features lite
# to test all tests with "stats" in the name with qsvlite
cargo test stats --features lite
# to test qsvmcp
cargo test --features qsvmcp
# to test qsvdp
cargo test --features datapusher_plus
# to test a specific command
# here we test only stats and use the
# t alias for test and the -F shortcut for --features
cargo t stats -F all_features
# to test a specific command with a specific feature
# here we test only luau command with the luau feature
cargo t luau -F feature_capable,luau
# to test the count command with multiple features
# we use "test_count" as we don't want to run other tests
# that have "count" in the testname - e.g. test_geocode_countryinfo
cargo t test_count -F feature_capable,luau,polars
# to test using an alternate allocator
# other than the default jemalloc allocator
cargo t --no-default-features -F all_features,mimalloc
许可证
第三方软件
qsv 引入并重新分发了多个开源组件——其中包括
plotly.js 以及(捆绑在其内部的)
MapLibre GL JS,它们驱动 qsv viz;
DataTables,它驱动 viz smart 数据查看器;
LuaDate,被 qsv luau 使用;以及引入的 DCAT-US、DCAT-AP 和
geoconnex 模式,被 qsv profile 使用。
THIRD_PARTY_NOTICES.md 记录了每个组件的上游来源、版本或
固定提交,以及许可证,连同这些许可证要求我们保留的版权声明和许可证文本。示例数据集在
examples/viz/README.md 中有各自的致谢——请注意 world_cities.csv 源自 GeoNames
且采用 CC BY 4.0 许可,如果您重新使用它,必须提供署名。
如果您认为此处有任何内容归属不正确或完全未归属,请 提交 issue——我们宁愿过度署名,也不愿署名不足。
起源
qsv 是流行的 xsv 工具的分支。基于这一坚实基础,它于 2021 年 9 月被分支出来,并自那以后演变为一个通用数据整理工具包,增加了众多命令和功能。 详见 FAQ。
AI 政策
qsv 的开发节奏非常快,发布频繁。为了跟上这一节奏,我们使用最新的 AI 工具来协助完成各种任务,包括代码生成、文档编写、测试、缺陷修复、代码审查等。 为确保工作质量,我们维护了超过 4,000 个测试;使用基于 roborev 和 GitHub Copilot 的多智能体、多模型对抗性代码审查;对代码进行大量注释以帮助 Agent、用户和开发者理解;并使用 Serena 和 Context7 等工具为 Agent 提供语义上下文。
我们在提交信息(commit messages)和拉取请求(pull request)描述中注明所使用的 Agent/模型。贡献者必须执行相同操作——请参阅 CONTRIBUTING.md 中的 AI 政策 以获取完整的贡献者指南(署名、审查、许可)。
赞助
命名冲突
本项目与 Intel 的 Quick Sync Video 无关。
Footnotes
-
luau功能在 musl 平台的预构建二进制文件中默认未启用。这是因为我们使用基于 Ubuntu 20.04 LTS 的 GitHub Action Runners 进行交叉编译,并使用了 musl libc 工具链。然而,Ubuntu 是基于 glibc 的发行版,而非基于 musl 的发行版。我们通过 交叉编译 来绕过此问题。
不幸的是,这阻止了我们交叉编译启用了luau功能的二进制文件,因为这样做需要静态链接宿主操作系统的 libc 库。如果你需要在musl上使用luau功能,你需要在自己的基于 musl 的 Linux 发行版(例如 Alpine、Void、等)上从源代码进行编译。 ↩ ↩2 -
当然,你还需要一个链接器和一个 C 编译器。Linux 用户通常应根据其发行版的文档安装 GCC 或 Clang。 例如,如果你使用 Ubuntu,可以安装
build-essential软件包。在 macOS 上,你可以通过运行$ xcode-select --install来获取 C 编译器。 对于 Windows,这意味着安装 Visual Studio 2022。当提示选择工作负载时,请包含 "Desktop Development with C++", Windows 10 或 11 SDK 以及英语语言包,以及你需要的任何其他语言包。 ↩ -
这与
ripgrep使用的正则引擎相同——极速 grep 替代品,为 Visual Studio 的 神奇 "在文件中查找" 功能提供支持。 ↩

