사용자 이벤트 관리

이 페이지에서는 사용자 이벤트를 보고 삭제하는 방법을 설명합니다. 사용자 이벤트가 발생할 때 기록하는 방법에 대한 상세 설명은 실시간 사용자 이벤트 기록을 참조하세요. 과거 이벤트에서 사용자 이벤트 데이터를 가져오려면 이전 사용자 이벤트 가져오기를 참조하세요.

사용자 이벤트 재조인 튜토리얼

이 튜토리얼에서는 userEvents:rejoin 엔드포인트에 POST 요청을 보내 사용자 이벤트를 다시 조인하는 방법을 보여줍니다.


Cloud Shell 편집기에서 이 태스크의 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.

둘러보기


사용자 이벤트 삭제 튜토리얼

이 튜토리얼에서는 사용자 이벤트를 삭제하는 방법을 설명합니다.


Cloud Shell 편집기에서 이 태스크의 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.

둘러보기


집계된 사용자 이벤트 정보 보기

Search for Retail 콘솔 데이터 페이지의 이벤트 탭에서 이벤트 통합 측정항목을 봅니다. 이 페이지에는 지난해에 쓰거나 가져온 모든 이벤트가 표시됩니다. 데이터 수집이 완료된 후 측정항목이 표시되는 데 최대 24시간이 걸릴 수 있습니다.

데이터 페이지로 이동

소매업용 Vertex AI Search 사용자 이벤트 통계

사용자 이벤트 다시 조인

userEvents:rejoin 엔드포인트에 POST 요청을 보내 카탈로그 이벤트를 다시 조인할 수 있습니다.

다시 조인 작업은 지정된 이벤트를 제품 카탈로그의 최신 버전과 조인합니다.

사용자 이벤트가 수집될 때 연결된 제품이 카탈로그에 없으면 사용자 이벤트가 조인되지 않은 것으로 간주됩니다. 조인되지 않은 이벤트는 자세한 제품 정보를 제공하지 않으며 모델 학습 및 결과 제공에 유용하지 않습니다.

다시 조인 작업은 조인되지 않은 이벤트를 처리하는 것 외에도 잘못된 제품 카탈로그와 조인된 이벤트를 수정하는 데 사용할 수 있습니다.

이 메서드를 호출하려면 Retail AI Admin IAM 역할이 있어야 합니다. 다시 조인 작업은 완료하는 데 몇 시간 또는 며칠이 걸릴 수 있습니다.

curl

다시 조인하려는 이벤트 유형에 따라 userEventRejoinScope를 설정합니다.

  • USER_EVENT_REJOIN_SCOPE_UNSPECIFIED: 기본값입니다. 조인된 이벤트와 조인되지 않은 이벤트 모두에 대한 재조인을 트리거합니다.
  • JOINED_EVENTS: 조인된 이벤트에 대해서만 재조인을 트리거합니다.
  • UNJOINED_EVENTS: 조인되지 않은 이벤트에 대해서만 재조인을 트리거합니다.

다음 예시는 조인되지 않은 이벤트에 대해서만 재조인을 트리거합니다.

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
     'userEventRejoinScope': 'UNJOINED_EVENTS'
     }" \
    "https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/userEvents:rejoin"

다음과 같은 응답 객체가 수신됩니다.

{
  "name": "projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/OPERATION_ID"
}

재조인의 상태를 확인할 수 있습니다. OPERATION_ID를 재조인 메서드에서 반환한 작업 ID로 바꿉니다.

curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/OPERATION_ID"

작업이 완료되면 작업 상태가 done으로 반환됩니다.

{
  "name": "projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/OPERATION_ID",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.retail.v2.RejoinUserEventsResponse",
    "rejoinedUserEventsCount": "1"
  }
}

Java

public static String rejoinUserEvents(UserEventRejoinScope scope)
    throws IOException, InterruptedException, ExecutionException {
  UserEventServiceClient userEventsClient = getUserEventServiceClient();

  RejoinUserEventsRequest request = RejoinUserEventsRequest.newBuilder()
      .setParent(DEFAULT_CATALOG_NAME)
      .setUserEventRejoinScope(scope)
      .build();

  String operationName = userEventsClient
      .rejoinUserEventsAsync(request).getName();

  userEventsClient.shutdownNow();
  userEventsClient.awaitTermination(2, TimeUnit.SECONDS);

  return operationName;
}

