-
Data Governance Dev authored
用户需求:针对特定字段的分析(国标字段规范、业务字段规范、用户自定义规则) 希望可切换「部分(前 1000 行)抽样 / 全量扫描」,且每个分析项独立配置(A 项选部分, B 项可独立选全量)。 ## 后端 - 新增 web/core/sql_utils.py: apply_sample_limit(sql, sample_limit, db_type) - sample_limit=None → 移除末尾 LIMIT N / AND ROWNUM <= N(全量扫描) - sample_limit=int → 保留原样(partial 模式) - 三方言均覆盖:MySQL / 达梦(标准 LIMIT)/ Oracle 11g(AND ROWNUM <= N) - models.ConnectRequest 新增 sample_limits: dict[str, int | None] - job_manager.submit 透传 sample_limits 给 orchestrator - orchestrator.run_governance_workflow 新增 sample_limits kwarg;按 step_id 取值 分发给各 _run_* 闭包 - step7_standards._run_round1/2/3_* 全部加 sample_limit 参数:渲染 SQL 后用 apply_sample_limit 二次处理(partial→加 LIMIT 1000,full→剥 LIMIT) - step9_custom_rules.run_step_custom_value_check 加 sample_limit 参数: SQL 构造按 None / oracle / else 三分支 ## 前端 - index.html sampleScope ref + SAMPLE_PARTIAL_LIMIT 常量 - 每个 IND-XXX leaf 行(checkbox 之后、字段名输入框之前)加 partial/full radio - key = step_id(每个 IND 独立),不再按 group 共享 - 标签去掉了「1000」后缀,仅显示「部分 / 全量」 - 自定义规则卡片保持 card-level 单个 radio(共享 custom_value_check step_id): step9 后端所有规则共用一个 LIMIT,要下沉需另改接口 - watch(analysisTree.groups) 加载后为每个 step_id 初始化 sampleScope='partial' - buildSampleLimitsForSubmit() 把 sampleScope 转成后端要的 {step_id: int|None} - startJob() payload 加 sample_limits 字段 - style.css 新增 .sample-scope--leaf(margin-left: 8px,紧贴字段名输入框) ## 端到端验证 - 用户在 IND-001/002/003 选全量、IND-004 选部分 → payload 正确: {std_ind_001: None, std_ind_002: None, std_ind_003: None, std_ind_004: 1000} - Pydantic ConnectRequest 解析通过;类型 [(str, 'NoneType'/'int'), ...] - 三方言 × partial/full × 多种 SQL 形态,行为符合预期 ## 踩坑 edit 工具改函数签名+docstring 时只换首行 → 留孤儿 """ → SyntaxError。 教训:edit 改函数签名 + docstring 时,把整个 docstring 完整贴一遍。23ebacc6