Cloud SQL 통합 쿼리

이 페이지에서는 통합 쿼리를 사용하여 BigQuery 및 Cloud SQL의 데이터를 쿼리하는 방법을 설명합니다.

개요

데이터는 많은 위치에 흩어져 있는 경우가 많습니다. 고객 테이블은 BigQuery에, 판매 테이블은 Cloud SQL에 저장되어 있는 상황에서 하나의 쿼리로 두 테이블을 조인하려는 경우가 있습니다.

BigQuery Cloud SQL 통합을 사용하면 BigQuery에서 Cloud SQL에 위치한 데이터를 실시간으로, 데이터 복사나 이동 없이 쿼리할 수 있습니다. Cloud SQL의 MySQL(2세대)과 PostgreSQL 인스턴스를 모두 지원합니다.

처음 1회 설정 이후 새로운 SQL 함수 EXTERNAL_QUERY()를 사용하여 쿼리를 작성할 수 있습니다.

워크플로

통합 쿼리 구문

통합 쿼리에는 새 함수인 EXTERNAL_QUERY가 사용됩니다.

구문

SELECT * FROM EXTERNAL_QUERY(connection_id, external_database_query);
  • connection_id(문자열): 웹 UI, CLI, API에서 생성하는 데이터베이스 연결 리소스의 이름입니다.

    연결 ID 예시 bigquery-federation-test.us.test-mysql

  • external_database_query(문자열): 외부 데이터베이스 SQL 언어(MySQL 또는 PostgreSQL)의 읽기 전용 쿼리입니다. 쿼리는 Cloud SQL의 외부 데이터베이스에서 실행됩니다.

설명

EXTERNAL_QUERY는 Cloud SQL에서 쿼리를 실행하고 결과를 임시 테이블로 반환합니다. 임시 결과 테이블에서 소스 데이터베이스(MySQL 또는 PostgreSQL) 데이터 유형은 다음 데이터 유형 매핑에 따라 BigQuery 데이터 유형으로 변환됩니다. EXTERNAL_QUERY 함수는 일반적으로 FROM 절에 사용됩니다. 이 함수는 BigQuery 표준 SQL에서만 사용할 수 있습니다.

반환 유형

BigQuery 테이블

쿼리 예시

개요에서 설명한 보고서에 포함하기 위해 각 고객의 첫 주문 날짜가 필요하다고 가정해 보겠습니다. 데이터는 현재 BigQuery에 없지만 Cloud SQL에서 운영 PostgreSQL 데이터베이스에 있습니다. 다음 통합 쿼리 예시를 사용해 이를 수행할 수 있습니다.

SELECT c.customer_id, c.name, SUM(t.amount) AS total_revenue,
rq.first_order_date
FROM customers AS c
INNER JOIN transaction_fact AS t ON c.customer_id = t.customer_id
LEFT OUTER JOIN EXTERNAL_QUERY(
  'connection_id',
  '''SELECT customer_id, MIN(order_date) AS first_order_date
  FROM orders
  GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;

예시 쿼리는 다음의 3개 부분으로 구성됩니다.

  1. 운영 PostgreSQL 데이터베이스에서 외부 쿼리 SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id를 실행하여 EXTERNAL_QUERY() 함수를 통해 각 고객의 첫 주문 날짜를 구합니다.
  2. customer_id를 기준으로 BigQuery에서 외부 쿼리 결과 테이블을 고객 테이블과 조인합니다.
  3. 고객 정보와 첫 주문 날짜를 선택합니다.

순서는 유지되지 않음

EXTERNAL_QUERY()는 외부 쿼리에 ORDER BY가 포함된 경우에도 외부 쿼리 결과의 순서를 무시합니다. 다음 예시 쿼리는 Cloud SQL의 고객 ID별로 행을 정렬하지만 BigQuery는 이 순서대로 결과 행을 출력하지 않습니다.

SELECT * EXTERNAL_QUERY(
'connection_id',
'''SELECT * FROM customers AS c ORDER BY c.customer_id'');

