

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

# 删除 Amazon Personalize 资源的要求
<a name="deleting-resources"></a>

删除资源有助于避免不必要的费用。例如，当市场活动处于活动状态时，会产生市场活动费用。为避免产生不必要的费用，请务必在市场活动结束后删除它。有关费用和价格的完整列表，请参阅 [Amazon Personalize 定价](https://aws.amazon.com/personalize/pricing/)。

要使用 Amazon Personalize 控制台删除资源，请在资源的详细信息页面上选择**删除**。要使用 Amazon Personalize API 删除资源，可以将 `Delete` API 与 SDK 或 AWS Command Line Interface（AWS CLI）一起使用。

有关使用 Amazon Personalize 控制台、AWS Command Line Interface（AWS CLI）或 AWS SDK 删除数据集的详细步骤，请参阅[删除数据集以删除其所有数据](delete-dataset.md)。您可以将这些步骤中的模式应用于其他 Amazon Personalize 资源。有关从数据集组中删除用户及其数据的信息，请参阅[使用数据删除作业删除用户及其数据](delete-records.md)。

 必须先删除一些资源，然后才能删除其他资源。例如，如果您创建了事件跟踪器和物品交互数据集，则必须先删除事件跟踪器，然后才能删除数据集。以下几个部分介绍了删除 Amazon Personalize 资源的准则和顺序要求。

**Topics**
+ [删除资源的准则](#cleaning-up-guidelines)
+ [资源删除的推荐顺序](#deleting-resources-order)
+ [使用数据删除作业删除用户及其数据](delete-records.md)
+ [删除数据集以删除其所有数据](delete-dataset.md)

## 删除资源的准则
<a name="cleaning-up-guidelines"></a>

以下是删除资源的准则：
+ 在 Amazon Personalize 中删除资源是一项不可逆的操作。删除开始后就无法停止。
+ 无法删除正从一种状态变为另一种状态的资源。例如，您无法删除其状态为 CREATE PENDING 或 IN PROGRESS 的资源。资源状态必须为 ACTIVE 或 CREATE FAILED。这包括解决方案的 `latestSolutionUpdate` 状态。可以使用 `Describe` API 检查资源的状态。例如，使用 [DescribeCampaign](API_DescribeCampaign.md) API 操作。
+ 有关删除 Amazon S3 中的训练数据的信息，请参阅[如何从 S3 存储桶删除对象？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-objects.html)。
+ 数据集导入作业完成后，就不需要继续为此支付费用，并且您无法删除它们。
+ 您无需为架构付费，也无法使用 Amazon Personalize 控制台删除架构。要删除架构，请使用 [DeleteSchema](API_DeleteSchema.md) API 操作。

以下是删除数据集的特定要求：
+ 在删除任何数据集之前，必须先删除所有筛选器。
+ 如果创建了事件跟踪器，则在删除物品交互数据集之前，必须删除事件跟踪器。
+ 如果创建了引用该数据集的指标归因，则必须先删除指标归因。
+ 如果您使用 User-Personalization-v2、User-Personalization 或 Next-Best-Action 配方或*热门精选*和*为您推荐*应用场景，则删除数据集会暂停任何关联的解决方案版本或推荐器的自动更新。
+ 无关联的 `DatasetImportJob` 可以处于 CREATE PENDING 或 IN PROGRESS 状态。
+ 无关联的 `BatchInferenceJob` 或 `BatchSegmentJob` 可以处于 CREATE PENDING 或 IN PROGRESS 状态。
+ 关联的 `Recommender` 和 `SolutionVersion` 不能处于 CREATE PENDING 或 IN PROGRESS 状态。
+ 关联的 `Campaign` 不能处于 CREATE PENDING 或 IN PROGRESS 状态。

## 资源删除的推荐顺序
<a name="deleting-resources-order"></a>

 为避免删除错误，我们建议您按以下顺序从数据集组中删除资源。要识别数据集组中的资源，您可以使用 List API 操作。例如，您可以使用 [ListFilters](API_ListFilters.md) API 操作来识别数据集组中的所有筛选器。

1. 任何市场活动或推荐器 - 要使用 API 删除市场活动或推荐器，请使用 [DeleteCampaign](API_DeleteCampaign.md) 或 [DeleteRecommender](API_DeleteRecommender.md) API 操作。使用推荐器时，您可以停止推荐器并稍后再启动。这样，您就可以暂停推荐器计费，并仅在使用推荐器时才付费。有关更多信息，请参阅 [停止推荐器](stopping-starting-recommender.md)。

1. 任何解决方案 - 要使用 API 删除解决方案，请使用 [DeleteSolution](API_DeleteSolution.md) API 操作。要删除一个解决方案，则不能有正在进行中的解决方案更新。其 `latestSolutionUpdate` 状态必须为 ACTIVE 或 CREATE FAILED。删除解决方案会删除所有关联的解决方案版本。所有解决方案版本都不能处于 CREATE PENDING 或 IN PROGRESS 状态。

1. 事件跟踪器 - 要使用 API 删除事件跟踪器，请使用 [DeleteEventTracker](API_DeleteEventTracker.md) API 操作。必须先删除事件跟踪器，然后才可以删除物品交互数据集。

1. 指标归因 - 要使用 API 删除指标归因，请使用 [DeleteMetricAttribution](API_DeleteMetricAttribution.md) API 操作。

1. 所有筛选器 - 要使用 API 删除筛选器，请使用 [DeleteFilter](API_DeleteFilter.md) API 操作。必须先删除所有筛选器，然后才能删除数据集。

1. 任何数据集 - 要使用 API 删除数据集，请使用 [DeleteDataset](API_DeleteDataset.md) API 操作。

1. 数据集组 - 要使用 API 删除数据集组，请使用 [DeleteDatasetGroup](API_DeleteDatasetGroup.md) API 操作。

1. 架构 - 要删除架构，请使用 [DeleteSchema](API_DeleteSchema.md) API 操作。

# 使用数据删除作业删除用户及其数据
<a name="delete-records"></a>

 导入数据后，您可以从数据集组中删除用户及其数据，包括元数据和交互数据。为了遵循合规计划，或者为了应对用户删除请求，或者为了在用户群变化时使数据保持最新，您可能需要删除用户数据。

 删除用户后，Amazon Personalize 将不再根据他们的数据进行训练，在生成用户细分时也不再考虑这些用户。

 要删除对 Amazon Personalize 数据集中的用户以及数据集组中的模型的引用，请执行以下操作：

1. 准备一个 CSV 文件，在 USER\$1ID 列中列出要删除的用户的用户 ID。

1. 将 CSV 文件上传到 Amazon S3 存储桶。您的 Amazon Personalize 服务角色必须具有访问此存储桶的权限。

1.  创建数据删除作业。*数据删除作业*是一个批处理作业，用于从数据集组中的模型和数据集中删除用户及其数据。

**Topics**
+ [指南和要求](#data-deletion-guidelines-requirements)
+ [准备待删除用户的列表](#prepare-deletion-input-file)
+ [创建数据删除作业](#creating-data-deletion-job)

## 指南和要求
<a name="data-deletion-guidelines-requirements"></a>

以下是删除用户的准则和要求：
+  在创建数据删除作业之前，请确保没有正在使用您的数据集的作业，例如训练作业、批处理作业，或批量或单个导入操作。并避免在执行数据删除作业时创建此类作业。如果进行了任何训练或导入，我们无法保证用户的数据会从模型中删除，因此我们建议再创建一个数据删除作业。
+  数据删除作业不会删除对 Amazon Personalize 以外的用户的引用。例如，该作业不会从 Amazon S3 存储桶中的批量推荐中删除他们的用户 ID。您必须手动删除这些记录。
+  对于一个状态为 PENDING 的数据集组，您最多可以有 5 个删除作业。
+  一个或多个数据删除输入文件的最大总大小为 100 MB。在创建删除作业时，您可以重复使用相同的输入文件。
+  每个数据删除作业都会删除*数据集组*中的用户及其交互数据。要删除他们在所有数据集组中的数据，必须为每个数据集组创建一个数据删除任务。
+ 创建作业后，最多可能需要一天时间才能从数据集和模型中删除用户的数据。
+ 作业完成后，请务必更新所有自定义资源。请务必创建新的解决方案版本，并在必要时更新市场活动。如果您使用自动训练，您仍然可以手动创建新的解决方案版本。
+  您的 Amazon Personalize 服务角色必须有权访问包含待删除用户列表的 Amazon S3 存储桶。它需要存储桶及其内容的 `GetObject` 和 `ListBucket` 权限。这些权限与导入数据时的权限相同。有关授予权限和策略示例的信息，请参阅[向 Amazon Personalize 授予访问 Amazon S3 资源的权限](granting-personalize-s3-access.md)。
+  您不能在存储待删除用户的用户 ID 列表的 Amazon S3 存储桶上使用自己的 AWS Key Management Service 密钥。
+  如果某个物品仅在您的物品交互数据集中出现，并且只有您要删除的用户与该物品进行了互动，则该物品将不再出现在推荐中。

## 准备待删除用户的列表
<a name="prepare-deletion-input-file"></a>

 在从 Amazon Personalize 删除用户之前，必须在 CSV 文件中准备好待删除用户的列表并将文件上传到 Amazon S3。

**准备待删除用户的列表并上传**

1. 创建一个 CSV 文件，列出待删除用户的用户 ID。下面显示了 CSV 文件必须如何格式化。

   ```
   USER_ID
   abc
   2a
   5basc
   ab35
   123f
   a55d
   0v22
   441fa
   efg
   ```

1. 将 CSV 文件上传到 Amazon Simple Storage Service（Amazon S3）存储桶。有关将文件上传到 Amazon S3 的更多信息，请参阅《Amazon Simple Storage Service 用户指南》中的[使用拖放功能上传文件和文件夹](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html)。

1. 向 Amazon Personalize 授予访问存储桶和 CSV 文件的权限。Amazon Personalize 必须有权对您的存储桶及其内容执行 `GetObject` 和 `ListBucket` 操作。这些权限与导入数据时的权限相同。有关授予权限和策略示例的信息，请参阅[向 Amazon Personalize 授予访问 Amazon S3 资源的权限](granting-personalize-s3-access.md)。

## 创建数据删除作业
<a name="creating-data-deletion-job"></a>

完成[准备待删除用户的列表](#prepare-deletion-input-file)后，就可以通过数据删除作业来删除用户。

*数据删除作业*是一个批处理作业，用于从数据集组中的模型和数据集中删除用户及其数据。删除用户后，Amazon Personalize 将不再根据他们的数据进行训练，在生成用户细分时也不再考虑这些用户。

创建数据删除作业时，需要指定待删除用户的列表在 Amazon S3 中的位置。
+ 如果您的数据位于单个文件中，请为 Amazon S3 位置使用以下语法：

  **s3://amzn-s3-demo-bucket/<folder path>/<CSV filename>.csv**
+ 如果您的 CSV 文件位于 Amazon S3 存储桶的某个文件夹中，则可以指定该文件夹的路径。对于数据删除作业，Amazon Personalize 会使用该文件夹及任何子文件夹中带有 `.csv` 文件扩展名的所有文件。该作业会忽略任何其他类型的文件。使用以下语法，在文件夹名称后面加上 `/`：

  **s3://amzn-s3-demo-bucket/<folder path>/**

您使用的角色必须有权对您的 Amazon S3 存储桶及其内容执行 `GetObject` 和 `ListBucket` 操作。有关授予权限和策略示例的信息，请参阅[向 Amazon Personalize 授予访问 Amazon S3 资源的权限](granting-personalize-s3-access.md)。

 您可以使用 Amazon Personalize 控制台、AWS Command Line Interface（AWS CLI）或 AWS SDK 创建数据删除作业。

### 创建数据删除作业（控制台）
<a name="create-data-deletion-job-console"></a>

 要使用 Amazon Personalize 控制台删除用户，请创建一个包含名称、IAM 服务角色和 Amazon S3 数据位置的数据删除作业。

**删除记录（控制台）**

1. 打开 Amazon Personalize 控制台（网址为 [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home)），并登录您的账户。

1.  在**数据集组**页面，选择您的数据集组。这时，将显示数据集组**概述**。

1. 在导航窗格中，选择**数据集**。

1. 在**数据删除作业**中，选择**创建作业**。

1. 在**作业详细信息**中，为作业取名。

1. 在 **S3 输入源**中，对于 **S3 位置**，指定用于存储待删除用户的用户 ID 列表的 CSV 文件在 Amazon S3 中的位置。在[准备待删除用户的列表](#prepare-deletion-input-file)中准备这个文件。

1. 对于 **IAM 角色**，选择创建新角色或使用现有角色。如果您完成了为 Amazon Personalize 创建角色的先决条件，并授予此角色访问 Amazon S3 存储桶的权限，请选择**使用现有服务角色**，并指定您在[为 Amazon Personalize 创建 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)中创建的角色。

   您使用的角色必须有权对您的 Amazon S3 存储桶及其内容执行 `GetObject` 和 `ListBucket` 操作。这些权限与导入数据时的权限相同。有关授予权限和策略示例的信息，请参阅[向 Amazon Personalize 授予访问 Amazon S3 资源的权限](granting-personalize-s3-access.md)。

1. 对于**标签**，可以选择添加任何标签。有关标记 Amazon Personalize 资源的更多信息，请参阅[为 Amazon Personalize 资源添加标签](tagging-resources.md)。

1. 请选择**创建任务**。作业开始，并且会显示详细信息页面。

    创建作业后，需要大约一天时间才能从数据集和模型中删除用户的数据。在作业完成之前，Amazon Personalize 会继续在训练时使用这些数据。用户可能会出现在用户细分中。

   当状态显示为 COMPLETED 时，数据删除完成。如果作业因任何原因而失败，我们建议创建另一个数据删除作业。作业完成后，请务必更新所有自定义资源。请务必创建新的解决方案版本，并在必要时更新市场活动。如果您使用自动训练，您仍然可以手动创建新的解决方案版本。

### 创建数据删除作业（AWS CLI）
<a name="create-data-deletion-job-cli"></a>

 要使用 AWS CLI 删除用户，请使用 `create-data-deletion-job` 命令。此命令使用 CreateDataDeletion API 操作。以下代码展示了如何创建数据删除作业。要使用该代码，请更新它以指定作业名称、您在[为 Amazon Personalize 创建 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)中创建的 IAM 角色以及 Amazon S3 数据位置。在[准备待删除用户的列表](#prepare-deletion-input-file)中准备这个文件。

```
aws personalize create-data-deletion-job \
--job-name deletion job name \
--dataset-group-arn dataset group ARN \
--data-source dataLocation=s3://amzn-s3-demo-bucket/filename.csv \
--role-arn roleArn
```

 创建作业后，需要大约一天时间才能从数据集和模型中删除用户的数据。在作业完成之前，Amazon Personalize 会继续在训练时使用这些数据。用户可能会出现在用户细分中。

当状态为 COMPLETED 时，作业完成。使用 `describe-data-deletion-job` 命令检查状态，并指定数据删除作业 ARN。有关该 API 操作的更多信息，请参阅 [DescribeDataDeletionJob](API_DescribeDataDeletionJob.md)。要查看按创建时间排序的数据删除作业的历史记录，请使用 [ListDataDeletionJobs](API_ListDataDeletionJobs.md) API 操作。

如果作业因任何原因而失败，我们建议创建另一个数据删除作业。作业完成后，请务必更新所有自定义资源。请务必创建新的解决方案版本，并在必要时更新市场活动。如果您使用自动训练，您仍然可以手动创建新的解决方案版本。

### 创建数据删除作业（AWS SDK）
<a name="create-data-deletion-job-sdks"></a>

 要使用 AWS SDK 删除用户，请使用 [CreateDataDeletionJob](API_CreateDataDeletionJob.md) API 操作。以下代码展示了如何创建数据删除作业。要使用该代码，请更新它以指定作业名称、您在[为 Amazon Personalize 创建 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)中创建的 IAM 角色以及 Amazon S3 数据位置。在[准备待删除用户的列表](#prepare-deletion-input-file)中准备这个文件。

```
import boto3

personalize = boto3.client('personalize')

response = personalize.create_data_deletion_job(
    jobName = 'Deletion job name',
    datasetGroupArn = 'Dataset Group ARN',
    dataSource = {'dataLocation':'s3://amzn-s3-demo-bucket/file.csv'},
    roleArn = 'role_arn'
)

deletion_job_arn = response['dataDeletionJobArn']

print ('Deletion Job arn: ' + deletion_job_arn)

description = personalize.describe_data_deletion_job(
    dataDeletionJobArn = deletion_job_arn)['dataDeletionJob']

print('Name: ' + description['jobName'])
print('ARN: ' + description['dataDeletionJobArn'])
print('Status: ' + description['status'])
```

 创建作业后，需要大约一天时间才能从数据集和模型中删除用户的数据。在作业完成之前，Amazon Personalize 会继续在训练时使用这些数据。用户可能会出现在用户细分中。

当状态为 COMPLETED 时，作业完成。使用 [DescribeDataDeletionJob](API_DescribeDataDeletionJob.md) 操作检查状态，并指定数据删除作业 ARN。要查看按创建时间排序的数据删除作业的历史记录，请使用 [ListDataDeletionJobs](API_ListDataDeletionJobs.md) API 操作。

如果作业因任何原因而失败，我们建议创建另一个数据删除作业。作业完成后，请务必更新所有自定义资源。请务必创建新的解决方案版本，并在必要时更新市场活动。如果您使用自动训练，您仍然可以手动创建新的解决方案版本。

# 删除数据集以删除其所有数据
<a name="delete-dataset"></a>

要删除数据集中的所有数据，可以删除数据集。您可以使用 Amazon Personalize 控制台删除数据集， AWS Command Line Interface (AWS CLI) 或 AWS SDKs。在删除数据集之前，请注意以下事项：
+ 在删除任何数据集之前，必须先删除所有筛选器。
+ 如果创建了事件跟踪器，则在删除物品交互数据集之前，必须删除事件跟踪器。
+ 如果创建了引用该数据集的指标归因，则必须先删除指标归因。
+ 如果您使用 User-Personalization-v 2、用户个性化设置、 Next-Best-Action食谱或*首选用*例以及*推荐给您的用*例，则删除数据集会暂停任何关联的解决方案版本或推荐者的自动更新。
+ 无关联的 `DatasetImportJob` 可以处于 CREATE PENDING 或 IN PROGRESS 状态。
+ 无关联的 `BatchInferenceJob` 或 `BatchSegmentJob` 可以处于 CREATE PENDING 或 IN PROGRESS 状态。
+ 关联的 `Recommender` 和 `SolutionVersion` 不能处于 CREATE PENDING 或 IN PROGRESS 状态。
+ 关联的 `Campaign` 不能处于 CREATE PENDING 或 IN PROGRESS 状态。



**Topics**
+ [删除数据集（控制台）](#delete-dataset-console)
+ [删除数据集 (AWS CLI)](#delete-dataset-cli)
+ [删除数据集 (AWS SDKs)](#delete-dataset-sdk)

## 删除数据集（控制台）
<a name="delete-dataset-console"></a>

要使用 Amazon Personalize 控制台删除数据集，请导航至数据集详情页面并选择删除。

**删除数据集**

1. 在[https://console.aws.amazon.com/personalize/家](https://console.aws.amazon.com/personalize/home)中打开 Amazon Personalize 控制台。

1. 在导航窗格中，选择**数据集组**。

1. 在**数据集组**页面，选择您的数据集组。

1. 在导航窗格中，选择**数据集**。

1. 选择数据集以打开其详细信息页面。

1. 在数据集的详细信息页面上，选择**删除**并确认数据集删除。

## 删除数据集 (AWS CLI)
<a name="delete-dataset-cli"></a>

以下代码演示如何使用 AWS CLI 和[DeleteDataset](API_DeleteDataset.md)操作删除数据集。

```
aws personalize delete-dataset --dataset-arn dataset-arn
```

## 删除数据集 (AWS SDKs)
<a name="delete-dataset-sdk"></a>

以下代码演示如何使用 AWS SDKs 和[DeleteDataset](API_DeleteDataset.md)操作删除数据集。

------
#### [ SDK for Python (Boto3) ]

```
import boto3

personalize = boto3.client('personalize')

response = personalize.delete_dataset(
    datasetArn = 'dataset ARN'
)
```

------
#### [ SDK for Java 2.x ]

```
public static void deleteDataset(PersonalizeClient personalizeClient,
                                 String datasetArn) {

    try {
        DeleteDatasetRequest deleteRequest = DeleteDatasetRequest.builder()
                .datasetArn(datasetArn)
                .build();

        int responseCode = personalizeClient.deleteDataset(deleteRequest).sdkHttpResponse().statusCode();
        System.out.println(responseCode);
    } catch (PersonalizeException e) {
        System.out.println(e.awsErrorDetails().errorMessage());
    }
}
```

------