기존 대량 데이터 업데이트 - Amazon Personalize

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기존 대량 데이터 업데이트

이전에 데이터 세트에 대한 데이터 세트 가져오기 작업을 만든 경우 다른 가져오기 작업을 사용하여 기존 대량 데이터에 추가하거나 기존 대량 데이터를 바꿀 수 있습니다. 기본적으로 데이터 세트 가져오기 작업은 대량으로 가져온 데이터 세트의 기존 데이터를 교체합니다. 대신 작업의 가져오기 모드를 변경하여 기존 데이터에 새 레코드를 추가할 수 있습니다.

데이터 세트 가져오기 작업과 함께 항목 상호 작용 데이터 세트 또는 작업 상호 작용 데이터 세트에 데이터를 추가하려면, 새 항목 상호 작용 또는 작업 상호 작용 레코드가 1,000개 이상 있어야 합니다.

이미 추천을 생성했거나 캠페인과 함께 사용자 지정 솔루션 버전을 배포한 경우, 새 대량 레코드가 권장 사항에 영향을 미치는 방식은 도메인 사용 사례 또는 사용하는 레시피에 따라 달라집니다. 자세한 내용은 새 데이터가 실시간 추천에 영향을 미치는 방식 단원을 참조하세요.

대량 레코드에 대한 필터 업데이트

대량 가져오기를 완료한 후 20분 이내에 Amazon Personalize는 데이터 세트 그룹에서 생성한 모든 필터를 새로운 대량 데이터로 업데이트합니다. 이 업데이트를 통해 Amazon Personalize는 사용자에 대한 추천을 필터링할 때 최신 데이터를 사용할 수 있습니다.

가져오기 모드

Amazon Personalize가 새 레코드를 데이터 세트에 추가하는 방법을 구성하려면 데이터 세트 가져오기 작업의 가져오기 모드를 지정합니다.

  • 데이터 세트의 기존 대량 데이터를 모두 덮어쓰려면 Amazon Personalize 콘솔에서 기존 데이터 바꾸기를 선택하거나 CreateDatasetImportJob API 작업에서 FULL를 지정합니다. 이렇게 해도 실시간으로 기록된 이벤트를 포함하여 개별적으로 가져온 데이터는 교체되지 않습니다.

  • 데이터 세트의 기존 데이터에 레코드를 추가하려면 기존 데이터에 추가를 선택하거나 CreateDatasetImportJob API 작업에서 INCREMENTAL을 지정합니다. Amazon Personalize는 동일한 ID를 가진 모든 레코드를 새 레코드로 교체합니다.

    데이터 세트 가져오기 작업과 함께 항목 상호 작용 데이터 세트 또는 작업 상호 작용 데이터 세트에 데이터를 추가하려면, 새 항목 상호 작용 또는 작업 상호 작용 레코드가 1,000개 이상 있어야 합니다.

대량 레코드를 가져오지 않은 경우 콘솔에서 기존 데이터에 추가 옵션을 사용할 수 없으며 CreateDatasetImportJob API 작업에서 FULL만 지정할 수 있습니다. 기본값은 전체 교체입니다.

대량 레코드 업데이트(콘솔)

중요

기본적으로 데이터 세트 가져오기 작업은 대량으로 가져온 데이터 세트의 기존 데이터를 교체합니다. 작업의 가져오기 모드를 지정하여 이를 변경할 수 있습니다.

Amazon Personalize 콘솔로 대량 데이터를 업데이트하려면 데이터 세트에 대한 데이터 세트 가져오기 작업을 생성하고 가져오기 모드를 지정합니다.

대량 레코드를 업데이트하려면(콘솔)
  1. https://console.aws.amazon.com/personalize/home 에서 Amazon Personalize 콘솔을 열고 계정에 로그인합니다.

  2. 데이터 세트 그룹 페이지에서 데이터 세트 그룹을 선택합니다.

  3. 탐색 창에서 데이터 세트를 선택합니다.

  4. 데이터 세트 페이지에서 업데이트하려는 데이터 세트를 선택합니다.

  5. 데이터 세트 가져오기 작업에서 데이터 세트 가져오기 작업 생성을 선택합니다.

  6. 데이터 세트 가져오기 작업 세부 정보에서 데이터 가져오기 작업 이름에 가져오기 작업의 이름을 지정합니다.

  7. 가져오기 모드에서 데이터 세트 업데이트 방법을 선택합니다. 기존 데이터 바꾸기 또는 기존 데이터에 추가 선택합니다. 자세한 내용은 가져오기 모드 섹션을 참조하세요.

  8. 입력 소스에서 S3 위치에 Amazon S3에서 데이터 파일이 저장되는 위치를 지정합니다. 다음 구문을 사용합니다.

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

    CSV 파일이 S3 버킷의 폴더에 있고 하나의 데이터 세트 가져오기 작업으로 여러 CSV 파일을 데이터 세트에 업로드하려면 CSV 파일 이름 없이 이 구문을 사용합니다.

  9. IAM 역할에서 새 역할을 선택하거나 기존 역할을 사용합니다. 필수 조건을 완료한 경우 기존 서비스 역할 사용을 선택하고 Amazon Personalize에 대한 IAM 역할 생성에서 생성한 역할을 지정합니다.

  10. 태그의 경우, 원하는 태그를 추가합니다. Amazon Personalize 리소스 태그 지정에 대한 자세한 내용은 Amazon Personalize 리소스에 태그 지정 단원을 참조하세요.

  11. 마침을 클릭합니다. 데이터 가져오기 작업이 시작되고 데이터 세트 개요 페이지가 표시됩니다. 상태가 ACTIVE로 표시되면 데이터 세트 가져오기가 완료된 것입니다.