시작하기 전에

BigQuery 연결 서비스 사용 설정

  • API 라이브러리에서 BigQuery 연결 API 페이지를 엽니다.
  • 드롭다운 메뉴에서 Cloud SQL 인스턴스가 포함된 프로젝트를 선택합니다.
  • 사용 버튼을 클릭합니다.

서비스 계정

BigQuery는 서비스 계정을 사용하여 Cloud SQL 인스턴스에 연결합니다. BigQuery 연결 API를 사용 설정하면 Google Cloud 관리 Cloud IAM 서비스 계정이 자동으로 생성됩니다. 서비스 계정에는 다음과 같은 역할이 있습니다.

역할 설명
cloudsql.client Cloud SQL 인스턴스에 연결
logging.logWriter 클라우드 로깅에 쓰기
metrics.metricWriter 클라우드 모니터링에 쓰기

권한

  • 연결 리소스를 만들고 유지하려면 사용자에게 bigquery.admin 사전 정의된 IAM 역할이 있어야 합니다.

  • bigquery.admin 역할에는 다음 BigQuery 연결 서비스 권한이 포함됩니다.

    • bigquery.connections.create
    • bigquery.connections.get
    • bigquery.connections.list
    • bigquery.connections.update
    • bigquery.connections.use
    • bigquery.connections.delete

다른 사용자에게 권한을 부여하여 Cloud SQL 쿼리에 연결 리소스를 사용할 수 있도록 하려면 다른 사용자에게 권한 부여를 참조하세요.

bigquery.admin 액세스 권한 부여

bigquery.admin 역할 부여:

Console

  1. Cloud Console에서 Cloud IAM 페이지를 엽니다.

    IAM 페이지 열기

  2. 프로젝트 선택을 클릭합니다.

  3. 프로젝트를 선택하고 열기를 클릭합니다.

  4. 추가를 클릭해 프로젝트에 새 구성원을 추가하고 권한을 설정합니다.

  5. 구성원 추가 대화상자에서

    • 구성원에 사용자나 그룹의 이메일 주소를 입력합니다.
    • 역할 선택 드롭다운에서 BigQuery > BigQuery 관리자를 클릭합니다.
    • 추가를 클릭합니다.

      관리자 권한 부여

CLI

gcloud 명령줄 도구를 이용해 사용자나 그룹에 bigquery.admin 역할을 부여할 수 있습니다.

프로젝트의 Cloud IAM 정책에 단일 바인딩을 추가하려면 다음 명령어를 입력하세요. 사용자를 추가하려면 --member 플래그를 user:user@example.com 형식으로 지정합니다. 그룹을 추가하려면 --member 플래그를 group:group@example.com 형식으로 지정합니다.

gcloud projects add-iam-policy-binding project_id \
--member group/user:address \
--role roles/bigquery.admin

각 항목의 의미는 다음과 같습니다.

  • project_id는 프로젝트 ID입니다.
  • group/usergroup 또는 user입니다.
  • address는 사용자 또는 그룹의 이메일 주소입니다.

예를 들면 다음과 같습니다.

gcloud projects add-iam-policy-binding myproject \
--member group:group@example.com \
--role roles/bigquery.admin

명령을 실행하면 업데이트된 정책이 출력됩니다.

    bindings:
    - members:
      - group:group@example.com
        role: roles/bigquery.admin
    

BigQuery의 Cloud IAM 역할에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

공개 IP

BigQuery Cloud SQL 통합은 공개 IP 연결이 있는 Cloud SQL 인스턴스만 지원합니다. Cloud SQL 인스턴스의 공개 IP 연결을 구성하세요.

Cloud SQL 데이터베이스 연결 설정

통합 쿼리에서 데이터베이스 사용자 인증 정보를 평문으로 작성하는 경우를 방지하기 위해 먼저 BigQuery의 데이터베이스별로 데이터베이스 연결 리소스를 만든 다음 통합 쿼리에서 이 연결 리소스를 참조해야 합니다.