사용자 이벤트 삭제

일반적으로 사용자 이벤트는 기록된 후에 그대로 유지해야 합니다. 이벤트를 삭제하지 않는 것이 좋습니다.

이벤트 삭제를 완료하는 데 며칠이 걸릴 수 있습니다. 사용자 이벤트를 완전히 재설정하려면 대신 새 프로젝트를 만드는 것이 좋습니다.

올바르게 기록되지 않은 사용자 이벤트를 삭제해야 하는 경우 userEvents.purge 메서드를 사용하여 삭제할 수 있습니다.

필터 문자열을 사용하여 삭제할 이벤트를 지정합니다. eventTime, eventType, visitorID, userID 필드를 필터링하여 사용자 이벤트를 선택적으로 삭제할 수 있습니다.

삭제는 실행취소할 수 없으므로 사용자 이벤트를 삭제하기 전에 테스트 실행을 수행하여 필터 문자열을 테스트합니다. force 필드는 기본적으로 false로 설정됩니다. 이 설정은 실제로 삭제하지 않고 삭제할 이벤트 수를 반환합니다. 사용자 이벤트를 실제로 삭제할 준비가 되면 force 필드를 true로 설정합니다.

curl

다음 예시에서는 Zulu 시간 날짜 형식을 사용해야 하는 시간 범위를 필터링합니다. force 필드는 false로 설정됩니다.

curl -X POST \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token)"" \
  -H "Content-Type: application/json; charset=utf-8" \
  --data '{
    "filter":"eventTime > \"2019-12-23T18:25:43.511Z\" eventTime < \"2019-12-23T18:30:43.511Z\"",
    "force":"false"
  }' \
  "https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/userEvents:purge"

다음과 같은 응답 객체를 받아야 합니다. 여기서 purge-user-events-54321은 작업 ID입니다.

{
  "name": "projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/purge-user-events-54321"
}

이 예시에서는 작업 상태를 요청합니다.

curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/OPERATION_ID"

작업 상태 예시:

{
  "name": "projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/OPERATION_ID",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.retail.v2.PurgeUserEventsResponse",
    "purgedEventsCount": "1"
  }
}

force 필드를 true로 설정하면 강제로 삭제됩니다.

curl -X POST \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token)"" \
  -H "Content-Type: application/json; charset=utf-8" \
  --data '{
    "filter":"eventTime > \"2019-12-23T18:25:43.511Z\" eventTime < \"2019-12-23T18:30:43.511Z\"",
    "force":"true"
  }' \
"https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/userEvents:purge"

Java

public static String purgeUserEvents(
    String filter)
    throws IOException, InterruptedException, ExecutionException {
  UserEventServiceClient userEventsClient = getUserEventServiceClient();

  PurgeUserEventsRequest request = PurgeUserEventsRequest.newBuilder()
      .setParent(DEFAULT_CATALOG_NAME)
      .setFilter(filter)
      .setForce(true)
      .build();

  String operationName = userEventsClient
      .purgeUserEventsAsync(request).getName();

  userEventsClient.shutdownNow();
  userEventsClient.awaitTermination(2, TimeUnit.SECONDS);

  return operationName;
}

사용자 이벤트 필터 사용

삭제할 사용자 이벤트를 필터링할 수 있습니다.

필터는 다음 제한을 하나 이상 포함하는 문자열입니다.

  • eventTime

    삭제할 이벤트를 바인딩하는 타임스탬프를 제공합니다. 이 필터는 보다 큼(>) 또는 보다 작음(<) 기호를 사용하여 한 번 또는 두 번 지정할 수 있습니다. 제한된 시간은 하나의 인접한 블록이어야 합니다.

  • eventType

    삭제할 이벤트를 단일 이벤트 유형으로 제한합니다.

  • visitorID

    삭제할 이벤트를 단일 방문자 ID로 제한합니다.

  • userID

    삭제할 이벤트를 단일 사용자 ID로 제한합니다.

모든 제한을 충족하는 사용자 이벤트만 삭제됩니다.

2019년 2월 1일 또는 그 이후에 로깅된 add-to-cart 유형의 모든 사용자 이벤트를 삭제하려면 다음 필터 문자열을 제공합니다.

eventTime > "2019-02-01T00:00:00Z" eventType = add-to-cart