BigQuery는 일반 대중이 쿼리할 수 있는 여러 공개 데이터 세트를 호스팅합니다. 이 튜토리얼에서는 여러 BigQuery 쿼리 작업을 동시에 실행하는 워크플로를 만들어 작업을 순차적으로 실행하는 경우와 비교하여 성능을 향상시킵니다.
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
워크플로 실행에 이전 실행 시간의 5배인 1분 정도가 걸립니다. 결과는 각 테이블을 포함하며 다음과 비슷합니다.
{
"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-parallel-bqjobs
결과는 이전 출력과 비슷하지만 워크플로 실행에 약 20초 미만밖에 걸리지 않습니다.