연결 리소스에는 IAM 권한 모음이 있으며 이러한 권한 모음을 다른 사용자에게 부여할 수 있습니다. 연결 리소스는 암호화되어 BigQuery 연결 서비스에 안전하게 저장되며 통합 쿼리에만 사용할 수 있습니다.

BigQuery의 Cloud IAM 역할 및 권한에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

연결 리소스 만들기

Console

  1. 연결 리소스를 만들려면 Cloud Console에서 BigQuery 웹 UI로 이동합니다.

    Cloud Console로 이동

  2. +데이터 추가 아래에서 메뉴의 연결 만들기를 선택합니다.

    연결 리소스 만들기

  3. 연결 만들기 창에서 다음을 수행합니다.

    • 연결 유형으로 MySQL 또는 Postgres를 선택합니다.
    • 연결 ID에는 연결 리소스의 식별자를 입력합니다. 문자, 숫자, 밑줄을 사용할 수 있습니다.
    • 연결 위치에서 Cloud SQL 인스턴스 위치를 선택합니다. 단, 예외적으로 us-central1 리전의 Cloud SQL 인스턴스인 경우 US 위치를 선택하고 europe-west1 리전의 경우 EU 위치를 선택합니다.
    • (선택사항): 별칭에 사용자 친화적인 연결 이름(예: My connection resource)을 입력합니다. 별칭에는 나중에 필요한 경우 연결 리소스를 손쉽게 식별할 수 있는 아무 값이나 사용할 수 있습니다.
    • (선택사항): 설명에 이 연결 리소스에 대한 설명을 입력합니다.
    • Cloud SQL 인스턴스 IDCloud SQL 인스턴스의 전체 이름을 입력합니다. 일반적으로 project-id:location-id:instance-id 형식입니다. 쿼리하려는 Cloud SQL 인스턴스의 세부정보 페이지에서 인스턴스 ID를 찾을 수 있습니다.
    • 데이터베이스 이름에 데이터베이스의 이름을 입력합니다.
    • 사용자 이름에 데이터베이스의 사용자 이름을 입력합니다.
    • 비밀번호에 데이터베이스의 비밀번호를 입력합니다.

      • (선택사항) 비밀번호를 보려면 비밀번호 표시를 선택합니다.

      새 연결 리소스

  4. 연결 만들기를 클릭합니다.

명령줄

bq mk 명령어를 입력하고 연결 플래그 --connection을 지정합니다. 다음 플래그도 필요합니다.

  • --connection_type
  • --properties
  • --connection_credential
  • --project_id
  • --location
  • (연결의 이름)

    bq mk --connection --connection_type='CLOUD_SQL' --properties=[PROPERTIES] --connection_credential=[CREDENTIALS] --project_id=[PROJECT_ID] --location=[LOCATION] new_connection
    

각 항목의 의미는 다음과 같습니다.

  • --connection_type은 항상 CLOUD_SQL입니다.
  • --properties에는 생성된 연결의 매개변수가 JSON 형식으로 포함됩니다(예: --properties='{"param":"param_value"}'). 연결 리소스 생성에는 instanceID, database, type 매개변수를 지정해야 합니다. 매개변수 friendly_namedescription은 선택사항입니다.
  • --connection_credential은 매개변수 usernamepassword를 포함해야 합니다.
  • --project_id는 프로젝트 ID입니다.
  • --location은 Cloud SQL 인스턴스가 위치한 리전입니다.
  • 문자, 숫자, 밑줄만 사용하여 연결을 식별하기 위한 이름을 입력합니다.

예를 들어 다음 명령어를 실행하면 프로젝트에 ID가 federation-test인 my_new_connection(별칭: "My new connection")이라는 새 연결 리소스가 생성됩니다.

