BigQuery에 권장사항 내보내기

개요

BigQuery 내보내기를 사용하면 조직의 권장사항 항목 일일 스냅샷을 볼 수 있습니다. 이 작업은 BigQuery Data Transfer Service를 사용하여 수행합니다. 현재 BigQuery Export에 포함된 추천자를 보려면 이 문서를 참조하세요.

시작하기 전에

권장사항에 대한 데이터 전송을 만들기 전에 다음 단계를 완료합니다.

  • BigQuery Data Transfer Service에 데이터 전송을 관리할 수 있는 권한을 허용합니다. BigQuery 웹 UI를 사용하여 전송을 만드는 경우 권한을 볼 수 있도록 브라우저의 console.cloud.google.com에서 팝업을 허용해야 합니다. 자세한 내용은 BigQuery Data Transfer Service 사용 설정을 참조하세요.
  • 데이터를 저장할 BigQuery 데이터 세트를 만듭니다.
    • 데이터 전송은 데이터 세트가 생성된 리전과 동일한 리전을 사용합니다. 데이터 세트와 전송이 생성되면 위치를 변경할 수 없습니다.
    • 데이터 세트에는 전 세계 모든 리전의 통계와 권장사항이 포함됩니다. 따라서 이 작업은 프로세스 중 모든 데이터를 전역 리전으로 집계합니다. 데이터 상주 문제가 있는 경우 Google Cloud Customer Care를 참조하세요.
    • 데이터 세트 위치가 새로 시작된 경우 초기 내보내기 데이터 사용 가능 여부가 지연될 수 있습니다.

가격 책정

BigQuery로 권장사항을 내보내는 기능은 추천자 가격 책정 등급에 따라 모든 추천자 고객에게 제공됩니다.

필수 권한

데이터 전송을 설정하는 동안 데이터 전송을 만드는 프로젝트 수준에서 다음 권한이 필요합니다.

  • bigquery.transfers.update - 전송을 만들 수 있습니다.
  • bigquery.datasets.update - 대상 데이터 세트에서 작업을 업데이트할 수 있습니다.
  • resourcemanager.projects.update - 내보내기 데이터를 저장할 프로젝트를 선택할 수 있습니다.
  • pubsub.topics.list - 내보내기에 대한 알림을 받기위해 Pub/Sub 주제를 선택할 수 있습니다.

조직 수준에서 다음 권한이 필요합니다. 이 조직은 내보내기가 설정된 항목에 해당합니다.

  • recommender.resources.export - BigQuery로 권장사항을 내보낼 수 있습니다.

비용 절감 권장사항에 대해 협상된 가격을 내보내려면 다음 권한이 필요합니다.

  • billing.resourceCosts.get at project level - 프로젝트 수준 권장사항에 대해 협상된 가격 내보내기를 허용합니다.
  • billing.accounts.getSpendingInformation at billing account level - 결제 계정 수준 권장사항에 대해 협상된 가격 내보내기를 허용합니다.

이러한 권한이 없으면 협상된 가격 대신 표준 가격을 사용하여 비용 절감 권장사항을 내보냅니다.

권한 부여

데이터 전송을 만드는 프로젝트에 다음 역할을 부여해야 합니다.

    대상 데이터 세트에 대한 전송 및 업데이트 작업을 만들려면 다음 역할을 부여해야 합니다.

  • BigQuery 관리자 역할 - roles/bigquery.admin
  • 내보내기 데이터를 저장하고 알림을 수신할 Pub/Sub 주제를 선택할 수 있는 프로젝트를 선택하는 권한이 포함된 역할이 여러 개 있습니다. 이러한 권한을 모두 사용하려면 다음 역할을 부여하면 됩니다.

  • 프로젝트 소유자 역할 - roles/owner
  • 비용 절감 프로젝트 수준 권장사항에 대해 협상된 가격을 내보내기 위해서는 billing.resourceCosts.get 권한이 포함된 역할이 여러 개 있습니다. 이들 중 하나를 부여할 수 있습니다.

  • 프로젝트 소유자 역할 - roles/owner
  • 프로젝트 뷰어 역할 - roles/viewer
  • 프로젝트 편집자 역할 - roles/editor
  • 비용 절감 결제 계정 수준 권장사항에 대해 협상된 가격을 내보내기 위해서는 billing.accounts.getSpendingInformation 권한이 포함된 역할이 여러 개 있습니다. 이들 중 하나를 부여할 수 있습니다.

  • 결제 계정 관리자 역할 - roles/billing.admin
  • 결제 계정 비용 관리자 역할 - roles/billing.costsManager
  • 결제 계정 뷰어 역할 - roles/billing.viewer

