

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

# 在 Amazon Personalize 中创建数据集导出作业
<a name="create-dataset-export-job"></a>

您可以使用 Amazon Personalize 控制台、AWS Command Line Interface (AWS CLI) 或 AWS SDK 创建数据集导出作业。

## 创建数据集导出作业（控制台）
<a name="export-data-console"></a>

将数据导入数据集并创建输出 Amazon S3 存储桶后，您可以将数据导出到存储桶进行分析。**要使用 Amazon Personalize 控制台导出数据集，您需要创建数据集导出作业。有关创建 Amazon S3 存储桶的信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

在导出数据集之前，确保您的 Amazon Personalize 服务角色可以访问和写入您的输出 Amazon S3 存储桶。请参阅[数据集导出作业权限要求](export-permissions.md)。

**创建数据集导出作业（控制台）**

1. 打开 Amazon Personalize 控制台（网址为 [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home)）。

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

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

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

1. 选择要导出到 Amazon S3 存储桶的数据集。

1.  在**数据集导出作业**中，选择**创建数据集导出作业**。

1. 在**数据集导出作业详细信息**中，对于**数据集导出作业名称**，输入导出作业的名称。

1. 对于 **IAM 服务角色**，选择您在[为 Amazon Personalize 创建 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)中创建的 Amazon Personalize 服务角色。

1. 对于 **Amazon S3 数据输出路径**，输入目标 Amazon S3 存储桶。使用以下语法：

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

1. 如果将 AWS KMS 用于加密，则对于 **KMS 密钥 ARN**，输入 AWS KMS 密钥的 Amazon 资源名称 (ARN)。

1. 对于**导出数据类型**，根据您最初导入数据的方式，选择要导出的数据类型。
   +  选择**批量**，仅导出使用数据集导入作业批量导入的数据。
   + 选择**增量**，仅导出您使用控制台或者 `PutEvents`、`PutUsers` 或 `PutItems` 操作单独导入的数据。
   + 选择**两者**，导出数据集中的所有数据。

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

1. 选择**创建数据集导出作业**。

   在**数据集概述**页面的**数据集导出作业**中，作业以**导出作业状态**列出。当状态为**活动**时，表示数据集导出作业完成。然后，您可以从输出 Amazon S3 存储桶中下载数据。有关从 Amazon S3 存储桶下载对象的信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[下载对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)。

## 创建数据集导出作业 (AWS CLI)
<a name="export-data-cli"></a>

将数据导入数据集并创建输出 Amazon S3 存储桶后，您可以将数据集导出到存储桶进行分析。要使用 AWS CLI 导出数据集，请使用 `create-dataset-export-job` AWS CLI 命令创建数据集导出作业。有关创建 Amazon S3 存储桶的信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

在导出数据集之前，确保 Amazon Personalize 服务角色可以访问和写入您的输出 Amazon S3 存储桶。请参阅[数据集导出作业权限要求](export-permissions.md)。

 以下是 `create-dataset-export-job` AWS CLI 命令的示例。为作业命名，将 `dataset arn` 替换为要导出的数据集的 Amazon 资源名称 (ARN)，然后将 `role ARN` 替换为您在[为 Amazon Personalize 创建 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)中创建的 Amazon Personalize 服务角色的 ARN。在 `s3DataDestination` 中，对于 `kmsKeyArn`，可以选择为您的 AWS KMS 密钥提供 ARN，对于 `path`，提供输出 Amazon S3 存储桶的路径。

 对于 `ingestion-mode`，通过以下选项指定要导出的数据：
+  指定 `BULK`，仅导出使用数据集导入作业批量导入的数据。
+  指定 `PUT`，仅导出您使用控制台或者 `PutEvents`、PutUsers 或 `PutItems` 操作单独导入的数据。
+  指定 `ALL`，导出数据集中的所有数据。

 有关更多信息，请参阅 [CreateDatasetExportJob](API_CreateDatasetExportJob.md)。

```
aws personalize create-dataset-export-job \
  --job-name job name \
  --dataset-arn dataset ARN \
  --job-output "{\"s3DataDestination\":{\"kmsKeyArn\":\"kms key ARN\",\"path\":\"s3://amzn-s3-demo-bucket/folder-name/\"}}" \
  --role-arn role ARN \
  --ingestion-mode PUT
```

这时，将显示数据集导出作业 ARN。

```
{
  "datasetExportJobArn": "arn:aws:personalize:us-west-2:acct-id:dataset-export-job/DatasetExportJobName"
}
```

使用 `DescribeDatasetExportJob` 操作检查状态。

```
aws personalize describe-dataset-export-job \
  --dataset-export-job-arn dataset export job ARN
```

