통합 쿼리 소개

이 페이지에서는 통합 쿼리를 사용하는 방법과 BigQuery에서 Spanner, AlloyDB, Cloud SQL 데이터를 쿼리하는 방법을 설명합니다.

통합 쿼리를 사용하면 쿼리 문을 AlloyDB, Spanner 또는 Cloud SQL 데이터베이스에 보내고 결과를 임시 테이블로 다시 가져올 수 있습니다. 통합 쿼리는 BigQuery Connection API를 사용하여 AlloyDB, Spanner 또는 Cloud SQL과의 연결을 설정합니다. 쿼리에서 EXTERNAL_QUERY 함수를 사용하여 쿼리 문을 외부 데이터베이스로 전송하며 이때 해당 데이터베이스의 SQL 언어를 사용합니다. 결과는 GoogleSQL 데이터 유형으로 변환됩니다.

지원되는 데이터 스토어

통합 쿼리는 다음 데이터 스토어와 함께 사용할 수 있습니다.

워크플로

  • 쿼리하려는 데이터 소스가 포함된 Google Cloud 프로젝트를 식별합니다.
  • bigquery.admin 사용자가 BigQuery에 연결 리소스를 만듭니다.
  • 관리자가 사용자 B에게 연결 리소스를 사용할 권한을 부여합니다.
    • 관리자와 사용자 B가 같은 사람인 경우 권한을 부여할 필요가 없습니다.
  • 사용자 B가 새 EXTERNAL_QUERY SQL 함수를 사용해 BigQuery에서 쿼리를 작성합니다.

통합 쿼리의 대안: 외부 테이블 및 데이터 세트

Bigtable, Spanner, Cloud Storage, Google Drive, Salesforce Data Cloud와 같은 운영 데이터베이스를 쿼리하는 또 다른 방법은 외부 테이블과 데이터 세트를 사용하는 것입니다. 외부 데이터 세트와 테이블을 사용하면 EXTERNAL_QUERY SQL 함수를 사용하지 않고도 테이블과 스키마를 보고 쿼리할 수 있습니다. 데이터를 BigQuery로 다시 가져올 필요가 없으며 SQL의 특정 SQL 데이터베이스 방언으로 작성하는 대신 BigQuery 문법을 사용할 수 있습니다.

지원되는 리전

통합 쿼리는 외부 데이터 소스와 BigQuery를 모두 지원하는 리전에서만 지원됩니다. 지원되는 위치 목록은 다음 섹션을 참조하세요.

다음 규칙에 따라 리전 간에 연결을 만들고 통합 쿼리를 실행할 수 있습니다.

단일 리전

BigQuery 단일 리전은 동일한 리전의 리소스만 쿼리할 수 있습니다.

예를 들어 us-east4에 데이터 세트가 있는 경우 us-east4에 있는 Cloud SQL 인스턴스, AlloyDB 인스턴스 또는 Spanner 데이터베이스를 쿼리할 수 있습니다. 쿼리 처리 위치는 BigQuery 단일 리전입니다.

멀티 리전

BigQuery 멀티 리전은 동일한 대규모 지역(미국, EU)의 모든 데이터 소스 리전을 쿼리할 수 있습니다. 멀티 리전 위치는 백업에만 사용되므로 Cloud SQL 인스턴스에 사용할 수 없습니다. BigQuery 멀티 리전은 같은 멀티 리전의 Spanner 인스턴스를 쿼리할 수도 있습니다.

  • BigQuery 미국 멀티 리전에서 실행되는 쿼리는 us-central1, us-east4 또는 us-west2와 같은 미국 지리적 지역에 있는 모든 단일 리전을 쿼리할 수 있습니다.

  • BigQuery EU 멀티 리전에서 실행되는 쿼리는 europe-north1 또는 europe-west3과 같은 유럽 연합의 회원국에 있는 단일 리전을 쿼리할 수 있습니다.

  • 쿼리가 실행되는 위치는 연결 리소스 위치와 동일해야 합니다. 예를 들어 미국 멀티 리전에서 실행되는 쿼리는 미국 멀티 리전에 있는 연결을 사용해야 합니다.

쿼리 성능은 데이터 세트와 외부 데이터 소스 간의 근접성에 따라 달라집니다. 예를 들어 미국 멀티 리전의 데이터 세트와 us-central1의 Cloud SQL 인스턴스 간의 통합 쿼리는 신속합니다. 그러나 US 멀티 리전과 us-east4의 Cloud SQL 인스턴스 간에 동일한 쿼리를 실행하면 성능이 저하될 수 있습니다.

쿼리 처리 위치는 멀티 리전 위치(US 또는 EU)입니다.

