You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选含完整供应商名称与编码的行?批量处理表DQ问题咨询

数据质量处理:筛选含供应商名称及编码的有效行

核心需求

从存在重复行的业务表中,筛选出**SUPPLIER字段同时包含供应商名称和编码(格式如XXX (XXXX))**的记录,排除缺失编码或显示为Not Known的行,适配数千种产品的批量处理。


最优处理方案(SQL实现)

1. 基础筛选逻辑

通过正则匹配SUPPLIER字段的格式,确保包含括号包裹的数字编码,同时排除无效值:

SELECT *
FROM your_table_name
WHERE 
  SUPPLIER != 'Not Known'
  AND SUPPLIER REGEXP '^.+\\([0-9]+\\)$';

说明:REGEXP '^.+\\([0-9]+\\)$' 匹配「任意字符开头 + 括号包裹数字结尾」的字符串,精准定位带编码的供应商记录。

2. 重复行处理

针对表中重复行,提供两种高效去重方式:

方式1:保留所有字段去重

适合需要完整保留所有字段的场景:

SELECT DISTINCT *
FROM your_table_name
WHERE 
  SUPPLIER != 'Not Known'
  AND SUPPLIER REGEXP '^.+\\([0-9]+\\)$';

方式2:按核心字段分组去重(大数据量首选)

通过分组聚合减少重复计算,性能优于DISTINCT:

SELECT NK_1, PRODUCT, SUPPLIER, MAX(HASH) AS HASH
FROM your_table_name
WHERE 
  SUPPLIER != 'Not Known'
  AND SUPPLIER REGEXP '^.+\\([0-9]+\\)$'
GROUP BY NK_1, PRODUCT, SUPPLIER;

3. 大数据量性能优化

  • 添加专用索引:如果数据库支持表达式索引,提前创建索引加速筛选:
    -- PostgreSQL示例
    CREATE INDEX idx_supplier_valid ON your_table_name (SUPPLIER)
    WHERE SUPPLIER != 'Not Known' AND SUPPLIER ~ '^.+\\([0-9]+\\)$';
    
  • 分步过滤:先排除Not Known再做正则匹配,减少正则处理的数据量:
    SELECT DISTINCT *
    FROM (
      SELECT *
      FROM your_table_name
      WHERE SUPPLIER != 'Not Known'
    ) t
    WHERE t.SUPPLIER REGEXP '^.+\\([0-9]+\\)$';
    

内容的提问来源于stack exchange,提问作者TheLoneGrape

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:20:54