用DuckDB SQL提取超内存数据中多字段重复但指定字段不同的行
DuckDB 超大规模数据集重复键行提取SQL实现
功能适配说明
- 完全对齐原
dupKeyEx()函数的匹配规则,支持处理超出内存容量的数据集 - 提取规则严格匹配需求:
- 按指定的多个字段(示例为
NAME、DOB)分组 - 分组内指定标识字段(示例为
ID)的不同值数量≥2 - 返回符合条件分组的所有原始行,保留全部原有字段
- 按指定的多个字段(示例为
通用SQL实现(兼容所有DuckDB版本)
-- 可根据实际业务调整对应参数 SELECT * FROM ( SELECT *, COUNT(DISTINCT ID) OVER (PARTITION BY NAME, DOB) AS distinct_id_count FROM your_table_name ) t WHERE distinct_id_count >= 2;
参数替换说明:
- 将
your_table_name替换为实际导入DuckDB的表名PARTITION BY后可替换为任意2个及以上需要组合匹配的重复判定字段COUNT(DISTINCT)内替换为需要校验值不同的标识字段即可
DuckDB简化高性能实现(支持QUALIFY语法的新版本)
无需嵌套子查询,执行效率更高,内存占用更低:
SELECT * FROM your_table_name QUALIFY COUNT(DISTINCT ID) OVER (PARTITION BY NAME, DOB) >= 2;
该方案完全依托DuckDB原生的向量化执行与外存计算能力,无需将全表载入内存即可处理TB级大规模数据集,性能表现适配超大数据量场景。
内容的提问来源于stack exchange,提问作者San
相关产品推荐
相关产品推荐

