

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon Personalize 中建立資料集匯出任務
<a name="create-dataset-export-job"></a>

您可以使用 Amazon Personalize 主控台、 AWS Command Line Interface (AWS CLI) 或 AWS SDKs建立資料集匯出任務。

## 建立資料集匯出任務 （主控台）
<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. 開啟位於 https：//[https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home) 的 Amazon Personalize 主控台。

1. 在導覽窗格中，選擇**資料集群組**。

1. 在**資料集群組**頁面上，選擇您的資料集群組。

1. 在導覽窗格中，選擇**資料集**。

1. 選擇您要匯出至 Amazon S3 儲存貯體的資料集。

1.  在**資料集匯出任務**中，選擇**建立資料集匯出任務**。

1. 在**資料集匯出任務詳細資訊**中，針對**資料集匯出任務名稱**，輸入匯出任務的名稱。

1. 針對 **IAM 服務角色**，選擇您在 中建立的 Amazon Personalize 服務角色[為 Amazon Personalize 建立 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)。

1. 針對 **Amazon S3 資料輸出路徑**，輸入目的地 Amazon S3 儲存貯體。使用下列語法：

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

1. 如果您使用 AWS KMS 進行加密，請在 **KMS 金鑰 ARN** 中輸入 AWS KMS 金鑰的 Amazon Resource Name (ARN)。

1. 對於**匯出資料類型**，請根據您最初匯入資料的方式選擇要匯出的類型資料。
   +  選擇**大量**以僅匯出您使用資料集匯入任務大量匯入的資料。
   + 選擇**增量**，僅匯出您使用主控台或 `PutEvents`、 `PutUsers`或 `PutItems`操作個別匯入的資料。
   + 選擇**兩者**以匯出資料集中的所有資料。

1. 對於**標籤**，選擇性地新增任何標籤。如需標記 Amazon Personalize 資源的詳細資訊，請參閱[標記 Amazon Personalize 資源](tagging-resources.md)。

1. 選擇**建立資料集匯出任務**。

   在**資料集概觀**頁面的**資料集匯出任務**中，任務會列出**匯出任務狀態**。當狀態為 **ACTIVE** 時，資料集匯出任務即完成。然後，您可以從輸出 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 Resource Name (ARN)，並將 取代`role ARN`為您在 中建立的 Amazon Personalize 服務角色的 ARN[為 Amazon Personalize 建立 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)。在 中`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 SDKs)
<a name="export-data-sdk"></a>

 將資料匯入資料集並建立輸出 Amazon S3 儲存貯體後，您可以將資料集匯出至儲存貯體進行分析。若要使用 AWS SDKs 匯出資料集，請使用 [CreateDatasetExportJob](API_CreateDatasetExportJob.md)操作建立資料集匯出任務。如需有關建立 Amazon S3 儲存貯體的資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

下列程式碼說明如何使用適用於 Python 的 SDK (Boto3) 或適用於 Java 的 SDK 2.x SDK 來建立資料集匯出任務。

匯出資料集之前，請確定 Amazon Personalize 服務角色可以存取和寫入您的輸出 Amazon S3 儲存貯體。請參閱 [資料集匯出任務許可要求](export-permissions.md)。

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

使用下列項目將資料集中的資料`create_dataset_export_job`匯出至 Amazon S3 儲存貯體。為任務命名、`dataset arn`將 取代為您要匯出之資料集的 Amazon Resource Name (ARN)，並將 取代`role ARN`為您在 中建立的 Amazon Personalize 服務角色的 ARN[為 Amazon Personalize 建立 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)。在 中`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());
    }
}
```

------