데이터 유형 매핑

통합 쿼리를 실행할 때 외부 데이터 소스의 데이터가 GoogleSQL 유형으로 변환됩니다. 자세한 내용은 Cloud SQL 통합 쿼리를 참조하세요.

할당량 및 한도

  • 리전 간 통합 쿼리. BigQuery 쿼리 처리 위치와 외부 데이터 소스 위치가 다르면 리전 간 쿼리입니다. 하루에 프로젝트당 리전 간 쿼리 1 TB를 실행할 수 있습니다. 다음은 리전 간 쿼리의 예시입니다.
    • Cloud SQL 인스턴스는 us-west1에 있지만 BigQuery 연결은 US 멀티 리전을 기반으로 합니다. BigQuery 쿼리 처리 위치는 US입니다.
  • 할당량. 사용자가 Cloud SQL 또는 AlloyDB와 같은 외부 데이터 소스에서 쿼리 할당량을 제어해야 합니다. 통합 쿼리에 대한 추가 할당량 설정은 없습니다. 워크로드 격리를 위해서는 데이터베이스 읽기 복제본만 쿼리하는 것이 좋습니다.
  • 허용되는 최대 청구 바이트 수. 이 필드는 통합 쿼리에 지원되지 않습니다. 통합 쿼리를 실제로 실행하기 전에는 청구되는 바이트 수를 계산할 수 없습니다.
  • 연결 수: 통합 쿼리에는 고유한 연결이 최대 10개까지 있을 수 있습니다.
  • Cloud SQL MySQLPostgreSQL. 할당량과 제한사항이 적용됩니다.

제한사항

통합 쿼리에는 다음과 같은 제한사항이 적용됩니다.

  • 성능 통합 쿼리는 BigQuery 스토리지만 쿼리하는 것만큼 빠르지 않을 수 있습니다. BigQuery는 소스 데이터베이스에서 외부 쿼리를 실행할 때까지 기다려야 하며 임시로 외부 데이터 소스에서 BigQuery로 데이터를 이동해야 합니다. 또한 소스 데이터베이스는 복잡한 분석 쿼리에 맞게 최적화되지 않을 수 있습니다.

    또한 쿼리 성능은 데이터 세트와 외부 데이터 소스 간의 근접성에 따라 달라집니다. 자세한 내용은 지원되는 리전을 참조하세요.

  • 통합 쿼리는 읽기 전용입니다. 소스 데이터베이스에서 실행되는 외부 쿼리는 읽기 전용이어야 합니다. 따라서 DML 또는 DDL 문은 지원되지 않습니다.

  • 지원되지 않는 데이터 유형 외부 쿼리에 BigQuery에서 지원되지 않는 데이터 유형이 포함되면 쿼리는 즉시 실패합니다. 지원되지 않는 데이터 유형을 지원되는 다른 지원되는 데이터 유형으로 변환할 수 있습니다.

  • Project 유형의 권한입니다. Cloud SQL 또는 AlloyDB 인스턴스와 동일한 프로젝트에서 연결 리소스를 만들어야 합니다.

가격 책정

  • 주문형 가격 책정 모델을 사용하는 경우 BigQuery에서 제휴 쿼리를 실행할 때 외부 쿼리에서 반환되는 바이트 수에 대해 요금이 부과됩니다. 자세한 내용은 주문형 분석 가격 책정을 참조하세요.

  • BigQuery 버전을 사용하는 경우 사용하는 슬롯 수를 기준으로 요금이 청구됩니다. 자세한 내용은 컴퓨팅 용량 가격 책정을 참조하세요.

SQL 푸시다운

통합 쿼리에는 SQL 푸시다운이라는 최적화 기법이 적용됩니다. 외부 데이터 소스로 필터링하는 등의 작업을 BigQuery에서 수행하는 대신 위임하여 쿼리 성능을 개선시켜 줍니다. 외부 데이터 소스에서 전송되는 데이터 양을 줄이면 쿼리 실행 시간이 줄어들고 비용이 절감됩니다. SQL 푸시다운에는 열 프루닝(SELECT 절) 및 필터 푸시다운(WHERE 절)이 포함됩니다.

EXTERNAL_QUERY 함수를 사용하면 원래 쿼리 다시 작성에 의해 SQL 푸시다운이 작동합니다. 다음 예시에서는 EXTERNAL_QUERY 함수를 사용하여 Cloud SQL 데이터베이스와 통신합니다.

SELECT COUNT(*)
FROM (
  SELECT * FROM EXTERNAL_QUERY("<connection>", "select * from operations_table")
  )
WHERE a = 'Y' AND b NOT IN ('COMPLETE','CANCELLED');