bq mk --connection --connection_type='CLOUD_SQL' --properties='{"instanceId":"federation-test:us-central1:mytestsql","database":"mydatabase","type":"MYSQL"}' --connection_credential='{"username":"myusername", "password":"mypassword"}' --project_id=federation-test --location=us my_new_connection

API

projects.locations.transferConfigs.create 메서드를 사용하고 TransferConfig 리소스의 인스턴스를 지정합니다.

연결 리소스 보기

Console

  1. 연결 리소스의 상태를 보려면 BigQuery 웹 UI로 이동합니다.

    BigQuery 웹 UI로 이동

  2. 연결 리소스는 프로젝트 아래의 최상위 수준, 외부 연결 그룹 아래에 나열됩니다.

  3. connection IDCloud SQL instance ID 같은 연결 리소스의 정보를 보려면 연결을 클릭합니다.

    연결 리소스 보기

명령줄

bq show 명령어를 입력하고 연결 플래그 --connection을 지정합니다. 정규화된 connection_id가 필요합니다.

    bq show --connection project.location.connection_id

예를 들어 다음 명령어는 us 리전에 위치한 프로젝트 ID federation-testmy_new_connection이라는 새 연결 리소스를 생성합니다.

    bq show --connection federation-test:us.my_new_connection

API

projects.locations.connections.list 메서드를 사용하고 list 리소스의 인스턴스를 지정합니다. 참조 섹션 REST API를 확인하세요.

다른 사용자에게 권한 부여

다른 사용자가 Cloud SQL 통합 쿼리의 연결 리소스를 사용하려면 bigquery.admin 사용자가 다음 IAM 역할 BigQuery Connection User를 부여해야 합니다. 이 IAM 역할에는 다음 권한이 포함됩니다.

  • bigquery.connections.get
  • bigquery.connections.list
  • bigquery.connections.use
  • bigquery.connections.getIamPolicy

bigquery.admin 사용자는 다른 사용자에게 BigQuery Connection Admin이라는 다른 역할도 부여할 수 있습니다. 이 역할에는 BigQuery Connection User와 동일한 권한은 물론 기존 연결을 생성, 업데이트, 삭제하고 연결에 대한 IAM 정책을 설정하기 위한 추가 권한이 포함됩니다.

  • bigquery.connections.create
  • bigquery.connections.update
  • bigquery.connections.setIamPolicy
  • bigquery.connections.delete

가격 책정

BigQuery에서 Cloud SQL을 쿼리할 때 쿼리에서 읽은 바이트 수에 대한 비용이 청구됩니다. 자세한 내용은 쿼리 가격 책정을 참조하세요. 베타 기간 동안 Cloud SQL 통합 쿼리에 대한 부가적인 청구 또는 할당량은 없습니다.

참조

Cloud SQL 테이블 스키마 보기

information_schema 테이블을 쿼리하기 위해 EXTERNAL_QUERY() 함수를 사용해 데이터베이스 메타데이터에 액세스하여 데이터베이스의 모든 테이블을 나열하거나 테이블 스키마를 볼 수 있습니다. 다음 예시의 information_schema 쿼리는 MySQL과 PostgreSQL에서 모두 작동합니다. MySQL information_schema 테이블PostgreSQL information_schema 테이블에서 더 자세히 알아볼 수 있습니다.

// List all tables in a database
SELECT * FROM EXTERNAL_QUERY("connection_id",
"select * from information_schema.tables;");
// List all columns in a table.
SELECT * FROM EXTERNAL_QUERY("connection_id",
"select * from information_schema.columns where table_name='x';");

연결 리소스 세부정보

속성 이름 설명
name string 연결 리소스의 이름입니다(형식: project_id.location_id.connection_id).
location string 연결의 위치이며 Cloud SQL 인스턴스 위치와 동일합니다. 단, 예외적으로 Cloud SQL us-central1은 BigQuery US에 매핑되며 Cloud SQL europe-west1은 BigQuery EU에 매핑됩니다.
friendlyName string 연결의 사용자 친화적인 표시 이름입니다.
description string 연결에 대한 설명입니다.
cloudSql.type string 'POSTGRES' 또는 'MYSQL'일 수 있습니다.
cloudSql.instanceId string Cloud SQL 인스턴스 이름은 주로 다음 형식입니다.

