

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# データセット内のトレーニングデータを Amazon S3 にエクスポートする
<a name="export-data"></a>

データを Amazon Personalize データセットにインポートした後、そのデータを Amazon S3 バケットにエクスポートできます。Amazon Personalize がレコメンデーションの生成に使用するデータを検証および検査し、以前にリアルタイムで記録したアイテムインタラクションイベントを表示したり、またはデータのオフライン分析を実行したりできます。

一括でインポートしたデータ (Amazon Personalize のデータセットのインポートジョブを使用してインポートされたもの) のみをエクスポートするか、個別にインポートしたデータ (コンソール、または `PutEvents`、`PutUsers`、もしくは `PutItems` 操作を使用してインポートされた履歴およびリアルタイムのレコード) のみをエクスポートするか、その両方を実行するかを選択できます。

**注記**  
 Action インタラクションデータセットまたは Actions データセットのデータをエクスポートすることはできません。

*すべてのフィールド*と完全に一致するレコードの場合、Amazon Personalize はレコードを 1 つだけエクスポートします。2 つのレコードの ID が同じでも 1 つ以上のフィールドが異なる場合、Amazon Personalize は、エクスポートするデータに応じてレコードを含めたり削除したりします。
+ 一括データと増分データの両方をエクスポートする場合、Amazon Personalize は同じ ID の最新のアイテムのみをエクスポートし (アイテムデータセットのエクスポートの場合)、同じ ID のユーザーのみをエクスポートします (ユーザーデータセットのエクスポートの場合)。アイテムインタラクションデータセットの場合、Amazon Personalize はすべてのアイテムインタラクションデータをエクスポートします。
+ 増分データのみをエクスポートする場合、Amazon Personalize は、同じ ID のアイテムやユーザーを含め、個別にインポートしたすべてのアイテム、ユーザー、またはアイテムインタラクションデータをエクスポートします。すべてのフィールドに完全に一致するレコードのみが除外されます。
+ バルクデータのみをエクスポートする場合、Amazon Personalize は、同じ ID のアイテムやユーザーを含め、一括でインポートしたすべてのアイテム、ユーザー、またはアイテムインタラクションデータを含めます。すべてのフィールドに完全に一致するレコードのみが除外されます。

データセットをエクスポートするには、データセットのエクスポートジョブを作成します。*データセットのエクスポートジョブ*は、データセット内のレコードを Amazon S3 バケット内の 1 つ以上の CSV ファイルに出力するレコードエクスポートツールです。出力 CSV ファイルには、データセットのスキーマのフィールドと一致する列名を持つヘッダー行が含まれています。

**Topics**
+ [データセットのエクスポートジョブの許可要件](export-permissions.md)
+ [Amazon Personalize でのデータセットのエクスポートジョブの作成](create-dataset-export-job.md)

# データセットのエクスポートジョブの許可要件
<a name="export-permissions"></a>

データセットをエクスポートするには、Amazon Personalize は、Amazon S3 バケットにファイルを追加するための許可を必要とします。許可を付与するには、バケットで `PutObject` および `ListBucket` アクションを使用するための許可をロールに付与する、Amazon Personalize のサービスロールに新しい AWS Identity and Access Management (IAM) ポリシーをアタッチします。また、`PutObject` および `ListBucket` アクションを使用するための許可を Amazon Personalize のプリンシパルに付与する、出力 Amazon S3 バケットにバケットポリシーをアタッチします。

 暗号化に AWS Key Management Service (AWS KMS) を使用している場合は、Amazon Personalize および Amazon Personalize IAM サービスロールにキーを使用するためのアクセス許可を付与する必要があります。詳細については、「[AWS KMS キーを使用するためのアクセス許可を Amazon Personalize に付与する](granting-personalize-key-access.md)」を参照してください。

## データセットをエクスポートするためのサービスロールのポリシー
<a name="role-policy-for-dataset-export-job"></a>

