データセットのエクスポート - Amazon Personalize

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

データセットのエクスポート

注記

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

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

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

すべてのフィールドと完全に一致するレコードの場合、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 ファイルには、データセットのスキーマのフィールドと一致する列名を持つヘッダー行が含まれています。

データセットのエクスポートジョブは、Amazon Personalize コンソール、AWS Command Line Interface (AWS CLI)、または AWS SDK を使用して作成します。

データセットのエクスポートジョブの許可要件

データセットをエクスポートするには、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 KMS) を使用している場合は、キーを使用するための許可を、Amazon Personalizeと Amazon Personalize の IAM サービスロールに付与する必要があります。詳細については、「AWS KMS キーを使用するアクセス許可を Amazon Personalize に付与する」を参照してください。

データセットをエクスポートするためのサービスロールのポリシー

次のポリシー例は、PutObject および ListBucket アクションを使用するための許可を Amazon Personalize のサービスロールに付与します。bucket-name を出力バケットの名前に置き換えます。IAM のサービスロールにポリシーをアタッチする方法については、「Amazon Personalize サービスロールに対する、Amazon S3 ポリシーのアタッチ」を参照してください。

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

データセットをエクスポートするための Amazon S3 バケットポリシー

次のポリシー例は、Amazon S3 バケットに対する PutObject および ListBucket アクションを使用するための許可を Amazon Personalize に付与します。bucket-name をバケットの名前に置き換えます。Amazon S3 バケットポリシーをバケットに追加する方法については、Amazon Simple Storage Service ユーザーガイドの「S3 バケットポリシーを追加するにはどうすればよいですか?」を参照してください。

{ "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:::bucket-name", "arn:aws:s3:::bucket-name/*" ] } ] }

データセットのエクスポートジョブの作成 (コンソール)

データをデータセットにインポートし、出力 Amazon S3 バケットを作成したら、分析のためにデータをバケットにエクスポートできます。Amazon Personalize コンソールを使用してデータセットをエクスポートするには、データセットのエクスポートジョブを作成します。Amazon S3 バケットの作成の詳細については、Amazon Simple Storage Service ユーザーガイドの「バケットの作成」を参照してください。

データセットをエクスポートする前に、Amazon Personalize のサービスロールが出力 Amazon S3 バケットにアクセスして書き込むことができることを確認してください。「データセットのエクスポートジョブの許可要件」を参照してください。

データセットのエクスポートジョブを作成するには (コンソール)
  1. https://console.aws.amazon.com/personalize/home で Amazon Personalize コンソールを開きます。

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

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

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

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

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

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

  8. IAM サービスロールで、Amazon Personalize 向けの IAM ロールの作成 で作成した Amazon Personalize のサービスロールを選択します。

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

    s3://<name of your S3 bucket>/<folder path>

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

  11. [Export data type] (データタイプをエクスポート) で、最初にデータをインポートした方法に基づいて、エクスポートするデータのタイプを選択します。

    • データセットのインポートジョブを使用して一括でインポートしたデータのみをエクスポートするには、[Bulk] (一括) を選択します。

    • コンソールまたはPutEventsPutUsers、または PutItems 操作を使用して個別にインポートしたデータのみをエクスポートするには、[増分] を選択します。

    • データセット内のすべてのデータをエクスポートするには、[Both] (両方) を選択します。

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

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

    [Dataset overview] (データセットの概要) のページの [Dataset export jobs] (データセットのエクスポートジョブ) で、ジョブが [Export job status] (エクスポートジョブのステータス) で一覧表示されます。ステータスが ACTIVE になると、データセットのエクスポートジョブが完了します。その後、出力 Amazon S3 バケットからデータをダウンロードできます。Amazon S3 バケットからオブジェクトをダウンロードする方法については、Amazon Simple Storage Service ユーザーガイドの「オブジェクトのダウンロード」を参照してください。

データセットのエクスポートジョブの作成 (AWS CLI)

データをデータセットにインポートし、出力 Amazon S3 バケットを作成したら、分析のためにデータセットをバケットにエクスポートできます。AWS CLI を使用してデータセットをエクスポートするには、create-dataset-export-job AWS CLI コマンドを使用してデータセットのエクスポートジョブを作成します。Amazon S3 バケットの作成の詳細については、Amazon Simple Storage Service ユーザーガイドの「バケットの作成」を参照してください。

データセットをエクスポートする前に、Amazon Personalize のサービスロールが出力 Amazon S3 バケットにアクセスして書き込むことができることを確認してください。「データセットのエクスポートジョブの許可要件」を参照してください。

create-dataset-export-job AWS CLI コマンドの例を次に示します。ジョブに名前を付け、dataset arn をエクスポートするデータセットの Amazon リソースネーム (ARN) に、role ARNAmazon Personalize 向けの IAM ロールの作成 で作成した Amazon Personalize のサービスロールの ARN に、それぞれ置き換えます。s3DataDestination で、kmsKeyArn についてはオプションで AWS KMS キーの ARN を指定し、path については出力 Amazon S3 バケットへのパスを指定します。

ingestion-mode で、次のオプションからエクスポートするデータを指定します。

  • データセットのインポートジョブを使用して一括でインポートしたデータのみをエクスポートするように BULK を指定します。

  • コンソール、または PutEvents、PutUsers、または PutItems 操作を使用して個別にインポートしたデータのみをエクスポートするように PUT を指定します。

  • データセット内のすべてのデータをエクスポートするように ALL を指定します。

詳細については、「CreateDatasetExportJob」を参照してください。

aws personalize create-dataset-export-job \ --job-name job name \ --dataset-arn dataset ARN \ --job-output "{\"s3DataDestination\":{\"kmsKeyArn\":\"kms key ARN\",\"path\":\"s3://bucket-name/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)

データをデータセットにインポートし、出力 Amazon S3 バケットを作成したら、分析のためにデータセットをバケットにエクスポートできます。AWS SDK を使用してデータセットをエクスポートするには、CreateDatasetExportJob 操作を使用してデータセットのエクスポートジョブを作成します。Amazon S3 バケットの作成の詳細については、Amazon Simple Storage Service ユーザーガイドの「バケットの作成」を参照してください。

次のコードは、SDK for Python (Boto3) または SDK for Java 2.x SDK を使用してデータセットのエクスポートジョブを作成する方法を示しています。

データセットをエクスポートする前に、Amazon Personalize のサービスロールが出力 Amazon S3 バケットにアクセスして書き込むことができることを確認してください。「データセットのエクスポートジョブの許可要件」を参照してください。

SDK for Python (Boto3)

次の create_dataset_export_job を使用して、データセット内のデータを Amazon S3 バケットにエクスポートします。ジョブに名前を付け、dataset arn をエクスポートするデータセットの Amazon リソースネーム (ARN) に、role ARNAmazon Personalize 向けの IAM ロールの作成 で作成した 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://bucket-name/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()); } }