Project-id:location-id:instance-id

Cloud SQL 인스턴스 세부정보 페이지에서 인스턴스 ID를 확인할 수 있습니다.
cloudSql.database string 연결하려는 Cloud SQL 데이터베이스입니다.

연결 사용자 인증 정보 리소스 세부정보

속성 이름 설명
username string 데이터베이스 사용자 이름
password string 데이터베이스 비밀번호

데이터 유형 매핑

Cloud SQL 통합 쿼리를 실행할 때 Cloud SQL의 데이터(MySQL 또는 PostgreSQL 데이터 유형)는 BigQuery 표준 SQL 유형으로 변환됩니다. 다음은 MySQL에서 BigQueryPostgreSQL에서 BigQuery의 데이터 유형 매핑입니다.

매핑에 대해 알아야 할 사항은 다음과 같습니다.

  • 대부분의 MySQL 데이터 유형은 decimal, timestamp, time과 같은 일부 예외를 빼면 동일한 BigQuery 데이터 유형과 짝지을 수 있습니다.
  • PostgreSQL은 BigQuery에서 지원되지 않는 많은 비표준 데이터 유형(예: money, path, uuid, boxer 등)을 지원합니다.
  • BigQuery 숫자 값 범위는 MySQL 및 PostgreSQL보다 작습니다.

오류 처리

외부 쿼리에 BigQuery에서 지원되지 않는 데이터 유형이 포함되는 경우 쿼리는 즉시 실패합니다. 지원되지 않는 데이터 유형을 지원되는 다른 MySQL / PostgreSQL 데이터 유형으로 변환할 수 있습니다. 변환 방법은 문제해결 아래의 지원되지 않는 데이터 유형을 참조하세요.

MySQL에서 BigQuery로 유형 매핑

MySQL 유형 MySQL 설명 BigQuery 유형 유형 차이
정수
INT 4바이트, 2^32 - 1 INT64
TINYINT 1바이트, 2^8 - 1 INT64
SMALLINT 2바이트, 2^16 - 1 INT64
MEDIUMINT 3바이트, 2^24 - 1 INT64
BIGINT 8바이트, 2^64 - 1 INT64
UNSIGNED BIGINT 8바이트, 2^64 - 1 NUMERIC
정확한 숫자
DECIMAL (M,D) (M,D)로 표현되는 소수. 여기서 M은 총 자릿수, D는 소수 자릿수입니다. M <= 65 NUMERIC
BigQuery NUMERIC 범위는 더 작아서, 38자리의 정밀도와 소수점 9자리의 척도만 지원합니다.
대략적인 숫자
FLOAT (M,D) 4바이트, M <= 23 FLOAT64
DOUBLE (M,D) 8바이트, M <= 53 FLOAT64
날짜 및 시간
TIMESTAMP '1970-01-01 00:00:01'UTC ~ '2038-01-19 03:14:07' UTC. TIMESTAMP MySQL TIMESTAMP는 사용자가 BigQuery를 호출하는 위치에 관계없이 UTC 시간대로 검색됩니다.
DATETIME '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' DATETIME
DATE '1000-01-01' ~ '9999-12-31'. DATE
TIME 시간은 'HH:MM:SS' 형식으로
'-838:59:59' ~'838:59:59'입니다.
TIME
BigQuery TIME 범위는 더 작은 00:00:00 ~ 23:59:59입니다.
YEAR INT64
문자 및 문자열
ENUM 허용된 값 목록에서 선택된 값이 있는 문자열 객체 STRING
CHAR (M) 1 ~ 255자 사이의 고정 길이 문자열 STRING
VARCHAR (M) 1 ~ 255자 사이의 가변 길이 문자열 STRING
TEXT 최대 길이가 65,535자인 필드 STRING
TINYTEXT 최대 길이가 255자인 TEXT 열 STRING
MEDIUMTEXT 최대 길이가 16,777,215자인 TEXT 열 STRING
LONGTEXT 최대 길이가 4,294,967,295자인 TEXT 열 STRING
바이너리
BLOB 최대 길이가 65,535자인 바이너리 대형 객체 BYTE
MEDIUM_BLOB 최대 길이가 16,777,215자인 BLOB BYTE
LONG_BLOB 최대 길이가 4,294,967,295자인 BLOB BYTE
TINY_BLOB 최대 길이가 255자인 BLOB BYTE
기타
SET SET 열 선언 시 일부 값을 사전 정의합니다. 그런 다음 이 열에 사전 정의된 아무 값 집합을 INSERT합니다. STRING
GEOMETRY GEOMETRY 아직 지원되지 않음
BIT INT64 아직 지원되지 않음

