승인된 데이터 세트

이 문서에서는 BigQuery에서 승인된 데이터 세트를 사용하는 방법을 설명합니다. 승인된 데이터 세트를 사용하면 지정된 데이터 세트의 모든 뷰가 두 번째 데이터 세트의 데이터에 액세스하도록 승인할 수 있습니다. 승인된 데이터 세트를 사용하면 개별 승인된 뷰를 구성할 필요가 없습니다.

다음을 사용하여 BigQuery에서 승인된 데이터 세트를 만들 수 있습니다.

개요

BigQuery의 는 SQL 쿼리로 정의되는 가상 테이블입니다. 예를 들어 뷰의 쿼리는 개인 식별 정보(PII)가 포함된 열을 제외하고 테이블 열의 하위 집합만 반환할 수 있습니다. 뷰를 쿼리하려면 사용자가 뷰의 쿼리에서 액세스하는 리소스에 액세스할 수 있어야 합니다.

사용자가 뷰에서 참조하는 리소스에 대한 직접 액세스 권한을 부여하지 않고 사용자가 뷰를 쿼리하도록 하려면 승인된 뷰를 사용하면 됩니다. 예를 들어 승인된 뷰를 사용하면 모든 기본 데이터에 대한 주 구성원에 액세스 권한을 부여하지 않고도 지정된 그룹 또는 사용자 (주 구성원)와 함께 보다 제한된 데이터를 공유할 수 있습니다. 주 구성원에게 뷰에 대한 액세스 권한을 부여하고 기본 데이터가 포함된 데이터 세트에 대한 뷰 액세스 권한을 부여하면 됩니다.

각 개별 뷰를 승인할 필요 없이 뷰 컬렉션에 데이터 세트에 대한 액세스 권한을 부여하려는 경우 해당 뷰를 데이터 세트로 그룹화한 다음 데이터가 포함된 데이터 세트에 뷰 액세스 권한을 부여할 수 있습니다. 그런 다음 필요에 따라 주 구성원에게 데이터 세트에 뷰 그룹이 있는 데이터세트 또는 개별 뷰에 대해 액세스 권한을 부여할 수 있습니다. 다른 데이터 세트에 액세스할 수 있는 데이터 세트를 승인된 데이터 세트라고 합니다. 다른 데이터 세트가 데이터에 액세스하도록 승인하는 데이터 세트를 공유 데이터 세트라고 합니다.

필수 권한 및 역할

데이터 세트를 승인하거나 데이터 세트의 승인을 취소하려면 공유하려는 데이터 세트의 액세스 제어 목록(ACL)을 업데이트할 수 있는 Identity and Access Management(IAM) 권한이 있어야 합니다.

데이터 세트가 승인된 후 승인된 데이터 세트에서 뷰를 만들거나 업데이트하려면 동일한 권한이 필요합니다. 자세한 내용은 승인된 데이터 세트에서 뷰 만들기 또는 업데이트를 참조하세요.

권한 리소스
bigquery.datasets.get 공유 중인 데이터 세트입니다.
bigquery.datasets.update 공유 중인 데이터 세트입니다.

사전 정의된 다음의 IAM 역할은 필요한 권한을 제공합니다.

역할 설명
bigquery.dataOwner BigQuery 데이터 소유자
bigquery.admin BigQuery 관리자

할당량 및 한도

승인된 데이터 세트에는 데이터 세트 한도가 적용됩니다. 자세한 내용은 데이터 세트 한도를 참조하세요.

데이터 세트 승인

다음과 같이 공유하려는 데이터 세트의 액세스 목록에 승인할 데이터 세트를 추가하여 다른 데이터 세트에 액세스할 수 있도록 데이터 세트의 현재 및 미래 뷰를 승인할 수 있습니다.

콘솔

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

    BigQuery로 이동

  2. 탐색기 패널에서 프로젝트를 확장하고 공유할 데이터가 포함된 데이터 세트를 선택합니다.

  3. 작업 아이콘을 클릭하고 열기를 선택합니다.

  4. 세부정보 창이 나타나면 공유를 클릭하고 데이터 세트 승인 옵션을 선택합니다.

    데이터 세트 승인

  5. 표시되는 승인된 데이터 세트 창에서 승인하려는 데이터세트의 데이터 세트 ID를 다음 형식으로 입력합니다.

    PROJECT.AUTHORIZED_DATASET

    예를 들면 다음과 같습니다.

    myProject.myDataset

  6. 승인 추가를 클릭한 후 닫기를 클릭합니다.