## 创建数据集导出作业 (AWS SDK)
<a name="export-data-sdk"></a>

 将数据导入数据集并创建输出 Amazon S3 存储桶后，您可以将数据集导出到存储桶进行分析。要使用 AWS SDK 导出数据集，请使用 [CreateDatasetExportJob](API_CreateDatasetExportJob.md) 操作创建数据集导出作业。有关创建 Amazon S3 存储桶的信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

以下代码演示了如何使用 SDK for Python (Boto3) 或 SDK for Java 2.x SDK 创建数据集导出作业。

在导出数据集之前，确保 Amazon Personalize 服务角色可以访问和写入您的输出 Amazon S3 存储桶。请参阅[数据集导出作业权限要求](export-permissions.md)。

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

使用以下 `create_dataset_export_job`，将数据集中的数据导出到 Amazon S3 存储桶。为作业命名，将 `dataset arn` 替换为要导出的数据集的 Amazon 资源名称 (ARN)，然后将 `role ARN` 替换为您在[为 Amazon Personalize 创建 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)中创建的 Amazon Personalize 服务角色的 ARN。在 `s3DataDestination` 中，对于 `kmsKeyArn`，可以选择为您的 AWS KMS 密钥提供 ARN，对于 `path`，提供输出 Amazon S3 存储桶的路径。

 对于 `ingestionMode`，通过以下选项指定要导出的数据：
+ 指定 `BULK`，仅导出使用数据集导入作业批量导入的数据。
+ 指定 `PUT`，仅导出您使用控制台或者 `PutEvents`、PutUsers 或 `PutItems` 操作单独导入的数据。
+ 指定 `ALL`，导出数据集中的所有数据。

```
import boto3

personalize = boto3.client('personalize')

response = personalize.create_dataset_export_job(
    jobName = 'job name',
    datasetArn = 'dataset ARN',
    jobOutput = {
      "s3DataDestination": {
        "kmsKeyArn": "kms key ARN",
        "path": "s3://amzn-s3-demo-bucket/folder-name/"
      }
    },
    roleArn = 'role ARN',
    ingestionMode = 'PUT'
)

dsej_arn = response['datasetExportJobArn']

print ('Dataset Export Job arn: ' + dsej_arn)

description = personalize.describe_dataset_export_job(
    datasetExportJobArn = dsej_arn)['datasetExportJob']

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

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

使用以下 `createDatasetExportJob` 方法创建数据集导出作业。将以下内容作为参数传递：PersonalizeClient、导出作业的名称、要导出的数据集的 ARN、摄取模式、输出 Amazon S3 存储桶的路径以及 AWS KMS 密钥的 ARN。

 `ingestionMode` 可以是以下一个选项：
+ 使用 `IngestionMode.BULK`，仅导出使用数据集导入作业批量导入的数据。
+ 使用 `IngestionMode.PUT`，仅导出您使用控制台或者 `PutEvents`、PutUsers 或 `PutItems` 操作单独导入的数据。
+ 使用 `IngestionMode.ALL`，导出数据集中的所有数据。

```
public static void createDatasetExportJob(PersonalizeClient personalizeClient, 
                                        String jobName,
                                        String datasetArn, 
                                        IngestionMode ingestionMode, 
                                        String roleArn,
                                        String s3BucketPath,
                                        String kmsKeyArn) {

    long waitInMilliseconds = 30 * 1000; // 30 seconds
    String status = null;

    try {
        S3DataConfig exportS3DataConfig = S3DataConfig.builder()
            .path(s3BucketPath)
            .kmsKeyArn(kmsKeyArn)
            .build();
            
        DatasetExportJobOutput jobOutput = DatasetExportJobOutput.builder()
            .s3DataDestination(exportS3DataConfig)
            .build();

        CreateDatasetExportJobRequest createRequest = CreateDatasetExportJobRequest.builder()
            .jobName(jobName)
            .datasetArn(datasetArn)
            .ingestionMode(ingestionMode)
            .jobOutput(jobOutput)
            .roleArn(roleArn)
            .build();

        String datasetExportJobArn = personalizeClient.createDatasetExportJob(createRequest).datasetExportJobArn();

        DescribeDatasetExportJobRequest describeDatasetExportJobRequest = DescribeDatasetExportJobRequest.builder()
            .datasetExportJobArn(datasetExportJobArn)
            .build();

        long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60;

        while (Instant.now().getEpochSecond() < maxTime) {

            DatasetExportJob datasetExportJob = personalizeClient.describeDatasetExportJob(describeDatasetExportJobRequest)
                .datasetExportJob();

            status = datasetExportJob.status();
            System.out.println("Export job status: " + status);

            if (status.equals("ACTIVE") || status.equals("CREATE FAILED")) {
                break;
            }
            try {
                Thread.sleep(waitInMilliseconds);
            } catch (InterruptedException e) {
                System.out.println(e.getMessage());
            }
        }
    } catch (PersonalizeException e) {
        System.out.println(e.awsErrorDetails().errorMessage());
    }
}
```

------