PostgreSQL에서 BigQuery로 유형 매핑

이름 설명 BigQuery 유형 유형 차이
정수
smallint 2바이트, -32768 ~ +32767 INT64
smallserial smallint 참조 INT64
integer 4바이트, -2147483648 ~ +2147483647 INT64
serial integer 참조 INT64
bigint 8바이트, -9223372036854775808 ~ 9223372036854775807 INT64
bigserial bigint 참조 INT64
정확한 숫자
numeric [ (p, s) ] 최대 1,000의 정밀도 NUMERIC BigQuery NUMERIC 범위는 더 작아서, 38자리의 정밀도와 소수점 9자리의 척도만 지원합니다.
Decimal [ (p, s) ] numeric 참조 NUMERIC numeric 참조
money 8바이트, 2자릿수 척도, -92233720368547758.08 ~ +92233720368547758.07 지원되지 않음
대략적인 숫자
real 4바이트, 단일 정밀도 부동 소수점 수 FLOAT64
double precision 8바이트, 배정밀도 부동 소수점 수 FLOAT64
날짜 및 시간
date 달력 날짜(연, 월, 일) DATE
time [ (p) ] [ 시간대 제외 ] 시간(시간대 없음) TIME
time [ (p) ](시간대 포함) 시간(시간대 포함) 지원되지 않음
timestamp [ (p) ] [ 시간대 제외 ] 날짜 및 시간(시간대 없음) DATETIME
timestamp [ (p) ](시간대 포함) 날짜 및 시간(시간대 포함) TIMESTAMP PostgreSQL TIMESTAMP는 사용자가 BigQuery를 호출한 위치에 관계없이 UTC 시간대로 검색됩니다.
interval 지속 시간 지원되지 않음
문자 및 문자열
character [ (n) ] 고정 길이 문자 문자열 STRING
character varying [ (n) ] 가변 길이 문자 문자열 STRING
text 가변 길이 문자 문자열 STRING
바이너리
bytea 바이너리 데이터('바이트 배열') BYTES
bit [ (n) ] 고정 길이 비트 문자열 BYTES
bit varying [ (n) ] 가변 길이 비트 문자열 BYTES
기타
boolean 논리 부울(true/false) BOOL
inet IPv4 또는 IPv6 호스트 주소 지원되지 않음
path 평면상의 기하학적 경로 지원되지 않음
pg_lsn PostgreSQL 로그 시퀀스 번호 지원되지 않음
point 평면상의 기하학적 점 지원되지 않음
polygon 평면상의 닫힌 기하학적 경로 지원되지 않음
tsquery 텍스트 검색어 지원되지 않음
tsvector 텍스트 검색 문서 지원되지 않음
txid_snapshot 사용자 수준 트랜잭션 ID 스냅샷 지원되지 않음
uuid 범용 고유 식별자 지원되지 않음
xml XML 데이터 STRING
box 평면상의 직사각형 상자 지원되지 않음
cidr IPv4 또는 IPv6 네트워크 주소 지원되지 않음
circle 평면상의 원 지원되지 않음
interval [ fields ] [ (p) ] 시간 범위 지원되지 않음
json 텍스트 JSON 데이터 STRING
jsonb 바이너리 JSON 데이터(분할됨) 지원되지 않음
line 평면상의 무한 선 지원되지 않음
lseg 평면상의 선분 지원되지 않음
macaddr MAC(미디어 액세스 제어) 주소 지원되지 않음
macaddr8 MAC(미디어 액세스 제어) 주소(EUI-64 형식) 지원되지 않음