bq

  1. Cloud Shell을 엽니다.

    Cloud Shell로 이동

  2. bq show 명령어를 사용하여 JSON 파일에 공유하려는 데이터 세트의 기존 메타데이터(액세스 제어 목록(ACL) 포함)를 작성합니다.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. 텍스트 편집기를 사용하여 승인하려는 데이터 세트를 FILE_PATH에서 생성된 JSON 파일의 기존 access 섹션에 추가합니다.

    예를 들면 다음과 같습니다.

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]

  4. bq update 명령어를 사용하여 공유 데이터 세트를 업데이트합니다. 예를 들면 다음과 같습니다.

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. 승인된 데이터 세트가 추가되었는지 확인하려면 bq show 명령어를 다시 입력합니다. 예를 들면 다음과 같습니다.

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. 다음과 같이 datasets.get 메서드를 호출하여 공유할 데이터 세트의 현재 메타데이터를 가져옵니다.

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    응답 본문에서는 데이터 세트의 JSON 메타데이터가 포함된 Dataset 리소스를 반환합니다.

  2. 다음과 같이 Dataset 리소스에서 반환된 JSON 메타데이터의 access 섹션에 승인하려는 데이터 세트를 추가합니다.

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]
  3. datasets.update 메서드를 사용하여 추가된 승인으로 데이터 세트를 업데이트합니다.

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    요청 본문에 업데이트된 Dataset 리소스를 포함합니다.

  4. datasets.get 메서드를 다시 호출하여 승인된 데이터 세트가 추가되었는지 확인할 수 있습니다.

데이터 세트의 승인 취소

다른 소스 데이터 세트에 액세스하도록 승인된 데이터 세트를 삭제하는 경우 변경사항이 소스 데이터 세트의 액세스 제어 목록(ACL)에 완전히 반영되는 데 최대 24시간이 걸릴 수 있습니다. 이 시간 동안에는 다음을 할 수 없습니다.

  • 삭제된 데이터 세트를 통해 소스 데이터에 액세스할 수 없습니다.
  • 삭제된 데이터 세트는 소스 데이터 세트의 ACL에 계속 표시되고 승인된 데이터 세트 한도에 반영될 수 있습니다. 따라서 ACL이 업데이트될 때까지 새로운 승인된 데이터 세트를 만들지 못할 수 있습니다.

승인된 데이터 세트의 뷰에 부여된 액세스 권한을 취소하려면 다음과 같이 공유 데이터 세트의 액세스 목록에서 승인된 데이터 세트를 삭제합니다.

콘솔

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

    BigQuery로 이동

  2. 탐색기 패널에서 프로젝트를 확장하고 공유 데이터 세트를 선택합니다.

  3. 작업 아이콘을 클릭하고 열기를 선택합니다.

  4. 세부정보 창이 나타나면 공유를 클릭하고 데이터 세트 승인 옵션을 선택합니다.

    데이터 세트 승인

  5. 승인된 데이터 세트 창이 나타나면 현재 승인된 데이터 세트 섹션에서 승인된 데이터 세트 항목을 찾습니다.

  6. 삭제하려는 승인된 데이터 세트 옆에 있는 삭제 아이콘을 클릭한 후 닫기를 클릭합니다.

bq

  1. Cloud Shell을 엽니다.

    Cloud Shell로 이동

  2. bq show 명령어를 사용하여 공유 데이터 세트의 기존 메타데이터(액세스 제어 목록(ACL) 포함)를 JSON 파일에 씁니다.

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. 텍스트 편집기를 사용하여 다음과 같이 FILE_PATH에서 생성된 JSON 파일의 access 섹션에서 승인된 데이터 세트를 삭제합니다.

      {
        "dataset": {
          "dataset": {
            "project_id": "PROJECT",
            "dataset_id": "AUTHORIZED_DATASET"
          },
          "target_types": "VIEWS"
        }
      }
  4. bq update 명령어를 사용하여 공유 데이터 세트를 업데이트합니다. 예를 들면 다음과 같습니다.

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. 승인된 데이터 세트가 삭제되었는지 확인하려면 bq show 명령어를 다시 입력합니다. 예를 들면 다음과 같습니다.

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. 다음과 같이 datasets.get 메서드를 호출하여 공유 데이터 세트의 현재 메타데이터를 가져옵니다.

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    응답 본문에서는 데이터 세트의 JSON 메타데이터가 포함된 Dataset 리소스를 반환합니다.

  2. Dataset 리소스에서 반환된 JSON의 access 섹션에서 승인된 데이터 세트를 삭제합니다. 예를 들면 다음과 같습니다.

     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
  3. datasets.update 메서드를 사용하여 삭제된 승인으로 데이터 세트를 업데이트합니다.

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    요청 본문에 업데이트된 Dataset 리소스를 포함합니다.

  4. datasets.get 메서드를 다시 호출하여 승인된 데이터 세트가 삭제되었는지 확인할 수 있습니다.