조직 수준에서 다음 역할을 부여해야 합니다.

  • Google Cloud Console의 권장사항 내보내기(roles/recommender.exporter) 역할

필수 권한이 포함된 커스텀 역할을 만들 수도 있습니다.

권장사항 데이터 전송 만들기

  1. Google Cloud 콘솔에 로그인합니다.

    Google Cloud 콘솔에 로그인

  2. 화면에서 권장사항 탭을 클릭합니다.

  3. 내보내기를 클릭하여 BigQuery 내보내기 양식을 확인합니다.

  4. 권장사항 데이터를 저장할 대상 프로젝트를 선택하고 다음을 클릭합니다.

  5. API 사용 설정을 클릭하여 내보낼 BigQuery API를 사용 설정합니다. 완료하는 데 몇 초 정도 걸릴 수 있습니다. 완료되면 계속을 클릭합니다.

  6. 전송 구성 양식에서 다음 세부정보를 입력합니다.

    • 전송 구성 이름 섹션의 표시 이름에 전송 이름을 입력합니다. 전송 이름은 나중에 수정해야 할 경우에 전송을 쉽게 식별할 수 있는 값이면 됩니다.

    • 일정 옵션 섹션의 일정에서 기본값(지금 시작)을 유지하거나 설정 시간에 시작을 클릭합니다.

      • 반복에서 전송을 실행할 빈도 옵션을 선택합니다.

        • 매일(기본값)
        • 매주
        • 매월
        • 커스텀
        • 주문형
      • 시작일 및 실행 시간에 전송을 시작할 날짜 및 시간을 입력합니다. 지금 시작을 선택하면 이 옵션은 중지됩니다.

    • 대상 설정 섹션의 대상 데이터 세트에서 데이터를 저장하기 위해 만든 데이터 세트를 선택합니다.

    • 데이터 소스 세부정보 섹션에서 다음을 수행합니다.

      • organization_id의 기본값은 현재 권장사항을 보고 있는 조직입니다. 권장사항을 다른 조직으로 내보내려면 조직 뷰어의 콘솔 상단에서 이를 변경하면 됩니다.

    • (선택사항) 알림 옵션 섹션에서 다음을 수행합니다.

      • 전환을 클릭해서 이메일 알림을 사용 설정합니다. 이 옵션을 사용 설정하면 전송 실행이 실패할 때 전송 관리자에게 이메일 알림이 발송됩니다.
      • Pub/Sub 주제 선택에서 주제 이름을 선택하거나 주제 만들기를 클릭합니다. 이 옵션은 전송에 대한 Pub/Sub 실행 알림을 구성합니다.

  7. 만들기를 클릭하여 전송을 만듭니다.

  8. 동의 팝업에서 허용을 클릭합니다.

  9. 전송이 생성되면 다시 권장사항 허브로 이동됩니다. 링크를 클릭하여 전송 구성 세부정보에 액세스할 수 있습니다. 또는 다음을 수행하여 전송에 액세스할 수 있습니다.

    • Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

      BigQuery 페이지로 이동

    • 데이터 전송을 클릭합니다. 사용 가능한 모든 데이터 전송을 볼 수 있습니다.

전송 실행 기록 보기