대량 레코드 업데이트(AWS CLI)

중요

기본적으로 데이터 세트 가져오기 작업은 대량으로 가져온 데이터 세트의 기존 데이터를 교체합니다. 작업의 가져오기 모드를 지정하여 이를 변경할 수 있습니다.

대량 데이터를 업데이트하려면 create-dataset-import-job 명령을 사용합니다. import-mode의 경우 기존 데이터를 교체하려면 FULL를 선택하고 기존 데이터에 추가하려면 INCREMENTAL을 지정합니다. 자세한 내용은 가져오기 모드 섹션을 참조하세요.

다음 코드는 데이터를 데이터 세트로 점진적으로 가져오는 데이터 세트 가져오기 작업을 만드는 방법을 보여줍니다.

aws personalize create-dataset-import-job \ --job-name dataset import job name \ --dataset-arn dataset arn \ --data-source dataLocation=s3://bucketname/filename \ --role-arn roleArn \ --import-mode INCREMENTAL

대량 레코드 업데이트(AWS SDK)

중요

기본적으로 데이터 세트 가져오기 작업은 대량으로 가져온 데이터 세트의 기존 데이터를 교체합니다. 작업의 가져오기 모드를 지정하여 이를 변경할 수 있습니다.

대량 데이터를 업데이트하려면 데이터 세트 가져오기 작업을 만들고 가져오기 모드를 지정합니다. 다음 코드는 Python용 SDK(Boto3) 또는 Java 2.x용 SDK를 사용하여 Amazon Personalize에서 대량 데이터를 업데이트하는 방법을 보여줍니다.

SDK for Python (Boto3)

대량 데이터를 업데이트하려면 create_dataset_import_job 메서드를 사용합니다. import-mode의 경우 기존 데이터를 교체하려면 FULL를 선택하고 기존 데이터에 추가하려면 INCREMENTAL을 지정합니다. 자세한 내용은 가져오기 모드 섹션을 참조하세요.

import boto3 personalize = boto3.client('personalize') response = personalize.create_dataset_import_job( jobName = 'YourImportJob', datasetArn = 'dataset_arn', dataSource = {'dataLocation':'s3://bucket/file.csv'}, roleArn = 'role_arn', importMode = 'INCREMENTAL' )
SDK for Java 2.x

대량 데이터를 업데이트하려면 다음 createPersonalizeDatasetImportJob 메서드를 사용합니다. importImport의 경우 기존 데이터를 교체하려면 ImportMode.FULL를 선택하고 기존 데이터에 추가하려면 ImportMode.INCREMENTAL을 지정합니다. 자세한 내용은 가져오기 모드을 참조하세요.

public static String createPersonalizeDatasetImportJob(PersonalizeClient personalizeClient, String jobName, String datasetArn, String s3BucketPath, String roleArn, ImportMode importMode) { long waitInMilliseconds = 60 * 1000; String status; String datasetImportJobArn; try { DataSource importDataSource = DataSource.builder() .dataLocation(s3BucketPath) .build(); CreateDatasetImportJobRequest createDatasetImportJobRequest = CreateDatasetImportJobRequest.builder() .datasetArn(datasetArn) .dataSource(importDataSource) .jobName(jobName) .roleArn(roleArn) .importMode(importMode) .build(); datasetImportJobArn = personalizeClient.createDatasetImportJob(createDatasetImportJobRequest) .datasetImportJobArn(); DescribeDatasetImportJobRequest describeDatasetImportJobRequest = DescribeDatasetImportJobRequest.builder() .datasetImportJobArn(datasetImportJobArn) .build(); long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60; while (Instant.now().getEpochSecond() < maxTime) { DatasetImportJob datasetImportJob = personalizeClient .describeDatasetImportJob(describeDatasetImportJobRequest) .datasetImportJob(); status = datasetImportJob.status(); System.out.println("Dataset import job status: " + status); if (status.equals("ACTIVE") || status.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } return datasetImportJobArn; } catch (PersonalizeException e) { System.out.println(e.awsErrorDetails().errorMessage()); } return ""; }
SDK for JavaScript v3
// Get service clients and commands using ES6 syntax. import { CreateDatasetImportJobCommand, PersonalizeClient } from "@aws-sdk/client-personalize"; // create personalizeClient const personalizeClient = new PersonalizeClient({ region: "REGION" }); // Set the dataset import job parameters. export const datasetImportJobParam = { datasetArn: 'DATASET_ARN', /* required */ dataSource: { dataLocation: 's3://<name of your S3 bucket>/<folderName>/<CSVfilename>.csv' /* required */ }, jobName: 'NAME', /* required */ roleArn: 'ROLE_ARN', /* required */ importMode: "INCREMENTAL" /* optional, default is FULL */ }; export const run = async () => { try { const response = await personalizeClient.send(new CreateDatasetImportJobCommand(datasetImportJobParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();