승인된 데이터 세트에서 뷰 만들기 또는 업데이트

승인된 데이터 세트에 있는 뷰를 만들거나 업데이트하려면 필수 권한 및 역할 외에도 create 또는 표준 데이터 세트에서 뷰를 업데이트하도록 나열된 공유 데이터 세트에 대한 권한이 있어야 합니다.

다음 표에는 승인된 데이터 세트에 있는 뷰를 만들거나 업데이트하는 데 필요한 Identity and Access Management(IAM) 권한이 요약되어 있습니다.

권한 리소스
bigquery.datasets.get 공유 중인 데이터 세트입니다.
bigquery.datasets.update 공유 중인 데이터 세트입니다.
bigquery.tables.getData 만들거나 업데이트하는 새 뷰에서 참조되는 공유 데이터 세트의 모든 테이블 또는 뷰입니다.
bigquery.tables.create 뷰를 만드는 승인된 데이터 세트입니다.
bigquery.tables.update 뷰를 업데이트하는 승인된 데이터 세트입니다.

승인된 데이터 세트에서 뷰를 삭제하기 위한 추가 권한은 필요하지 않습니다.

승인된 데이터 세트에서 뷰 쿼리

승인된 데이터 세트에서 뷰를 쿼리하려면 사용자가 뷰에 대한 액세스 권한이 있어야 하지만 공유 데이터 세트에 대한 액세스 권한은 필요하지 않습니다.

자세한 내용은 승인된 뷰를 참조하세요.

승인된 데이터 세트 예시

다음 예시에서는 승인된 데이터 세트를 만들고 사용하는 방법을 설명합니다.

private_datasetpublic_dataset라는 데이터 세트 두 개가 있다고 가정합니다. private_dataset 데이터 세트에는 private_table이라는 테이블이 포함됩니다. public_dataset 데이터 세트에는 private_table_filtered라는 뷰가 있습니다. private_table_filtered 뷰는 private_table 테이블의 일부 필드를 반환하는 쿼리를 기반으로 합니다.

다음과 같이 private_table_filtered 뷰에서 반환된 데이터에 대한 액세스 권한을 사용자에게 부여할 수 있지만 private_table 테이블의 모든 데이터에 액세스할 수는 없습니다.

  1. public_dataset 데이터 세트에서 사용자에게 bigquery.dataViewer 역할을 부여합니다. 이 역할에는 사용자가 public_dataset 데이터 세트의 뷰를 쿼리할 수 있는 bigquery.tables.getData 권한이 포함됩니다. 데이터 세트에서 사용자에게 역할을 부여하는 방법에 대한 자세한 내용은 데이터 세트에 대한 액세스 제어를 참조하세요.

    이제 사용자는 public_dataset의 뷰를 쿼리할 권한이 있지만 private_datasetprivate_table 테이블에 액세스할 수 없습니다. 사용자가 private_table 테이블을 직접 쿼리하려고 하거나 private_table_filtered 뷰를 쿼리하여 간접적으로 private_table 테이블에 액세스하려고 하면 다음과 비슷한 오류 메시지가 표시됩니다.

    Access Denied: Table PROJECT:private_dataset.private_table: User does not have permission to query table PROJECT:private_dataset.private_table.

  2. Google Cloud 콘솔의 BigQuery 페이지에서 private_dataset 데이터 세트를 열고공유를 클릭한 다음 데이터 세트 승인을 선택합니다.

  3. 승인된 데이터 세트 창이 나타나면 데이터 세트 ID 필드에 있는 PROJECT.public_dataset로 들어가서 승인 추가를 클릭합니다.

    public_dataset 데이터 세트가 private_dataset 데이터 세트의 액세스 제어 목록(ACL)에 추가되어 public_dataset 데이터 세트의 뷰가 private_dataset 데이터 세트의 데이터를 쿼리하도록 승인합니다.

    이제 사용자가 private_dataset 데이터 세트의 데이터에 직접 액세스할 수 있는 권한 없이 private_dataset 데이터 세트에 간접적으로 액세스하는 public_dataset 데이터 세트의 private_table_filtered 뷰를 쿼리할 수 있습니다.

제한사항

  • 다른 리전에서 승인된 데이터 세트를 만들 수 있지만 BigQuery는 리전 간 쿼리를 지원하지 않습니다. 따라서 같은 리전에서 데이터 세트를 만드는 것이 좋습니다.

다음 단계

  • 데이터 세트의 데이터에 액세스하도록 개별 뷰를 승인하는 방법은 승인된 뷰를 참조하세요.

  • 데이터 세트 데이터에 액세스하도록 테이블 함수 또는 사용자 정의 함수를 승인하는 방법은 승인된 함수를 참조하세요.