

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 重复消息处理


对于实时发送的数据对象，Ground Truth 通过确保每个唯一对象只发送一次以进行标注来保证幂等性，即使多次接收到引用该对象的输入消息（重复消息）也是如此。为此，发送到流式标注作业的每个数据对象都会分配一个*重复数据删除 ID*，该 ID 由*重复数据删除键*标识。如果您使用 Amazon SNS 消息直接通过 Amazon SNS 输入主题发送标记数据对象的请求，则可以选择为对象选择自定义重复数据删除密钥和 IDs 重复数据删除。有关更多信息，请参阅 [在 Amazon SNS 消息中指定重复数据删除键和 ID](sms-streaming-impotency-create.md)。

如果您未提供自己的重复数据删除键，或者使用 Amazon S3 配置将数据对象发送到标注作业，则 Ground Truth 将使用以下重复数据删除 ID 之一：
+ 对于直接发送到 Amazon SNS 输入主题的消息，Ground Truth 使用 SNS 消息 ID。
+ 对于来自 Amazon S3 配置的消息，Ground Truth 通过将对象的 Amazon S3 URI 与消息中的 [sequencer 令牌](https://docs.amazonaws.cn/AmazonS3/latest/dev/notification-content-structure.html)相结合来创建重复数据删除 ID。

# 在 Amazon SNS 消息中指定重复数据删除键和 ID


当您使用 Amazon SNS 消息将数据对象发送到流式标注作业时，您可以选择通过以下方式之一指定重复数据删除键和重复数据删除 ID。在所有这些情况下，请使用 `dataset-objectid-attribute-name` 识别重复数据删除键。

**自带重复数据删除键和 ID**

通过按如下方式配置 Amazon SNS 消息，创建自己的重复数据删除键和重复数据删除 ID。将 `byo-key` 替换为您的键，将 `UniqueId` 替换为该数据对象的重复数据删除 ID。

```
{
    "source-ref":"s3://amzn-s3-demo-bucket/prefix/object1", 
    "dataset-objectid-attribute-name":"byo-key",
    "byo-key":"UniqueId" 
}
```

重复数据删除键最多可包含 140 个字符。支持的模式包括：`"^[$a-zA-Z0-9](-*[a-zA-Z0-9])*"`。

重复数据删除 ID 最多可包含 1024 个字符。支持的模式包括：`^(https|s3)://([^/]+)/?(.*)$`。

**将现有键用于重复数据删除键**

您可以使用消息中的现有键作为重复数据删除键。执行此操作时，与该键关联的值将用于重复数据删除 ID。

例如，您可以通过以下方式格式化消息，指定使用 `source-ref` 键作为重复数据删除键：

```
{
    "source-ref":"s3://amzn-s3-demo-bucket/prefix/object1",
    "dataset-objectid-attribute-name":"source-ref" 
}
```

在此示例中，Ground Truth 将 `"s3://amzn-s3-demo-bucket/prefix/object1"` 用于重复数据删除 ID。

# 在输出数据中查找重复数据删除键和 ID


您可以在输出数据中看到重复数据删除键和 ID。重复数据删除键由 `dataset-objectid-attribute-name` 标识。当您使用自己的自定义重复数据删除键时，输出结果类似于下面的内容：

```
"dataset-objectid-attribute-name": "byo-key",
"byo-key": "UniqueId",
```

如果未指定键，则可通过以下方式找到 Ground Truth 为数据对象分配的重复数据删除 ID。`$label-attribute-name-object-id` 参数标识重复数据删除 ID。

```
{
    "source-ref":"s3://bucket/prefix/object1", 
    "dataset-objectid-attribute-name":"$label-attribute-name-object-id"
    "label-attribute-name" :0,
    "label-attribute-name-metadata": {...},
    "$label-attribute-name-object-id":"<service-generated-key>"
}
```

对于 `<service-generated-key>`，如果数据对象是通过 Amazon S3 配置生成的，Ground Truth 会添加该服务使用的唯一值，并发出一个以 `$sequencer` 为键值的新字段，显示使用的 Amazon S3 sequencer。如果对象直接馈送到 SNS，Ground Truth 将使用 SNS 消息 ID。

**注意**  
不要在标签属性名称中使用 `$` 字符。