알려진 문제 및 제한사항

리전

Cloud SQL 통합 쿼리는 Cloud SQL과 BigQuery를 모두 지원하는 리전에서만 지원됩니다. 쿼리 통합은 모든 BigQuery 리전에서 지원되지만 일부 Cloud SQL 리전에서는 지원되지 않습니다.

다음 규칙에 따라 여러 리전에 걸쳐 통합 쿼리를 실행할 수 있습니다.

멀티 리전

BigQuery 멀티 리전은 같은 위치(US, EU)의 모든 Cloud SQL 리전을 쿼리할 수 있습니다. 예를 들면 다음과 같습니다.

  • BigQuery US 멀티 리전은 Cloud SQL us-central1, us-east4, us-west2 등을 쿼리할 수 있습니다.
  • BigQuery EU 멀티 리전은 Cloud SQL europe-north1, europe-west2 등을 쿼리할 수 있습니다.

단일 리전

BigQuery 단일 리전은 같은 리전의 Cloud SQL만 쿼리할 수 있습니다. 예를 들면 다음과 같습니다.

  • BigQuery us-east4는 Cloud SQL us-east4만 쿼리할 수 있습니다.

Cloud SQL은 BigQuery보다 더 많은 리전에서 지원됩니다. 각 제품에 지원되는 리전에 대한 자세한 매핑은 아래 표를 참조하세요.

Cloud SQL 리전 BigQuery 멀티 리전/리전
northamerica-northeast1 US / Northamerica-northeast1
us-central 지원되지 않음: 이 Cloud SQL 인스턴스 리전은 V1입니다.
통합 쿼리는 V2 인스턴스에서만 지원됩니다.
us-central1 US
us-east1 US / us-east4
us-east4 US / us-east4
us-west1 지원되지 않음
us-west2 US / us-west2
southamerica-east1 southamerica-east1
europe-north1 EU / europe-north1
europe-west1 EU
europe-west2 EU / europe-west2
europe-west3 지원되지 않음
europe-west4 지원되지 않음
europe-west6 EU / europe-west6
asia-east1 asia-east1
asia-east2 asia-east2
asia-northeast1 asia-northeast1
asia-northeast3 asia-northeast3
asia-south1 asia-south1
asia-southeast1 asia-southeast1
australia-southeast1 australia-southeast1

할당량 및 기타 한도

  • 성능: 통합 쿼리의 속도는 대부분의 경우 BigQuery 스토리지만 쿼리하는 경우에 비해 느립니다. BigQuery는 소스 데이터베이스가 외부 쿼리를 실행하기를 기다려야 하며 Cloud SQL에서 BigQuery로 임시로 데이터를 옮겨야 합니다. MySQL이나 PostgreSQL과 같은 소스 데이터베이스는 일반적으로 복잡한 분석 쿼리에 맞게 최적화되지 않습니다.
  • 할당량: 사용자가 Cloud SQL의 쿼리 할당량을 제어해야 합니다. 통합 쿼리에 대한 추가 할당량 설정은 없습니다. 워크로드 격리를 위해서는 데이터베이스 읽기 복제본만 쿼리하는 것이 좋습니다.
  • Maximum bytes billed allowed(허용되는 최대 청구 바이트): 이 필드는 현재 통합 쿼리에는 지원되지 않습니다. 현재는 통합 쿼리를 실제로 실행하기 전에는 청구되는 바이트를 계산할 수 없습니다.
  • Limited Cloud SQL instances(제한된 Cloud SQL 인스턴스): 통합 쿼리는 공개 IP(비공개 IP 아님)가 있는 Cloud SQL v2 인스턴스에서만 지원됩니다.
  • Cloud SQL MySQLPostgreSQL 할당량 및 한도가 적용됩니다.
  • 연결 수: 통합 쿼리에 허용되는 고유한 연결의 수는 최대 10개입니다.