SQL 푸시다운을 사용하지 않으면 다음 쿼리가 Cloud SQL로 전송됩니다.

SELECT *
FROM operations_table

이 쿼리가 실행되면 일부 행과 열만 필요하더라도 전체 테이블이 BigQuery로 다시 전송됩니다.

SQL 푸시다운을 사용하면 다음 쿼리가 Cloud SQL로 전송됩니다.

SELECT `a`, `b`
FROM (
  SELECT * FROM operations_table) t
WHERE ((`a` = 'Y') AND (NOT `b` IN ('COMPLETE', 'CANCELLED'))

이 쿼리가 실행되면 열 2개 및 필터링 조건자와 일치하는 행만 BigQuery로 다시 전송됩니다.

Spanner 외부 데이터 세트로 통합 쿼리를 실행할 때도 SQL 푸시다운이 적용됩니다.

쿼리 계획에서 적용된 푸시다운(있는 경우)을 조사할 수 있습니다.

제한사항

SQL 푸시다운에는 외부 데이터 소스와 데이터 쿼리 방법에 따라 달라지는 다양한 제한사항이 있습니다.

EXTERNAL_QUERY 사용 시 쿼리 제휴에 대한 제한사항

  • SQL 푸시다운은 SELECT * FROM T 형식의 제휴 쿼리에만 적용됩니다.
  • 열 프루닝 및 필터 푸시다운만 지원됩니다. 특히 계산, 조인, 제한, 정렬 기준, 집계 푸시다운은 지원되지 않습니다.
  • 필터 푸시다운의 경우 리터럴이 BOOL, INT64, FLOAT64, STRING, DATE, DATETIME, TIMESTAMP 유형 중 하나여야 합니다. 구조체인 리터럴은 지원되지 않습니다.
  • SQL 함수 푸시다운은 BigQuery와 대상 데이터베이스에서 모두 지원되는 함수에만 적용됩니다.
  • SQL 푸시다운은 AlloyDB, Cloud SQL, Spanner에만 지원됩니다.
  • SAP Datasphere에는 SQL 푸시다운이 지원되지 않습니다.

Spanner 외부 데이터 세트를 사용할 때의 쿼리 제휴 제한사항

  • 열 프루닝, 필터, 계산, 부분 집계 푸시다운이 지원됩니다. 특히 조인, 제한, 집계별 정렬은 지원되지 않습니다.
  • 필터 푸시다운의 경우 리터럴이 BOOL, INT64, FLOAT64, STRING, DATE, DATETIME, TIMESTAMP, BYTE 또는 배열 유형 중 하나여야 합니다. 구조체인 리터럴은 지원되지 않습니다.
  • SQL 함수 푸시다운은 BigQuery와 Spanner에서 모두 지원되는 함수에만 적용됩니다.

데이터 소스별 지원 함수

다음은 데이터 소스별로 지원되는 SQL 함수입니다. SAP Datasphere에 지원되는 함수는 없습니다.

Cloud SQL MySQL

  • 논리 연산자: AND, OR, NOT
  • 비교 연산자: =, >, >=, <, <=, <>, IN, BETWEEN, IS NULL
  • 산술 연산자: +, -, *(INT64FLOAT64만 해당)

Cloud SQL PostgreSQL 및 AlloyDB

  • 논리 연산자: AND, OR, NOT
  • 비교 연산자: =, >, >=, <, <=, <>, IN, BETWEEN, IS NULL
  • 산술 연산자: +, -, *, /(INT64, FLOAT64, DATE 유형만 해당, DATE 뺄셈 제외)

Spanner - PostgreSQL 언어

  • 논리 연산자: AND, OR, NOT
  • 비교 연산자: =, >, >=, <, <=, <>, IN, BETWEEN, IS NULL
  • 산술 연산자: +, -, *, /(INT64, FLOAT64, NUMERIC만 해당)

Spanner - GoogleSQL 언어

  • 논리 연산자: AND, OR, NOT
  • 비교 연산자: =, >, >=, <, <=, <>, IN, BETWEEN, IS NULL
  • 산술 연산자: +, -, *, /(INT64, FLOAT64, NUMERIC만 해당)
  • 안전한 산술 연산자: SAFE_ADD, SAFE_SUBTRACT, SAFE_MULTIPLY, SAFE_DIVIDE(INT64, FLOAT64, NUMERIC만 해당)
  • 외부 데이터 세트를 사용할 때는 다음 사항도 추가로 적용됩니다.
    • 컴퓨팅 푸시다운
    • 부분 집계 푸시다운
    • 문자열 함수
    • 수학 함수,
    • Cast 함수
    • 배열 함수

다음 단계