전송 실행 기록을 보려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery 페이지로 이동

  2. 데이터 전송을 클릭합니다. 사용 가능한 모든 데이터 전송을 볼 수 있습니다.

  3. 목록에서 적절한 전송을 클릭합니다.

  4. 실행 기록 탭에 표시된 실행 전송 목록에서 세부정보를 볼 전송 항목을 선택합니다.

  5. 선택한 개별 실행 전송의 실행 세부정보 패널이 표시됩니다. 표시될 수 있는 실행 세부정보 중 일부는 다음과 같습니다.

    • 사용할 수 없는 소스 데이터로 인해 지연된 전송
    • 테이블로 내보낸 행 수를 나타내는 작업
    • 백필을 부여하고 나중에 예약해야 하는 데이터 소스에 대한 권한이 누락되었습니다.

언제 데이터를 내보내나요?

데이터 전송을 만들면 첫 번째 내보내기가 2일 내에 수행됩니다. 첫 번째 내보내기 후에는 설정 중에 요청한 주기에 따라 내보내기 작업이 실행됩니다. 다음 조건이 적용됩니다.

  • 특정 일(D)의 내보내기 작업은 일과 종료 시간(D) 데이터를 BigQuery 데이터 세트로 내보냅니다. 이 데이터는 일반적으로 다음 날 종료(D+1) 시점에 완료됩니다. 내보내기 작업은 PST 시간대로 실행되며 다른 시간대의 경우 추가 지연이 발생하는 것처럼 보일 수 있습니다.

  • 일일 내보내기 작업은 내보낼 데이터를 모두 사용할 수 있을 때까지 실행되지 않습니다. 이로 인해 데이터 세트가 업데이트되는 날짜 및 시간에 변동이 발생하거나 때로는 지연이 발생할 수 있습니다. 따라서 특정 날짜가 지정된 테이블로 고정되었거나 날짜가 지정된 종속 항목을 포함하는 대신 사용 가능한 최신 데이터 스냅샷을 사용하는 것이 가장 좋습니다.

내보내기에 대한 일반적인 상태 메시지

BigQuery로 권장사항을 내보내는 일반적인 상태 메시지를 알아봅니다.

사용자에게 필요한 권한이 없음

사용자에게 필요한 recommender.resources.export 권한이 없으면 다음 메시지가 표시됩니다. 다음 메시지가 표시됩니다.

User does not have required permission "recommender.resources.export". Please, obtain the required permissions for the datasource and try again by triggering a backfill for this date

이 문제를 해결하려면 내보내기가 설정된 조직의 조직 수준에서 내보내기를 설정하는 user/service accountroles/recommender.exporter IAM 역할을 부여하세요. 아래 gcloud 명령어를 통해 지정할 수 있습니다.

  • 사용자의 경우:

    gcloud organizations add-iam-policy-binding *<organization_id>* --member='user:*<user_name>*' --role='roles/recommender.exporter'
    
  • 서비스 계정의 경우:

    gcloud organizations add-iam-policy-binding *<organization_id>* --member='serviceAccount:*<service_acct_name>*' --role='roles/recommender.exporter'
    

소스 데이터를 사용할 수 없어 전송이 지연됨

다음 데이터는 소스 데이터를 아직 사용할 수 없기 때문에 전송이 재예약되면 발생합니다. 이는 오류가 아니며, 내보내기 파이프라인이 아직 하루 동안 완료되지 않았음을 의미합니다. 새로 예약된 시간에 전송이 다시 실행되며 내보내기 파이프라인이 완료되면 성공합니다. 다음 메시지가 표시됩니다.

Transfer deferred due to source data not being available

소스 데이터를 찾을 수 없음

다음 메시지는 F1toPlacer 파이프라인이 완료되었지만 내보내기가 설정된 조직에 권장사항 또는 통계가 발견되지 않은 경우에 발생합니다. 다음 메시지가 표시됩니다.

Source data not found for 'recommendations_export$<date>'insights_export$<date>