문제해결

이 섹션에서는 연결을 설정할 때 발생하는 가장 일반적인 문제의 해결 방법을 안내합니다. 이 섹션에서 발생 가능한 오류 메시지나 문제를 모두 다루지는 않습니다.

일반적인 문제

일반적인 연결 문제를 진단할 때는 다음을 확인하세요.

  • 연결의 문서 페이지에 있는 '시작하기 전에'의 모든 단계를 완료했는지 확인합니다.
  • 연결 구성 속성이 올바릅니다.

연결 구성이 올바르고 적절한 권한이 부여된 경우 일반적인 문제에 대한 해결 방법은 다음을 참조하세요.

문제: BigQuery 및 Cloud SQL이 같은 위치에 배치되지 않았습니다.
해결 방법: Cloud SQL 통합 쿼리는 Cloud SQL과 BigQuery를 모두 지원하는 리전에서만 지원됩니다. BigQuery 데이터세트와 Cloud SQL 인스턴스는 같은 리전에 있거나, 데이터세트가 USEU와 같은 멀티 리전 위치에 있는 경우 같은 위치에 있어야 합니다. 리전에 대한 자세한 내용은 알려진 문제 및 제한을 참조하세요.
문제: 성능이 예상보다 느립니다.
해결 방법: 통합 쿼리의 성능은 BigQuery에 저장된 데이터를 쿼리하는 경우에 비해 낮습니다. 통합 쿼리는 외부적으로 Cloud SQL을 쿼리하고 데이터를 임시 BigQuery 테이블로 반환하고 데이터를 BigQuery 데이터 유형에 매핑한 다음 BigQuery에서 쿼리를 실행해야 하기 때문입니다. 이점은 쿼리의 성능은 높지 않더라도 데이터를 다시 복사, 이동, 저장해야 할 필요가 없다는 것입니다.
문제: 연결 이름의 형식은 무엇인가요?
해결 방법: 연결 이름에는 프로젝트, 위치, connection_id가 포함되어야 합니다. 연결 이름은 project_id.location_id.connection_id 패턴에 부합해야 합니다(예: federation-test.us.my_new_connection)

지원되지 않는 데이터 유형

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

  • 지원되지 않는 MySQL 데이터 유형

    • 오류 메시지: Invalid table-valued function external_query Found unsupported MySQL type in BigQuery. at [1:15]
    • 지원되지 않는 유형: GEOMETRY, BIT
    • 해결 방법: 지원되지 않는 데이터 유형을 STRING으로 변환합니다.
    • 예: SELECT ST_AsText(ST_GeomFromText('POINT(1 1)')); 이 명령어는 지원되지 않는 데이터 유형 GEOMETRYSTRING으로 전송합니다.
  • 지원되지 않는 PostgreSQL 데이터 유형

    • 오류 메시지: Invalid table-valued function external_query Postgres type (OID = 790) is not supported now at [1:15]
    • 지원되지 않는 유형: money, time with time zone, inet, path, pg_lsn, point, polygon, tsquery, tsvector, txid_snapshot, uuid, box, cidr, circle, interval, jsonb, line, lseg, macaddr, macaddr8
    • 해결 방법: 지원되지 않는 데이터 유형을 STRING으로 변환합니다.
    • 예: SELECT CAST('12.34'::float8::numeric::money AS varchar(30)); 이 명령어는 지원되지 않는 데이터 유형 moneystring으로 전송합니다.