전 세계 검색
전역 쿼리를 사용하면 둘 이상의 리전에 저장된 데이터를 참조하는 SQL 쿼리를 실행할 수 있습니다.
예를 들어 us-central1에 있는 테이블을 europe-central2에 있는 테이블과 조인하는 전역 쿼리를 실행할 수 있습니다. 이 문서에서는 프로젝트에서 전역 쿼리를 사용 설정하고 실행하는 방법을 설명합니다.
시작하기 전에
프로젝트에 전역 쿼리가 사용 설정되어 있는지 확인하고 전역 쿼리를 실행하는 데 필요한 권한이 있는지 확인합니다.
전역 쿼리 사용 설정
프로젝트 또는 조직의 전역 쿼리를 사용 설정하려면 ALTER PROJECT SET OPTIONS 문 또는 ALTER ORGANIZATION SET OPTIONS 문을 사용하여 기본 구성을 변경합니다.
- 리전에서 전역 쿼리를 실행하려면 쿼리가 실행되는 프로젝트의 해당 리전에서
enable_global_queries_execution인수를true로 설정합니다. - 전역 쿼리가 리전에서 데이터를 복사하도록 허용하려면 데이터가 저장된 프로젝트의 해당 리전에서
enable_global_queries_data_access인수를true로 설정합니다. - 전역 쿼리는 한 프로젝트에서 실행되고 다른 프로젝트의 다른 리전에서 데이터를 가져올 수 있습니다.
다음 예시에서는 프로젝트 수준에서 이러한 설정을 수정하는 방법을 보여줍니다. 프로젝트 PROJECT_1_ID의 리전 REGION_1에서 전역 쿼리를 실행하고 프로젝트 PROJECT_2_ID의 REGION_2에서 데이터를 가져오려고 한다고 가정해 보겠습니다.
ALTER PROJECT `PROJECT_1_ID` SET OPTIONS ( `region-REGION_1.enable_global_queries_execution` = true ); ALTER PROJECT `PROJECT_2_ID` SET OPTIONS ( `region-REGION_2.enable_global_queries_data_access` = true );
다음을 바꿉니다.
PROJECT_1_ID: 전역 쿼리가 실행될 프로젝트의 이름REGION_1: 전역 쿼리가 실행될 리전PROJECT_2_ID: 전역 쿼리가 데이터를 가져올 프로젝트의 이름REGION_2: 전역 쿼리가 데이터를 가져올 리전
변경사항이 적용되는 데 몇 분 정도 걸릴 수 있습니다.
필요한 권한
전역 쿼리를 실행하려면 bigquery.jobs.createGlobalQuery 권한이 있어야 합니다.
BigQuery 관리자 역할은 이 권한이 포함된 유일한 사전 정의된 역할입니다. BigQuery 관리자 역할을 부여하지 않고 전역 쿼리를 실행할 권한을 부여하려면 다음 단계를 따르세요.
- 맞춤 역할(예: 'BigQuery 전역 쿼리 실행자')을 만듭니다.
- 이 역할에
bigquery.jobs.createGlobalQuery을 추가합니다. - 선택한 사용자 또는 서비스 계정에 이 역할을 할당합니다.
데이터 쿼리
전역 쿼리를 실행하려면 데이터가 단일 위치에 있는 것처럼 SQL 쿼리를 작성합니다. 쿼리에서 참조하는 데이터가 두 개 이상의 위치에 저장되어 있으면 BigQuery에서 전역 쿼리를 실행하려고 시도합니다. 경우에 따라 BigQuery가 쿼리의 위치를 자동으로 선택합니다. 그렇지 않으면 쿼리를 실행할 위치를 지정해야 합니다. 선택한 위치에 없는 쿼리에서 참조하는 데이터는 해당 위치로 복사됩니다.
다음 예는 서로 다른 두 위치에 저장된 두 데이터 세트의 테이블을 결합하는 전역 쿼리로 실행됩니다.
SELECT id, tr_date, product_id, price FROM us_dataset.transactions
UNION ALL
SELECT id, tr_date, product_id, price FROM europe_dataset.transactions
자동 위치 선택
다음과 같은 경우 쿼리를 실행해야 하는 위치가 자동으로 결정되며 변경할 수 없습니다.
- 데이터 수정 언어 쿼리 (
INSERT,UPDATE,DELETE문)는 항상 타겟 테이블의 위치에서 실행됩니다. CREATE TABLE AS SELECT문과 같은 데이터 정의 언어 쿼리는 항상 리소스가 생성되거나 수정된 위치에서 실행됩니다.- 지정된 대상 테이블이 있는 쿼리는 항상 대상 테이블이 있는 위치에서 실행됩니다.
위치 선택
일반적으로 전역 쿼리가 실행되는 위치는 사용자가 결정합니다. 이 결정을 내리려면 다음을 고려하세요.
전역 쿼리는 한 위치에서 다른 위치로 데이터를 일시적으로 복사합니다. 조직에 데이터 상주 요구사항이 있고 위치 A의 데이터가 위치 A를 벗어나지 않도록 하려면 쿼리 위치를 A로 설정하세요.
위치 간에 전송되는 데이터 양을 최소화하고 쿼리 비용을 줄이려면 쿼리되는 데이터가 가장 많이 저장된 리전에서 쿼리를 실행하세요.
온라인 상점이 있고 us-central1 위치에 제품 목록을 보관하지만 us-south1 지역에서 거래가 이루어진다고 가정해 보겠습니다. 카탈로그의 제품보다 거래가 많은 경우 us-south1 지역에서 쿼리를 실행해야 합니다.
전체 쿼리 이해하기
효율적이고 비용 효율적인 방식으로 전역 쿼리를 실행하려면 실행 메커니즘을 이해하는 것이 중요합니다.
다른 위치에 있는 데이터를 사용하려면 한 위치로 복제해야 합니다. 다음은 BigQuery에서 실행하는 전역 쿼리 워크플로의 추상화입니다.
- 사용자 선언 또는 자동으로 쿼리를 실행해야 하는 위치를 결정합니다. 이 위치를 기본 위치라고 하며 쿼리에서 참조하는 다른 모든 위치는 원격 위치입니다.
- 각 원격 지역에서 하위 쿼리를 실행하여 기본 지역에서 쿼리를 완료하는 데 필요한 데이터를 수집합니다.
- 원격 위치에서 기본 위치로 이 데이터를 복사합니다.
- 기본 위치의 임시 테이블에 데이터를 8시간 동안 저장합니다.
- 기본 위치에서 수집된 모든 데이터로 최종 쿼리를 실행합니다.
- 쿼리 결과를 반환합니다.
BigQuery는 리전 간에 전송되는 데이터 양을 최소화하려고 합니다. 다음 예시를 참조하세요.
SET @@location = 'EU';
SELECT
t1.col1, t2.col2
FROM
eu_dataset.table1 t1
JOIN us_dataset.table2 t2 using col3
WHERE
t2.col4 = 'ABC'
BigQuery는 미국에서 EU로 테이블 t2를 모두 복제할 필요가 없습니다.
요청된 열 (col2 및 col3)과 WHERE 조건 (t2.col4 = 'ABC')과 일치하는 행만 전송하면 됩니다. 하지만 푸시다운이라고 하는 이러한 메커니즘은 쿼리 구조에 따라 다르며 전송되는 데이터 양이 많을 수도 있습니다.
데이터의 작은 하위 집합에서 전역 쿼리를 테스트하고 데이터가 필요한 경우에만 전송되는지 확인하는 것이 좋습니다.
관측 가능성
원격 리전으로 전송된 쿼리 텍스트를 확인하려면 작업 기록을 확인하세요. 원격 작업의 작업 ID는 원래 쿼리와 동일하며 _xregion 서픽스가 추가됩니다.
전역 쿼리 사용 중지
프로젝트 또는 조직의 전역 쿼리를 사용 중지하려면 ALTER PROJECT SET OPTIONS statement 또는 ALTER ORGANIZATION SET OPTIONS statement을 사용하여 기본 구성을 변경합니다.
- 리전에서 전역 쿼리를 사용 중지하려면 해당 리전에서
enable_global_queries_execution인수를false또는NULL로 설정합니다. - 전역 쿼리가 리전에서 데이터를 복사하지 못하도록 하려면 해당 리전에서
enable_global_queries_data_access인수를false또는NULL로 설정합니다.
다음 예시에서는 프로젝트 수준에서 전역 쿼리를 사용 중지하는 방법을 보여줍니다.
ALTER PROJECTPROJECT_IDSET OPTIONS ( `region-REGION.enable_global_queries_execution` = false, `region-REGION.enable_global_queries_data_access` = false );
다음을 바꿉니다.
PROJECT_ID: 변경할 프로젝트의 이름REGION: 전역 쿼리를 사용 중지할 리전의 이름
변경사항이 적용되는 데 몇 분 정도 걸릴 수 있습니다.
가격 책정
전역 쿼리 비용은 다음 구성요소로 구성됩니다.
- 원격 위치에 있는 모든 하위 쿼리의 컴퓨팅 비용(해당 위치의 가격 책정 모델 기준)
- 실행되는 리전의 최종 쿼리 컴퓨팅 비용입니다. 해당 리전의 가격 책정 모델을 기반으로 합니다.
- 데이터 복제 가격 책정에 따른 서로 다른 위치 간 데이터 복사 비용
- 스토리지 가격 책정에 따라 원격 지역에서 기본 지역으로 복사된 데이터를 저장하는 비용 (8시간)
할당량
전역 쿼리와 관련된 할당량에 대한 자세한 내용은 쿼리 작업을 참고하세요.
제한사항
- 쿼리의 실행 세부정보 및 실행 그래프에 원격 위치에서 처리되고 전송된 바이트 수가 표시되지 않습니다. 이 정보는 작업 기록에서 확인할 수 있는 복사 작업에 표시됩니다. 전역 쿼리로 생성된 복사 작업의 작업 ID에는 쿼리 작업의 작업 ID가 접두사로 사용됩니다.
- 샌드박스 모드에서는 전역 쿼리가 지원되지 않습니다.
- 글로벌 쿼리는 리전 간에 데이터를 전송하는 데 필요한 시간으로 인해 단일 리전 쿼리보다 지연 시간이 더 깁니다.
- 전역 쿼리는 리전 간 데이터 전송을 방지하기 위해 캐시를 사용하지 않습니다.
- 전역 쿼리로는
_PARTITIONTIME와 같은 유사 열을 쿼리할 수 없습니다. - 전역 쿼리를 사용하여 유연한 열 이름으로 열을 쿼리할 수 없습니다.
WHERE절에서 BigLake 테이블 열을 참조할 때는RANGE또는INTERVAL리터럴을 사용할 수 없습니다.- 전역 승인된 뷰 및 승인된 루틴은 지원되지 않습니다 (한 위치의 뷰 또는 루틴이 다른 위치의 데이터 세트에 액세스하도록 승인된 경우).
- 글로벌 쿼리에 대한 구체화된 뷰는 지원되지 않습니다.
- 전역 쿼리가
STRUCT열을 참조하는 경우 원격 하위 쿼리에는 푸시다운이 적용되지 않습니다. 성능을 최적화하려면 원격 리전에STRUCT열을 필터링하고 필요한 필드만 개별 열로 반환하는 뷰를 만드는 것이 좋습니다. - 전역 쿼리는 원자적으로 실행되지 않습니다. 데이터 복제는 성공했지만 전체 쿼리가 실패한 경우에도 데이터 복제에 대한 요금이 청구됩니다.
- 전역 쿼리 실행의 일부로 원격 리전에 생성된 임시 테이블은 전역 쿼리 결과를 암호화하도록 구성된 CMEK 키 (테이블, 데이터 세트 또는 프로젝트 수준)가 전역인 경우에만 고객 관리 암호화 키(CMEK)를 사용하여 암호화됩니다. 원격 임시 테이블이 항상 CMEK를 사용하여 보호되도록 하려면 원격 리전에서 전역 쿼리를 실행하는 프로젝트의 기본 KMS 키를 설정하세요.
- Assured Workloads에서는 전역 쿼리가 지원되지 않습니다.
- 전역 쿼리에서 리전당 최대 10개의 테이블을 쿼리할 수 있습니다.