BigQuery는 일반 대중이 쿼리할 수 있는 여러 공개 데이터 세트를 호스팅합니다. 이 튜토리얼에서는 여러 BigQuery 쿼리 작업을 동시에 실행하는 워크플로를 만들어 작업을 순차적으로 실행하는 경우와 비교하여 성능을 향상시킵니다.
목표
이 튜토리얼에서는 다음 단계를 진행합니다.- 위키백과 공개 데이터 세트에 대해 쿼리를 실행하여 특정 달에 가장 많이 조회된 제목을 확인합니다.
- 여러 BigQuery 쿼리 작업을 순차적으로 실행하는 워크플로를 배포하고 실행합니다.
- 병렬 반복을 사용하여 BigQuery 작업을 실행하고, 일반적인
for
루프가 병렬로 실행되는 워크플로를 배포하고 실행합니다.
Google Cloud 콘솔에서 또는 터미널이나 Cloud Shell에서 Google Cloud CLI를 사용하여 다음 명령어를 실행할 수 있습니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
시작하기 전에
조직에서 정의한 보안 제약조건으로 인해 다음 단계를 완료하지 못할 수 있습니다. 문제 해결 정보는 제한된 Google Cloud 환경에서 애플리케이션 개발을 참조하세요.
콘솔
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
-
Workflows API 사용 설정
-
서비스 계정을 만듭니다.
-
Google Cloud Console에서 서비스 계정 만들기 페이지로 이동합니다.
서비스 계정 만들기로 이동 - 프로젝트를 선택합니다.
-
서비스 계정 이름 필드에 이름을 입력합니다. Google Cloud 콘솔은 이 이름을 기반으로 서비스 계정 ID 필드를 채웁니다.
서비스 계정 설명 필드에 설명을 입력합니다. 예를 들면
Service account for quickstart
입니다. - 만들고 계속하기를 클릭합니다.
-
서비스 계정에 BigQuery > BigQuery Job User, Logging > Logs Writer 역할을 부여합니다.
역할을 부여하려면 역할 선택 목록을 찾은 후 역할을 선택합니다.
역할을 추가로 부여하려면
다른 역할 추가를 클릭하고 각 역할을 추가합니다. - 계속을 클릭합니다.
-
완료를 클릭하여 서비스 계정 만들기를 마칩니다.
-
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
-
Workflows API 사용 설정
-
서비스 계정을 만듭니다.
-
Google Cloud Console에서 서비스 계정 만들기 페이지로 이동합니다.
서비스 계정 만들기로 이동 - 프로젝트를 선택합니다.
-
서비스 계정 이름 필드에 이름을 입력합니다. Google Cloud 콘솔은 이 이름을 기반으로 서비스 계정 ID 필드를 채웁니다.
서비스 계정 설명 필드에 설명을 입력합니다. 예를 들면
Service account for quickstart
입니다. - 만들고 계속하기를 클릭합니다.
-
서비스 계정에 BigQuery > BigQuery Job User, Logging > Logs Writer 역할을 부여합니다.
역할을 부여하려면 역할 선택 목록을 찾은 후 역할을 선택합니다.
역할을 추가로 부여하려면
다른 역할 추가를 클릭하고 각 역할을 추가합니다. - 계속을 클릭합니다.
-
완료를 클릭하여 서비스 계정 만들기를 마칩니다.
-
gcloud
-
Google 계정에 로그인합니다.
아직 계정이 없으면 새 계정을 등록하세요.
- Google Cloud CLI를 설치합니다.
-
gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.
gcloud init
-
Google Cloud 프로젝트를 만들거나 선택합니다.
-
Google Cloud 프로젝트를 만듭니다.
gcloud projects create PROJECT_ID
PROJECT_ID
를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다. -
만든 Google Cloud 프로젝트를 선택합니다.
gcloud config set project PROJECT_ID
PROJECT_ID
를 Google Cloud 프로젝트 이름으로 바꿉니다.
-
-
Workflows API를 사용 설정합니다.
gcloud services enable workflows.googleapis.com
-
인증을 설정합니다.
-
서비스 계정을 만듭니다.
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAME
을 서비스 계정 이름으로 바꿉니다. -
서비스 계정에 역할을 부여합니다. 다음 IAM 역할마다
roles/bigquery.jobUser, roles/logging.logWriter
명령어를 1회 실행합니다.gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
다음을 바꿉니다.
SERVICE_ACCOUNT_NAME
: 서비스 계정의 이름입니다.PROJECT_ID
: 서비스 계정을 만든 프로젝트 ID입니다.ROLE
: 부여할 역할입니다.
-
- Google Cloud CLI를 설치합니다.
-
gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.
gcloud init
-
Google Cloud 프로젝트를 만들거나 선택합니다.
-
Google Cloud 프로젝트를 만듭니다.
gcloud projects create PROJECT_ID
PROJECT_ID
를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다. -
만든 Google Cloud 프로젝트를 선택합니다.
gcloud config set project PROJECT_ID
PROJECT_ID
를 Google Cloud 프로젝트 이름으로 바꿉니다.
-
-
Workflows API를 사용 설정합니다.
gcloud services enable workflows.googleapis.com
-
인증을 설정합니다.
-
서비스 계정을 만듭니다.
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAME
을 서비스 계정 이름으로 바꿉니다. -
서비스 계정에 역할을 부여합니다. 다음 IAM 역할마다
roles/bigquery.jobUser, roles/logging.logWriter
명령어를 1회 실행합니다.gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
다음을 바꿉니다.
SERVICE_ACCOUNT_NAME
: 서비스 계정의 이름입니다.PROJECT_ID
: 서비스 계정을 만든 프로젝트 ID입니다.ROLE
: 부여할 역할입니다.
-
BigQuery 쿼리 작업 실행
BigQuery에서는 대화형(주문형) 쿼리 작업을 실행할 수 있습니다. 자세한 내용은 대화형 및 일괄 쿼리 작업 실행을 참조하세요.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기 텍스트 영역에 다음 BigQuery SQL 쿼리를 입력합니다.
SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews.201207h` GROUP BY TITLE ORDER BY SUM(views) DESC LIMIT 100
실행을 클릭합니다.
bq
터미널에서 다음 bq query
명령어를 입력하여 표준 SQL 구문을 사용하여 대화형 쿼리를 실행합니다.
bq query \
--use_legacy_sql=false \
'SELECT
TITLE, SUM(views)
FROM
`bigquery-samples.wikipedia_pageviews.201207h`
GROUP BY
TITLE
ORDER BY
SUM(views) DESC
LIMIT 100'
그러면 특정 월에 가장 많은 조회수를 기록하는 상위 100개의 Wikipedia 제목을 반환하는 쿼리가 실행되고 출력이 임시 테이블에 기록됩니다.
쿼리를 실행하는 데 걸리는 시간을 확인합니다.
여러 쿼리를 순차적으로 실행하는 워크플로 배포
워크플로 정의는 Workflows 구문을 사용하여 기술되는 일련의 단계들로 구성됩니다. 워크플로를 만든 후 실행에 사용할 수 있도록 워크플로를 배포합니다. 또한 배포 단계 중 소스 파일을 실행할 수 있는지 확인합니다.
다음 워크플로는 Workflows BigQuery 커넥터를 사용하여 쿼리를 실행할 테이블 5개를 정의합니다. 쿼리는 순차적으로 실행되고 각 테이블에서 가장 많이 조회된 제목이 결과 맵에 저장됩니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
만들기를 클릭합니다.
새 워크플로의 이름을 입력합니다(예:
workflow-serial-bqjobs
).적절한 리전(예: us-central1)을 선택합니다.
이전에 생성한 서비스 계정을 선택합니다.
서비스 계정에 BigQuery> BigQuery 작업 사용자 및 Logging> 로그 작성자 IAM 역할이 둘 다 부여되어 있어야 합니다.
다음을 클릭합니다.
워크플로 편집기에서 다음 워크플로 정의를 입력합니다.
배포를 클릭합니다.
gcloud
터미널을 열고 워크플로의 소스 코드 파일을 만드세요.
touch workflow-serial-bqjobs.yaml
다음 워크플로를 소스 코드 파일에 복사합니다.
다음 명령어를 입력하여 워크플로를 배포합니다.
gcloud workflows deploy workflow-serial-bqjobs \ --source=workflow-serial-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.IAM.GSERVICEACCOUNT.COM
MY_SERVICE_ACCOUNT@MY_PROJECT.IAM.GSERVICEACCOUNT.COM
을 이전에 만든 서비스 계정의 이메일로 바꿉니다.서비스 계정에
roles/bigquery.jobUser
및roles/logging.logWriter
IAM 역할을 모두 부여한 상태여야 합니다.
워크플로 실행 및 여러 쿼리 순차적 실행
워크플로를 실행하면 워크플로와 연결된 현재 워크플로 정의가 실행됩니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
Workflows 페이지에서 workflow-serial-bqjobs 워크플로를 선택하여 세부정보 페이지로 이동합니다.
워크플로 세부정보 페이지에서 play_arrow 실행을 클릭합니다.
실행을 다시 클릭합니다.
출력 창에서 워크플로 결과를 확인합니다.
gcloud
터미널을 엽니다.
워크플로를 실행합니다.
gcloud workflows run workflow-serial-bqjob
워크플로 실행에는 이전 실행 시간의 약 1~5분이 소요됩니다. 결과에는 각 테이블이 포함되며 다음과 유사합니다.
{
"201201h": {
"title": "Special:Search",
"views": "14591339"
},
"201202h": {
"title": "Special:Search",
"views": "132765420"
},
"201203h": {
"title": "Special:Search",
"views": "123316818"
},
"201204h": {
"title": "Special:Search",
"views": "116830614"
},
"201205h": {
"title": "Special:Search",
"views": "131357063"
}
}
여러 쿼리를 동시에 실행하는 워크플로 배포 및 실행
5개의 쿼리를 순차적으로 실행하는 대신 몇 가지 항목을 변경하여 쿼리를 병렬로 실행할 수 있습니다.
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
parallel
단계를 사용하면for
루프의 각 반복을 동시에 실행할 수 있습니다.results
변수는 분기에서 쓸 수 있도록shared
로 선언되며 각 분기의 결과를 추가할 수 있습니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
만들기를 클릭합니다.
새 워크플로의 이름을 입력합니다(예:
workflow-parallel-bqjobs
).적절한 리전(예: us-central1)을 선택합니다.
이전에 생성한 서비스 계정을 선택합니다.
다음을 클릭합니다.
워크플로 편집기에서 다음 워크플로 정의를 입력합니다.
배포를 클릭합니다.
워크플로 세부정보 페이지에서 play_arrow 실행을 클릭합니다.
실행을 다시 클릭합니다.
출력 창에서 워크플로 결과를 확인합니다.
gcloud
터미널을 열고 워크플로의 소스 코드 파일을 만드세요.
touch workflow-parallel-bqjobs.yaml
다음 워크플로를 소스 코드 파일에 복사합니다.
다음 명령어를 입력하여 워크플로를 배포합니다.
gcloud workflows deploy workflow-parallell-bqjobs \ --source=workflow-parallel-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.IAM.GSERVICEACCOUNT.COM
MY_SERVICE_ACCOUNT@MY_PROJECT.IAM.GSERVICEACCOUNT.COM
을 이전에 만든 서비스 계정의 이메일로 바꿉니다.워크플로를 실행합니다.
gcloud workflows run workflow-serial-bqjob
결과는 이전 출력과 비슷하지만 워크플로 실행에는 약 20초 정도 걸립니다.
삭제
이 튜토리얼용으로 새 프로젝트를 만든 경우 이 프로젝트를 삭제합니다. 기존 프로젝트를 사용한 경우 이 튜토리얼에 추가된 변경사항은 제외하고 보존하려면 튜토리얼용으로 만든 리소스를 삭제합니다.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.
프로젝트를 삭제하려면 다음 안내를 따르세요.
- Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
- 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.
튜토리얼 리소스 삭제
이 튜토리얼에서 만든 워크플로를 삭제하세요.
gcloud workflows delete WORKFLOW_NAME
다음 단계
- 병렬 단계에 대한 자세한 내용은 병렬 단계 실행을 참조하세요.
- Workflows 커넥터에 대한 자세한 내용은 커넥터 이해를 참조하세요.
- Workflows에 대한 자세한 내용은 Workflows 개요를 참조하세요.