DeepSeek 总结的duckdb-behavioral插件说明

📅 发布时间:2026/7/6 2:41:28 👁️ 浏览次数:
DeepSeek 总结的duckdb-behavioral插件说明
受 ClickHouse 启发的 DuckDB 行为分析函数。提供sessionize、retention、window_funnel、sequence_match、sequence_count、sequence_match_events和sequence_next_node函数作为一个用 Rust 编写的可加载 DuckDB 扩展。完全兼容 ClickHouse 行为分析函数。个人项目免责声明这是一个利用个人时间开发的个人项目。它与我的雇主或职业角色没有任何关联、认可或关系。AI 辅助开发披露本项目在 Anthropic 的 ClaudeAI 辅助编程的协助下开发。本着完全透明和学术严谨的原则以下保障措施确保 AI 辅助不会损害正确性、可重复性或可信度434 个单元测试 1 个文档测试涵盖所有函数、边缘情况、合并结合性、基于属性的测试 (proptest) 以及基于突变测试指导的覆盖率。所有测试通过cargo test在 1 秒内运行完成。27 个端到端 SQL 测试针对真实的 DuckDB v1.4.4 实例运行验证从扩展加载到 SQL 执行再到正确结果的完整链路包括 NULL 输入、空表、全部 6 种漏斗模式、5 个以上条件以及全部 8 种方向/基础组合。Criterion.rs 基准测试具有 95% 置信区间每次测量运行 3 次以上并在PERF.md中记录了详细方法。每个性能声明都可以在通用硬件上重现。88.4% 的突变测试击杀率130 个捕获 / 17 个遗漏通过cargo-mutants系统地验证了测试能够检测到真正的故障。零 Clippy 警告在 pedantic、nursery 和 cargo lint 组下。确定性、可重现的构建— 锁定依赖版本 (libduckdb-sys 1.4.4)在 CI 中验证 MSRV 1.80并带有 LTO 和单一代码生成单元的发布配置文件。每次优化会话都记录了假设、技术、带有置信区间的测量前后数据负面结果如实报告PERF.md 中记录了 5 个负面结果。所有源代码均可公开审计遵循 MIT 许可证。AI 工具被用作实现的加速器。所有正确性保证都依赖于自动化测试、可重现的基准测试和透明的文档——而非假设 AI 输出是正确的。目录快速开始函数列表性能社区扩展质量ClickHouse 兼容性状态构建开发文档要求许可证快速开始-- 从 DuckDB 社区扩展仓库安装INSTALL behavioralFROMcommunity;LOADbehavioral;或者从源代码构建# 构建扩展cargo build --release# 在 DuckDB 中加载本地构建的扩展需要 -unsigned 标志duckdb -unsigned -cmdLOAD target/release/libbehavioral.so;-- 基于 30 分钟不活动间隔分配会话 IDSELECTuser_id,event_time,sessionize(event_time,INTERVAL30 minutes)OVER(PARTITIONBYuser_idORDERBYevent_time)assession_idFROMevents;-- 跟踪 1 小时窗口内的转化漏斗步骤SELECTuser_id,window_funnel(INTERVAL1 hour,event_time,event_typepage_view,event_typeadd_to_cart,event_typepurchase)asfurthest_stepFROMeventsGROUPBYuser_id;函数列表函数签名返回类型描述sessionize(TIMESTAMP, INTERVAL)BIGINT窗口函数基于不活动间隔分配会话 IDretention(BOOLEAN, BOOLEAN, ...)BOOLEAN[]群组留存分析window_funnel(INTERVAL [, VARCHAR], TIMESTAMP, BOOLEAN, ...)INTEGER转化漏斗步骤跟踪支持 6 种可组合模式sequence_match(VARCHAR, TIMESTAMP, BOOLEAN, ...)BOOLEAN基于 NFA 的事件序列模式匹配sequence_count(VARCHAR, TIMESTAMP, BOOLEAN, ...)BIGINT计算非重叠模式匹配次数sequence_match_events(VARCHAR, TIMESTAMP, BOOLEAN, ...)LIST(TIMESTAMP)返回匹配条件的时间戳sequence_next_node(VARCHAR, VARCHAR, TIMESTAMP, VARCHAR, BOOLEAN, ...)VARCHAR模式匹配后的下一个事件值所有函数支持2 到 32 个布尔条件与 ClickHouse 的限制一致。每个函数的详细文档、示例和边缘情况行为函数参考性能以下所有测量结果均来自 Criterion.rs 0.8.2具有 95% 置信区间并在通用硬件上跨多次运行验证。函数数据规模墙钟时间吞吐量sessionize10 亿1.20 秒8.3 亿元素/秒retention(合并)1 亿274 毫秒3.65 亿元素/秒window_funnel1 亿791 毫秒1.26 亿元素/秒sequence_match1 亿1.05 秒9500 万元素/秒sequence_count1 亿1.18 秒8500 万元素/秒sequence_match_events1 亿1.07 秒9300 万元素/秒sequence_next_node1 千万546 毫秒1800 万元素/秒关键设计选择16 字节Copy事件带有u32位掩码条件——每四个事件占一个缓存行每个事件零堆分配sessionize和retention的 O(1) 合并通过边界跟踪和位掩码 OR 实现事件收集函数的就地合并——摊余 O(N) 而非重复分配导致的 O(N^2)NFA 快速路径——常见模式类型分派到专门的 O(n) 线性扫描而非完整的 NFA 回溯预排序检测——当事件按时间戳顺序到达时O(n) 检查可跳过 O(n log n) 排序优化亮点优化项加速比技术事件位掩码5–13 倍Vecbool替换为u32位掩码实现Copy语义就地合并高达 2,436 倍摊余 O(N) 扩展而非 O(N^2) 合并分配NFA 惰性匹配在 1M 事件时达 1,961 倍交换探索顺序使.*在消耗前尝试推进Arcstr值2.1–5.8 倍引用计数字符串实现sequence_next_node中的 O(1) 克隆NFA 快速路径39–61%模式分类将常见形状分派到 O(n) 线性扫描有五次尝试的优化经测量被认定为回归并已回滚。所有负面结果均在PERF.md中记录。完整的方法论、带有置信区间的每轮优化历史以及可重现的基准测试说明PERF.md。社区扩展此扩展已列入 DuckDB 社区扩展 仓库PR #1306于 2026-02-15 合并。安装方式如下INSTALL behavioralFROMcommunity;LOADbehavioral;无需构建工具、编译或-unsigned标志。更新流程community-submission.yml工作流自动执行完整的预提交流水线分为 5 个阶段阶段目的验证description.yml架构、版本一致性、必需文件质量门禁cargo test434 文档测试、clippy、fmt、doc构建与测试make configure make release make test_release固定引用将description.yml的 ref 更新为已验证的提交 SHA提交包上传构建产物生成逐步的 PR 命令更新已发布的扩展将更改推送到此仓库重新运行提交工作流以固定新的 ref然后向duckdb/community-extensions打开一个新的 PR更新extensions/behavioral/description.yml中的 ref 字段。当 DuckDB 发布新版本时更新libduckdb-sys、TARGET_DUCKDB_VERSION和extension-ci-tools子模块。质量指标数值单元测试434 1 文档测试端到端测试27针对真实的 DuckDB CLI基于属性的测试26 (proptest)突变测试88.4% 击杀率 (130/147, cargo-mutants)Clippy 警告0pedantic nursery cargo lint 组CI 任务13检查、测试、clippy、fmt、doc、MSRV、基准测试、deny、semver、覆盖率、跨平台、扩展构建基准测试文件7Criterion.rs最高达 10 亿元素发布平台4Linux x86_64/ARM64macOS x86_64/ARM64每次推送和 PR 都会运行 CI跨.github/workflows/的 6 个工作流包括针对真实 DuckDB 的 E2E 测试、CodeQL 静态分析、SemVer 验证以及具有来源证明的 4 平台发布构建。ClickHouse 兼容性状态已完成— 所有 ClickHouse 行为分析函数均已实现。函数状态sessionize已完成retention已完成window_funnel(6 种模式)已完成sequence_match已完成sequence_count已完成sequence_match_events已完成sequence_next_node已完成支持 32 个条件已完成构建前提条件Rust 1.80 (MSRV)一个 C 编译器用于 DuckDB 系统绑定# 构建扩展发布模式cargo build --release# 可加载扩展将位于# target/release/libbehavioral.so (Linux)# target/release/libbehavioral.dylib (macOS)开发cargotest# 434 个单元测试 1 个文档测试cargo clippy --all-targets# 要求零警告cargofmt# 格式化cargo bench# Criterion.rs 基准测试# 通过社区 Makefile 构建扩展gitsubmodule update --initmakeconfiguremakereleasemaketest_release本项目遵循语义化版本。有关应用于 SQL 函数签名的完整 SemVer 规则请参阅版本控制策略。文档入门指南— 安装、加载、故障排除函数参考— 所有 7 个函数的详细文档使用案例— 5 个包含示例数据的完整真实世界示例工程概述— 架构、测试理念、设计权衡性能— 基准测试、优化历史、方法论ClickHouse 兼容性— 语法映射、语义等价性贡献指南— 开发环境设置、测试、PR 流程要求Rust 1.80 (MSRV)DuckDB 1.4.4锁定依赖Python 3.x用于扩展元数据工具许可证MIT