이 메시지는 다음과 같은 이유로 발생합니다.

  • 사용자가 내보내기를 설정한지 2일 이내입니다. 고객 가이드는 고객에게 내보내기가 제공되기까지 하루 정도 지연될 수 있음을 알립니다.
  • 특정 날짜에 조직에서 사용할 수 있는 권장사항이나 통계가 없습니다. 이는 실제 사례이거나 하루 동안 모든 권장사항 또는 통계가 제공되기 전에 파이프라인이 실행되었을 수 있습니다.

전송 테이블 보기

권장사항을 BigQuery로 내보내면 데이터 세트에 파티션을 나눈 테이블 두 개가 포함됩니다.

  • recommendations_export
  • insight_export

테이블 및 스키마에 대한 자세한 내용은 테이블 만들기 및 사용스키마 지정을 참조하세요.

데이터 전송 테이블을 보려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다. BigQuery 페이지로 이동

  2. 데이터 전송을 클릭합니다. 사용 가능한 모든 데이터 전송을 볼 수 있습니다.

  3. 목록에서 적절한 전송을 클릭합니다.

  4. 구성 탭을 클릭하고 데이터 세트를 클릭합니다.

  5. 탐색기 패널에서 프로젝트를 확장하고 데이터 세트를 선택합니다. 설명 및 세부정보가 세부정보 패널에 표시됩니다. 데이터 세트의 테이블은 탐색기 패널에 데이터 세트 이름과 함께 나열됩니다.

백필 예약

과거의 날짜(조직에서 내보내기를 선택한 날짜보다 늦은 날짜)에 대한 권장사항을 백필을 예약하여 내보낼 수 있습니다. 백필을 예약하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery 페이지로 이동

  2. 데이터 전송을 클릭합니다.

  3. 전송 페이지의 목록에서 적절한 전송을 클릭합니다.

    1. 백필 예약을 클릭합니다.

    2. 백필 예약 대화상자에서 시작일종료일을 선택합니다.

전송 작업에 대한 자세한 내용은 전송 작업을 참조하세요.

쿼리 예

다음 샘플 쿼리를 사용하여 내보낸 데이터를 분석할 수 있습니다.

추천 기간이 일 단위로 표시되는 권장사항의 비용 절감 보기

SELECT name, recommender, target_resources,
  case primary_impact.cost_projection.cost.units is null
       when true then round(primary_impact.cost_projection.cost.nanos * power(10,-9),2)
       else
       round( primary_impact.cost_projection.cost.units +
       (primary_impact.cost_projection.cost.nanos * power(10,-9)), 2)
   end
   as dollar_amt,
   primary_impact.cost_projection.duration.seconds/(60*60*24) as duration_in_days
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and primary_impact.category = "COST"

사용하지 않는 IAM 역할 목록 보기

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and recommender = "google.iam.policy.Recommender"
and recommender_subtype = "REMOVE_ROLE"

더 작은 역할로 바꿔야 하는 부여된 역할 목록 보기

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and recommender = "google.iam.policy.Recommender"
and recommender_subtype = "REPLACE_ROLE"

권장사항의 통계 보기

SELECT recommendations.name as recommendation_name,
insights.name as insight_name,
recommendations.cloud_entity_id,
recommendations.cloud_entity_type,
recommendations.recommender,
recommendations.recommender_subtype,
recommendations.description,
recommendations.target_resources,
recommendations.recommendation_details,
recommendations.state,
recommendations.last_refresh_time as recommendation_last_refresh_time,
insights.insight_type,
insights.insight_subtype,
insights.category,
insights.description,
insights.insight_details,
insights.state,
insights.last_refresh_time as insight_last_refresh_time
FROM `<project>.<dataset>.recommendations_export` as recommendations,
   `<project>.<dataset>.insights_export` as insights
WHERE DATE(recommendations._PARTITIONTIME) = "<date>"
and DATE(insights._PARTITIONTIME) = "<date>"
and insights.name in unnest(recommendations.associated_insights)