次のポリシー例は、`PutObject` および `ListBucket` アクションを使用するための許可を Amazon Personalize のサービスロールに付与します。`amzn-s3-demo-bucket` を出力バケットの名前に置き換えます。IAM のサービスロールにポリシーをアタッチする方法については、「[Amazon Personalize サービスロールに対する、Amazon S3 ポリシーのアタッチ](granting-personalize-s3-access.md#attaching-s3-policy-to-role)」を参照してください。

```
{
    "Version": "2012-10-17",		 	 	 
    "Id": "PersonalizeS3BucketAccessPolicy",
    "Statement": [
        {
            "Sid": "PersonalizeS3BucketAccessPolicy",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        }
    ]
}
```

## データセットをエクスポートするための Amazon S3 バケットポリシー
<a name="bucket-policy-for-dataset-export-job"></a>

次のポリシー例は、Amazon S3 バケットに対する `PutObject` および `ListBucket` アクションを使用するための許可を Amazon Personalize に付与します。`amzn-s3-demo-bucket` をバケットの名前に置き換えます。Amazon S3 バケットポリシーをバケットに追加する方法については、「*Amazon Simple Storage Service ユーザーガイド*」の「[Amazon S3 コンソールを使用したバケットポリシーの追加](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)」を参照してください。

```
{
    "Version": "2012-10-17",		 	 	 
    "Id": "PersonalizeS3BucketAccessPolicy",
    "Statement": [
        {
            "Sid": "PersonalizeS3BucketAccessPolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "personalize.amazonaws.com"
            },
            "Action": [
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket",
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        }
    ]
}
```

# 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. [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home) で Amazon Personalize コンソールを開きます。

1. ナビゲーションペインで、**[Dataset groups]** (データセットグループ) を選択します。

1. **[Dataset groups]** (データセットグループ) のページで、データセットグループを選択します。

1. ナビゲーションペインで、**[Datasets]** (データセット) を選択します。

1. Amazon S3 バケットにエクスポートするデータセットを選択します。

1.  **[Dataset export jobs]** (データセットのエクスポートジョブ) で、**[Create dataset export job]** (データセットのエクスポートジョブを作成) を選択します。

1. **[Dataset export job details]** (データセットのエクスポートジョブの詳細) の **[Dataset export job name]** (データセットのエクスポートジョブ名) に、エクスポートジョブの名前を入力します。

1. **[IAM サービスロール]**で、「[Amazon Personalize 向けの IAM ロールの作成](set-up-required-permissions.md#set-up-create-role-with-permissions)」で作成した Amazon Personalize のサービスロールを選択します。

1. **[Amazon S3 data output path]** (Amazon S3 データ出力パス) で、宛先 Amazon S3 バケットを入力します。次の構文を使用します。

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

1. AWS KMS を暗号化に使用している場合、**KMS キー ARN** には、AWS KMS キーの Amazon リソースネーム (ARN) を入力します。

1. **[Export data type]** (データタイプをエクスポート) で、最初にデータをインポートした方法に基づいて、エクスポートするデータのタイプを選択します。
   +  データセットのインポートジョブを使用して一括でインポートしたデータのみをエクスポートするには、**[Bulk]** (一括) を選択します。
   + コンソールまたは`PutEvents`、`PutUsers`、または `PutItems` 操作を使用して個別にインポートしたデータのみをエクスポートするには、**[増分]** を選択します。
   + データセット内のすべてのデータをエクスポートするには、**[Both]** (両方) を選択します。

1. **[タグ]** には、オプションで任意のタグを追加します。Amazon Personalize リソースのタグ付けの詳細については、「[Amazon Personalize リソースのタグ付け](tagging-resources.md)」を参照してください。

1. **[Create dataset export job]** (データセットのエクスポートジョブを作成) を選択します。

   **[Dataset overview]** (データセットの概要) のページの **[Dataset export jobs]** (データセットのエクスポートジョブ) で、ジョブが **[Export job status]** (エクスポートジョブのステータス) で一覧表示されます。ステータスが **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 リソースネーム (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` を指定します。
+  コンソール、または `PutEvents`、PutUsers、`PutItems` 操作を使用して個別にインポートしたデータのみをエクスポートするように `PUT` を指定します。
+  データセット内のすべてのデータをエクスポートするように `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` を指定します。
+ コンソール、または `PutEvents`、PutUsers、`PutItems` 操作を使用して個別にインポートしたデータのみをエクスポートするように `PUT` を指定します。
+ データセット内のすべてのデータをエクスポートするように `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` を使用します。
+ コンソール、または `PutEvents`、PutUsers、`PutItems` 操作を使用して個別にインポートしたデータのみをエクスポートするように `IngestionMode.PUT` を使用します。
+ データセット内のすべてのデータをエクスポートするように `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());
    }
}
```

------