Scherlok 是一款面向数据团队的零配置数据质量监控工具,其定位是“数据的侦探”。它采用“先学习、后检测”的方式,自动学习数据库表的正常模式,并在发生异常变化时发出警报。整个过程不需要编写 YAML 文件、规则或阈值。
一、用途与核心理念 Scherlok 旨在解决数据团队常见的痛点:源 API 单位突然变化(如从美元变为美分)、列开始返回 NULL、表停止更新、行数在某天突然下降 40% 等问题,而现有工具(如 Great Expectations、Soda、dbt tests)都要求用户预先定义“正确”的标准,需要数百条规则和数十个 YAML 文件,且无法发现尚未想象到的问题。Scherlok 采取相反的方法:先学习正常模式,再检测异常。
二、主要能力
- 自动异常检测:每个异常自动评分,分为 INFO、WARNING 或 CRITICAL,无需配置阈值。
- 多数据源支持:可与 PostgreSQL、BigQuery、Snowflake、MySQL、DuckDB 和 dbt 配合使用。支持的适配器包括 postgres、bigquery、snowflake、mysql、duckdb;其他适配器需显式传入 --connection-string。
- 数据剖析:Scherlok 会剖析每张表,包括行数、列类型、NULL 率、值分布、新鲜度节奏、基数等,并将所有内容本地存储在 SQLite 中。
- 异常警报:警报可发送至 Slack、Discord、Teams、电子邮件,或通过 CI 退出码体现。自动从 URL 检测 Slack、Discord 和 Teams 并格式化负载;其他 URL 接收通用 JSON 负载。
- 学习机制:在五个有效剖析后,Scherlok 使用最新的 30 个剖析结果,针对体积、数值均值偏移、NULL 率和不同计数,从历史基线中学习每个指标的可变性。在冷启动或历史不可用时,保持保守的固定默认值。
- CI/CD 集成:可将 Scherlok 用作数据质量门禁。ci 命令一行完成全部三个步骤;若检测到严重异常,管道会失败,防止坏数据进入生产环境。
- dbt 集成:Scherlok 可补充 dbt test,自动进行异常检测。它读取 target/manifest.json,发现每个物化模型(table、incremental、view),从 profiles.yml 自动解析连接,并对每个模型进行剖析。支持作为 dbt run 后的 CI 门禁,也可使用包装器将两个步骤合并。包装器默认运行 dbt run,并使用 target/run_results.json 中记录的成功模型节点;使用 --build 运行 dbt build。dbt 和 dbt-run-and-watch 均接受 --output json 供 CI 解析器使用。
- dbt 包:可作为 dbt 包安装,用于原生数据质量测试,无需 Python CLI。包含 Tier 1 即时测试(not_null_proportion、row_count_between、recency、unique_proportion)和 Tier 2 自动学习测试(volume_anomaly、null_anomaly,需要 scherlok_metrics 模型构建基线历史)。
- HTML 仪表板:一个自包含的 HTML 文件(约 28 KB),包含 KPI、按表分组的事件(含首次出现时间戳)、+ / − / ~ 模式漂移差异、迷你图和完整异常历史。通过 prefers-color-scheme 自动切换深色/浅色主题。
- MCP 集成:可从 AI 代理(如 Claude Code / Claude Desktop)使用,运行数据质量检查。代理可用的工具包括 list_tables、investigate、watch、status、history 和 check。凭据在服务器端解析,所有操作对仓库只读,没有任意 SQL 工具。
- AI 解释警报(--explain):当异常触发时,Scherlok 为整个批次进行一次 Claude 调用,将根因假设注入同一警报。适用于 watch、ci、check、dbt 和 dbt-run-and-watch。在 dbt 项目中,假设是沿袭感知的。默认使用 Claude Haiku 4.5,每次运行成本远低于一美分(约 $0.003),可通过 SCHERLOK_EXPLAIN_MODEL 覆盖模型。零异常运行不会进行 API 调用。仅发送聚合信息(异常类型/严重性/消息字符串、dbt 模型名称、检测时间戳),绝不发送仓库行、单元格值或凭据。该功能为可选,不传 --explain 即可关闭;API 调用失败时,原始警报会原样发送并附一行说明,警报绝不会因 LLM 阻塞。
三、使用方式 三个命令、五分钟即可完成:
- investigate:学习模式。剖析每张表,将数据存储在本地 SQLite 中。
- watch:检测异常。
- ci <url>:在一行中运行全部三个步骤,用于管道。
警报目标自动检测。dbt 集成步骤:先运行 dbt run,再运行 Scherlok 作为 CI 门禁;也可使用 dbt-run-and-watch 包装器合并。dbt 包安装后可使用原生测试。MCP 使用:Claude Desktop 下载 scherlok-<version>.mcpb 并打开,或按文档配置其他客户端。Docker 镜像:每次发布标签时会发布到 GitHub Container Registry,包含所有仓库附加组件(dbt、bigquery、snowflake),基于 python:3.12-slim 构建,以非特权用户 scherlok 运行。
四、适用场景
- 数据管道中的质量门禁,防止坏数据进入生产。
- 使用 dbt 的团队,需自动异常检测补充 dbt test。
- 需要跨 CI 运行和团队成员共享剖析结果的场景。
- 通过 AI 代理直接运行数据质量检查。
五、限制与说明
- 需要 Python 3.10+。
- 部分功能(如 dbt 包)在 dbt Package Hub 上市后,安装方式将变为 package: rbmuller/scherlok,版本 [">=1.0.0", "<2.0.0"]。
- 支持的数据库适配器有限,其他需显式连接字符串。
- AI 解释功能需要 API 密钥,默认使用 Claude Haiku 4.5。
- 所有操作对仓库只读。
- 许可证为 MIT,由 Robson Bayer Müller 开发。
项目地址:https://github.com/rbmuller/scherlok