Google BigQuery
이 문서에서는 Azure Databricks에서 Google BigQuery 테이블을 읽고 쓰는 방법을 설명합니다.
Important
이 문서에서 설명한 구성은 실험적입니다. 실험적 기능은 있는 그대로 제공되며 Databricks에서 고객 기술 지원을 통해 지원하지 않습니다. 전체 쿼리 페더레이션 지원을 받으려면 Azure Databricks 사용자가 Unity 카탈로그 구문 및 데이터 거버넌스 도구를 활용하는 데 도움이 되는 Lakehouse Federation을 대신 사용해야 합니다.
키 기반 인증을 사용하여 BigQuery에 연결해야 합니다.
사용 권한
프로젝트에 BigQuery를 사용하여 읽고 쓸 수 있는 특정 Google 권한이 있어야 합니다.
참고 항목
이 문서에서는 BigQuery 구체화된 뷰를 설명합니다. 자세한 내용은 Google 문서 구체화된 뷰 소개를 참조하세요. 다른 BigQuery 용어 및 BigQuery 보안 모델을 알아보려면 Google BigQuery 설명서를 참조하세요.
BigQuery를 사용하여 데이터를 읽고 쓰는 방법은 다음 두 가지 Google Cloud 프로젝트에 따라 달라집니다.
- 프로젝트(
project
): Azure Databricks가 BigQuery 테이블을 읽거나 쓰는 Google Cloud 프로젝트의 ID입니다. - 부모 프로젝트(
parentProject
): 읽기 및 쓰기에 대해 청구할 Google Cloud 프로젝트 ID인 부모 프로젝트의 ID입니다. 키를 생성할 Google 서비스 계정과 연결된 Google Cloud 프로젝트로 설정합니다.
BigQuery에 액세스하는 코드의 project
값과 parentProject
값을 명시적으로 제공해야 합니다. 다음과 유사한 코드를 사용합니다.
spark.read.format("bigquery") \
.option("table", table) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.load()
Google Cloud 프로젝트에 필요한 권한은 project
및 parentProject
가 동일한지 여부에 따라 달라집니다. 다음 섹션에서는 각 시나리오에 필요한 권한을 나열합니다.
project
및 parentProject
가 일치하는 경우에 필요한 권한
project
및 parentProject
의 ID가 동일한 경우 다음 표를 사용하여 최소 권한을 확인합니다.
Azure Databricks 작업 | 프로젝트에 필요한 Google 권한 |
---|---|
구체화된 뷰를 사용하지 않고 BigQuery 테이블 읽기 | project 프로젝트의 경우:- BigQuery 읽기 세션 사용자 - BigQuery 데이터 뷰어(프로젝트 수준 대신 데이터 세트/테이블 수준에서 선택적으로 부여) |
구체화된 뷰를 사용하여 BigQuery 테이블 읽기 | project 프로젝트의 경우:- BigQuery 작업 사용자 - BigQuery 읽기 세션 사용자 - BigQuery 데이터 뷰어(프로젝트 수준 대신 데이터 세트/테이블 수준에서 선택적으로 부여) 구체화 프로젝트의 경우: - BigQuery 데이터 편집기 |
BigQuery 테이블 작성 | project 프로젝트의 경우:- BigQuery 작업 사용자 - BigQuery 데이터 편집기 |
project
및 parentProject
가 다른 경우에 필요한 권한
project
및 parentProject
의 ID가 다른 경우 다음 표를 사용하여 최소 권한을 확인합니다.
Azure Databricks 작업 | Google 권한 필요 |
---|---|
구체화된 뷰를 사용하지 않고 BigQuery 테이블 읽기 | parentProject 프로젝트의 경우:- BigQuery 읽기 세션 사용자 project 프로젝트의 경우:- BigQuery 데이터 뷰어(프로젝트 수준 대신 데이터 세트/테이블 수준에서 선택적으로 부여) |
구체화된 뷰를 사용하여 BigQuery 테이블 읽기 | parentProject 프로젝트의 경우:- BigQuery 읽기 세션 사용자 - BigQuery 작업 사용자 project 프로젝트의 경우:- BigQuery 데이터 뷰어(프로젝트 수준 대신 데이터 세트/테이블 수준에서 선택적으로 부여) 구체화 프로젝트의 경우: - BigQuery 데이터 편집기 |
BigQuery 테이블 작성 | parentProject 프로젝트의 경우:- BigQuery 작업 사용자 project 프로젝트의 경우:- BigQuery 데이터 편집기 |
1단계: Google Cloud 설정
BigQuery Storage API 사용
BigQuery Storage API는 BigQuery가 사용하도록 설정된 새 Google Cloud 프로젝트에서 기본적으로 사용하도록 설정됩니다. 그러나 기존 프로젝트가 있고 BigQuery Storage API가 사용하도록 설정되지 않은 경우 이 섹션의 단계에 따라 사용하도록 설정합니다.
Google Cloud CLI 또는 Google Cloud Console을 사용하여 BigQuery Storage API를 사용하도록 설정할 수 있습니다.
Google Cloud CLI를 사용하여 BigQuery Storage API 사용
gcloud services enable bigquerystorage.googleapis.com
Google Cloud Console을 사용하여 BigQuery Storage API 사용
왼쪽 탐색 창에서 API 및 서비스를 클릭합니다.
API 및 서비스 사용 단추를 클릭합니다.
검색 창에
bigquery storage api
를 입력하고 첫 번째 결과를 선택합니다.BigQuery Storage API가 사용하도록 설정되어 있는지 확인합니다.
Azure Databricks에 대한 Google 서비스 계정 만들기
Azure Databricks 클러스터에 대한 서비스 계정을 만듭니다. Databricks의 권장 사항에 따라 이 서비스 계정에 해당 작업을 수행하는 데 필요한 최소한의 권한을 부여하는 것이 좋습니다. BigQuery 역할 및 권한을 참조하세요.
Google Cloud CLI 또는 Google Cloud Console을 사용하여 서비스 계정을 만들 수 있습니다.
Google Cloud CLI를 사용하여 Google 서비스 계정 만들기
gcloud iam service-accounts create <service-account-name>
gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.user \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.dataEditor \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"
서비스 계정에 대한 키를 만듭니다.
gcloud iam service-accounts keys create --iam-account \
"<service-account-name>@<project-name>.iam.gserviceaccount.com" \
<project-name>-xxxxxxxxxxx.json
Google Cloud Console을 사용하여 Google 서비스 계정 만들기
계정을 만들려면 다음을 수행합니다.
왼쪽 탐색 창에서 IAM 및 관리자를 클릭합니다.
서비스 계정을 클릭합니다.
+ 서비스 계정 만들기를 클릭합니다.
서비스 계정 이름 및 설명을 입력합니다.
만들기를 클릭합니다.
서비스 계정에 대한 역할을 지정합니다. 역할 선택 드롭다운에서
BigQuery
를 입력하고 다음 역할을 추가합니다.계속을 클릭합니다.
완료를 클릭합니다.
서비스 계정에 대한 키를 만들려면 다음을 수행합니다.
서비스 계정 목록에서 새로 만든 계정을 클릭합니다.
키 섹션에서 키 추가 > 새 키 만들기 단추를 선택합니다.
JSON 키 형식을 수락합니다.
만들기를 클릭합니다. JSON 키 파일이 컴퓨터에 다운로드됩니다.
Important
서비스 계정에 대해 생성하는 JSON 키 파일은 Google Cloud 계정의 데이터 세트 및 리소스에 대한 액세스를 제어하므로 승인된 사용자와만 공유해야 하는 프라이빗 키입니다.
임시 스토리지를 위한 GCS(Google Cloud Storage) 버킷 만들기
BigQuery에 데이터를 쓰려면 데이터 원본이 GCS 버킷에 액세스해야 합니다.
왼쪽 탐색 창에서 스토리지를 클릭합니다.
버킷 만들기를 클릭합니다.
버킷 세부 정보를 구성합니다.
만들기를 클릭합니다.
권한 탭 및 구성원 추가를 클릭합니다.
버킷의 서비스 계정에 다음 권한을 제공합니다.
저장을 클릭합니다.
2단계: Azure Databricks 설정
BigQuery 테이블에 액세스하도록 클러스터를 구성하려면 JSON 키 파일을 Spark 구성으로 제공해야 합니다. 로컬 도구를 사용하여 JSON 키 파일을 Base64로 인코딩합니다. 보안을 위해 키에 액세스할 수 있는 웹 기반 또는 원격 도구를 사용하지 마세요.
클러스터를 구성할 때:
Spark 구성 탭에서 다음 Spark 구성을 추가합니다. <base64-keys>
를 Base64로 인코딩된 JSON 키 파일 문자열로 바꿉니다. 대괄호 안에 있는 다른 항목(예: <client-email>
)을 JSON 키 파일의 해당 필드 값으로 바꿉니다.
credentials <base64-keys>
spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.fs.gs.auth.service.account.email <client-email>
spark.hadoop.fs.gs.project.id <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key <private-key>
spark.hadoop.fs.gs.auth.service.account.private.key.id <private-key-id>
BigQuery 테이블 읽기 및 쓰기
BigQuery 테이블을 읽으려면 다음을 지정합니다.
df = spark.read.format("bigquery") \
.option("table",<table-name>) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.load()
BigQuery 테이블에 쓰려면 다음을 지정합니다.
df.write.format("bigquery") \
.mode("<mode>") \
.option("temporaryGcsBucket", "<bucket-name>") \
.option("table", <table-name>) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.save()
여기서 <bucket-name>
은 임시 스토리지에 대한 GCS(Google Cloud Storage) 버킷 만들기에서 만든 버킷의 이름입니다. <project-id>
및 <parent-id>
값의 요구 사항에 대한 자세한 내용은 사용 권한을 참조하세요.
BigQuery에서 외부 테이블 만들기
Important
이 기능은 Unity Catalog에서 지원되지 않습니다.
Databricks에서 BigQuery에서 직접 데이터를 읽는 관리되지 않는 테이블을 선언할 수 있습니다.
CREATE TABLE chosen_dataset.test_table
USING bigquery
OPTIONS (
parentProject 'gcp-parent-project-id',
project 'gcp-project-id',
temporaryGcsBucket 'some-gcp-bucket',
materializationDataset 'some-bigquery-dataset',
table 'some-bigquery-dataset.table-to-copy'
)
Python Notebook 예제: DataFrame에 Google BigQuery 테이블 로드
다음 Python Notebook은 Google BigQuery 테이블을 Azure Databricks DataFrame에 로드합니다.
Google BigQuery Python 샘플 Notebook
Scala Notebook 예제: DataFrame에 Google BigQuery 테이블 로드
다음 Scala Notebook은 Google BigQuery 테이블을 Azure Databricks DataFrame에 로드합니다.