특정 폴더에 속한 프로젝트의 권장사항 보기

이 쿼리는 프로젝트에서 최대 5개 수준까지 상위 폴더를 반환합니다.

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE DATE(_PARTITIONTIME) = "<date>"
and "<folder_id>" in unnest(ancestors.folder_ids)

현재까지 내보낸 사용 가능한 최신 날짜에 대한 권장사항 보기

DECLARE max_date TIMESTAMP;

SET max_date = (
  SELECT MAX(_PARTITIONTIME) FROM
  `<project>.<dataset>.recommendations_export`
  );

SELECT *
FROM `<project>.<dataset>.recommendations_export`
WHERE _PARTITIONTIME = max_date

Sheets를 사용하여 BigQuery 데이터 탐색

BigQuery에서 쿼리를 실행하는 대신 새로운 BigQuery 데이터 커넥터인 연결된 시트를 사용하여 스프레드시트에서 수십억 개의 BigQuery 데이터 행을 액세스 분석, 시각화, 공유할 수 있습니다. 자세한 내용은 Google Sheets에서 BigQuery 데이터 시작하기를 참조하세요.

BigQuery 명령줄 및 REST API를 사용하여 내보내기 설정

  • 필요한 권한 가져오기:

    Google Cloud Console 또는 명령줄을 통해 필요한 Identity and Access Management 권한을 가져올 수 있습니다.

    예를 들어 명령줄을 사용하여 서비스 계정의 조직 수준 recommender.resources.export 권한을 가져오려면 다음 명령어를 실행합니다.

    gcloud organizations add-iam-policy-binding *<organization_id>* --member=serviceAccount:*<service_acct_name>*' --role='roles/recommender.exporter'

  • 데이터 세트 만들기 및 BigQuery API 사용 설정

  • BigQuery 데이터 소스에 프로젝트 등록

    Datasource to use: 6063d10f-0000-2c12-a706-f403045e6250

  • 내보내기 만들기:

    bq mk \
    --transfer_config \
    --project_id=project_id \
    --target_dataset=dataset_id \
    --display_name=name \
    --params='parameters' \
    --data_source=data_source \
    --service_account_name=service_account_name
    

    각 항목의 의미는 다음과 같습니다.

    • project_id는 프로젝트 ID입니다.
    • dataset는 전송 구성의 대상 데이터 세트 ID입니다.
    • name은 전송 구성의 표시 이름입니다. 전송 이름은 나중에 수정해야 할 경우에 전송을 쉽게 식별할 수 있는 값이면 됩니다.
    • parameters에는 JSON 형식으로 생성된 전송 구성의 매개변수가 있습니다. 권장사항 및 통계 BigQuery Export의 경우 권장사항과 통계를 내보내야 하는 organization_id를 제공해야 합니다. 매개변수 형식: '{"organization_id":"<org id>"}'
    • 사용할 data_source 데이터 소스: '6063d10f-0000-2c12-a706-f403045e6250'
    • service_account_name은 내보내기를 인증하는 데 사용되는 서비스 계정 이름입니다. 서비스 계정은 전송을 만드는 데 사용한 것과 동일한 project_id가 소유해야 하며 위에 나열된 모든 필수 권한이 있어야 합니다.
  • UI 또는 BigQuery 명령줄을 통해 기존 내보내기를 관리합니다.

  • 참고 - 향후 내보내기 구성을 업데이트하는 사용자와 관계없이 내보내기는 계정을 설정한 사용자로 실행됩니다. 예를 들어 서비스 계정을 사용하여 내보내기를 설정하고 나중에 인간 사용자가 BigQuery Data Transfer Service UI를 통해 내보내기 구성을 업데이트하면 내보내기가 서비스 계정으로 계속 실행됩니다. 이 경우 내보내기가 실행될 때마다 서비스 계정에 'recommender.resources.export'의 권한 확인이 수행됩니다.