dedup-exact(精确去重)

更新时间:
复制为 MD 格式

dedup-exact 节点对指定字段进行精确匹配去重,完全相同的文本仅保留最长的一条。计算代价低,适合作为 Pipeline 去重管道的第一道工序。

功能说明

dedup-exact 节点按 field 指定的字段做精确匹配:文本完全相同的记录归为一组,每组仅保留文本最长(信息量最大)的一条。

精确去重的计算开销在所有去重节点中最低,建议在 Pipeline 中优先执行,再接近似去重语义去重逐级收敛数据量。

适用场景:

  • 日志或数据采集中产生的完全重复文本条目。

  • 重复提交、重复推送导致的冗余记录。

  • 作为近似去重或语义去重前的预处理步骤,降低后续节点的数据量与计算开销。

节点配置

在 Pipeline JSON 中添加 dedup-exact 节点,配置示例如下。

{
  "id": "node_1",
  "type": "dedup-exact",
  "parameters": {
    "field": "<字段名>",
    "output": "<输出列列表>",
    "global": true,
    "workspace": "<工作空间>",
    "dataset": "<数据集>"
  }
}

参数说明

参数

类型

必填

默认值

说明

field

String

去重依据的字段名,须为文本类型

output

String

*

输出列,多列以英文逗号分隔。*(默认)保留全部列含扩展列;指定时仅输出列出的列

global

Boolean

false

是否开启全局去重(跨批次与 Dataset 做增量去重)

workspace

String

条件必填

Dataset 所在工作空间,globaltrue 时必填

dataset

String

条件必填

Dataset 名称,globaltrue 时必填

输入与输出

输入要求

  • 上游节点输出的任意列数据。

  • 须包含 field 指定的字段,且为文本类型。

输出列

列名

类型

来源

说明

output 控制列

--

透传/新增

* 保留全部列(含扩展列);指定时仅输出列出列

__dedup_hash

bigint

新增

文本指纹值,标识文本唯一性

__dedup_weight

integer

新增

文本长度,去重时保留最长文本

__dedup_rnk

integer

新增

组内排名(去重后恒为 1)

行数变化

M -> N(M >= N)。完全相同的文本聚合为一条,输出行数小于等于输入行数。

效果预览

处理前(5 条):

question

input

output

什么是机器学习?

请解释

机器学习是人工智能的一个分支...

什么是机器学习?

请详细解释一下

机器学习(ML)是一种通过数据训练模型...

如何学习Python?

入门指南

推荐从官方教程开始...

什么是深度学习?

简述

深度学习是机器学习的子集...

如何学习Python?

初学者

建议先学基础语法...

处理后(3 条,field = "question"):

question

input

output

__dedup_hash

__dedup_weight

__dedup_rnk

什么是机器学习?

请详细解释一下

机器学习(ML)是一种通过数据训练模型...

8832749102

14

1

如何学习Python?

入门指南

推荐从官方教程开始...

5561023847

8

1

什么是深度学习?

简述

深度学习是机器学习的子集...

3347891256

7

1

两组 question 完全相同的记录各保留一条(取文本最长者),5 条数据缩减为 3 条。

使用示例

批内精确去重

对当前批次数据按 question 字段去重,保留全部列。

{
  "id": "n2",
  "type": "dedup-exact",
  "parameters": {
    "field": "question"
  }
}

全局精确去重

在批内去重基础上,额外与 Dataset 历史数据做精确比对,仅保留全新记录。

{
  "id": "n2",
  "type": "dedup-exact",
  "parameters": {
    "field": "question",
    "global": true,
    "workspace": "my-ws",
    "dataset": "my-ds"
  }
}

指定输出列

仅输出 questionanswermodel 三列,丢弃其余列。

{
  "id": "n2",
  "type": "dedup-exact",
  "parameters": {
    "field": "question",
    "output": "question,answer,model"
  }
}

管道组合(精确 + 近似级联)

先精确去重消除完全相同项,再接近似去重消除微小差异项。

{
  "nodes": [
    { "id": "n1", "type": "project", "parameters": { "question": "a", "input": "b", "output": "c" } },
    { "id": "n2", "type": "dedup-exact", "parameters": { "field": "question" } },
    { "id": "n3", "type": "dedup-fuzzy", "parameters": { "field": "question", "threshold": "3" } }
  ]
}

使用建议与边界行为

使用建议

  • 推荐管道顺序:dedup-exact -> dedup-fuzzy -> dedup-semantic,逐级收敛数据量。

  • 全局去重(global = true)适用于增量入库场景,确保 Dataset 中无重复数据。

  • 多字段去重(如同时对 questionoutput 去重)时,拆分为多个 dedup-exact 节点串联。

  • 确保 field 字段有实际文本内容,空字符串可能导致意外保留。

重要

NULL 值的行不参与去重且不出现在输出中。如需保留 NULL 行,请在上游节点先做 NULL 值处理。

边界与异常

场景

行为

field 缺失

校验失败

field 指定的字段不存在

运行时报错

field 字段值为 NULL

该行不参与去重,不出现在输出中

globaltrue 但缺少 workspacedataset

校验失败

Dataset 不存在或不可达

运行时报错

输入数据为空

正常返回空结果集