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(문자열):Cloud Console, bq 명령줄 도구 또는 BigQuery 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 * FROM EXTERNAL_QUERY(
'connection_id',
'''SELECT * FROM customers AS c ORDER BY c.customer_id'');

시작하기 전에

BigQuery 연결 서비스 사용 설정

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

    BigQuery Connection API

서비스 계정

BigQuery는 서비스 계정을 사용하여 Cloud SQL 인스턴스에 연결합니다. BigQuery Connection API를 사용 설정하면 Google Cloud 관리 ID 및 액세스 관리(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에서 IAM 페이지를 엽니다.

    IAM 페이지 열기

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

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

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

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

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

      관리자 권한 부여

gcloud

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

프로젝트의 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의 IAM 역할에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

공개 IP

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

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

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

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

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

연결 리소스 만들기

Console

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

    BigQuery 페이지로 이동

  2. 데이터 추가 메뉴에서 외부 데이터 소스를 선택합니다.

    연결 리소스를 만듭니다.

  3. 외부 데이터 소스 창에서 다음 정보를 입력합니다.

    • 연결 유형에 MySQL 또는 Postgres를 선택합니다.
    • 연결 ID에는 연결 리소스의 식별자를 입력합니다. 문자, 숫자, 밑줄을 사용할 수 있습니다.
    • 연결 위치에서 Cloud SQL 인스턴스 리전과 호환되는 BigQuery 위치(또는 리전)를 선택합니다.
    • (선택사항): 별칭에 사용자 친화적인 연결 이름(예: My connection resource)을 입력합니다. 사용자 친화적인 이름으로 나중에 수정해야 하는 경우 연결 리소스를 식별하는 데 도움이 되는 모든 값을 사용할 수 있습니다.
    • (선택사항): 설명에 이 연결 리소스에 대한 설명을 입력합니다.
    • Cloud SQL 인스턴스 IDCloud SQL 인스턴스의 전체 이름을 입력합니다. 일반적으로 project-id:location-id:instance-id 형식입니다. 쿼리하려는 Cloud SQL 인스턴스의 세부정보 페이지에서 인스턴스 ID를 찾을 수 있습니다.
    • 데이터베이스 이름에 데이터베이스 이름을 입력합니다.
    • 사용자 이름에 데이터베이스의 사용자 이름을 입력합니다.
    • 비밀번호에 데이터베이스의 비밀번호를 입력합니다.

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

      새 연결 리소스

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

bq

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

  • --connection_type
    • --connection_type은 항상 CLOUD_SQL입니다.
  • --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
    

다음을 바꿉니다.

  • PROPERTIES: 생성된 연결의 매개변수입니다(JSON 형식). 예를 들면 --properties='{"param":"param_value"}'입니다. 연결 리소스 생성에는 instanceID, database, type 매개변수를 지정해야 합니다. 매개변수 friendly_namedescription은 선택사항입니다.
  • CREDENTIALS: 매개변수 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

BigQuery 연결 API 내에서 ConnectionService 내에서 CreateConnection를 호출하여 연결을 인스턴스화할 수 있습니다. 자세한 내용은 클라이언트 라이브러리 페이지를 참조하세요.

문제해결

이 섹션을 활용하면 새 연결을 설정할 때 발생할 수 있는 문제를 해결할 수 있습니다. 하지만 이 섹션에서는 발생 가능한 모든 오류 메시지나 문제를 설명하지는 않습니다.

일반적인 연결 문제를 진단할 때는 다음을 확인합니다.

  • 시작하기 전에 섹션의 모든 단계를 완료했습니다.
  • 연결 구성 속성이 올바릅니다.
  • 연결을 만들 수 있는 적절한 권한이 있습니다.

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

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

연결 리소스 관리

연결 리소스 보기, 나열, 공유, 업데이트, 삭제에 대한 자세한 내용은 연결 작업을 참조하세요.

감사 로깅

연결 리소스의 감사 로깅은 BigQuery 감사 로그 개요를 참조하세요.

지원되는 리전

Cloud SQL 통합 쿼리는 Cloud SQL과 BigQuery를 모두 지원하는 리전에서만 지원됩니다.

위치 또는 리전 유형

다음과 같은 두 가지 유형의 위치가 있습니다.

  • 리전은 특정한 지리적 장소(예: 런던)입니다.

  • 멀티 리전은 두 개 이상의 지리적 장소를 포함하는 넓은 지리적 지역(예: 미국)입니다.

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

멀티 리전

BigQuery 멀티 리전은 동일한 대규모 지역(미국, EU)의 모든 Cloud SQL 리전을 쿼리할 수 있습니다. 예를 들면 다음과 같습니다.

  • BigQuery US 멀티 리전은 미국 리전 내 모든 Cloud SQL 단일 리전(예: us-central1, us-east4, us-west2 등)을 쿼리할 수 있습니다.
  • BigQuery EU 멀티 리전은 europe-north1, europe-west3 등 유럽 연합의 회원국 내에 있는 모든 Cloud SQL 단일 리전을 쿼리할 수 있습니다.

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

리전 및 멀티 리전에 대한 자세한 내용은 데이터 세트 위치 페이지를 참조하세요.

단일 리전

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

  • BigQuery 단일 리전 us-east4us-east4의 Cloud SQL만 쿼리할 수 있습니다.

이 예시에서 쿼리 처리 위치는 BigQuery 단일 리전입니다.

각 제품에 지원되는 리전에 대한 자세한 매핑은 아래 표를 참조하세요.

리전 위치

리전 설명 Cloud SQL 리전 호환되는 BigQuery 리전 호환되는 BigQuery 멀티 리전
미주
아이오와 us-central 지원되지 않음: 이 Cloud SQL 인스턴스 리전은 V1입니다.
통합 쿼리는 Cloud SQL의 V2 인스턴스만 지원합니다.
아이오와 us-central1 지원되지 않음 US
라스베이거스 us-west4 us-west4 US
로스앤젤레스 us-west2 us-west2 US
몬트리올 northamerica-northeast1 northamerica-northeast1 US
북 버지니아 us-east4 us-east4 US
오리건 us-west1 us-west1 US
솔트레이크시티 us-west3 us-west3 US
상파울루 southamerica-east1 southamerica-east1
사우스캐롤라이나 us-east1 us-east1 US
유럽
벨기에 europe-west1 europe-west1 EU
핀란드 europe-north1 europe-north1 EU
프랑크푸르트 europe-west3 europe-west3 EU
런던 europe-west2 europe-west2 EU
네덜란드 europe-west4 europe-west4 EU
취리히 europe-west6 europe-west6 EU
아시아 태평양
홍콩 asia-east2 asia-east2
자카르타 asia-southeast2 asia-southeast2
뭄바이 asia-south1 asia-south1
오사카 asia-northeast2 asia-northeast2
서울 asia-northeast3 asia-northeast3
싱가포르 asia-southeast1 asia-southeast1
시드니 australia-southeast1 australia-southeast1
타이완 asia-east1 asia-east1
도쿄 asia-northeast1 asia-northeast1

멀티 리전 위치

Cloud SQL 인스턴스에는 멀티 리전 위치를 사용할 수 없습니다. 통합 쿼리에는 Cloud SQL 멀티 리전을 사용할 수 없습니다.

EU 멀티 리전에 있는 데이터는 europe-west2(런던) 또는 europe-west6(취리히) 데이터 센터에 저장되지 않습니다.

제한사항

제한된 Cloud SQL 인스턴스

통합 쿼리는 공개 IP(비공개 IP 아님)가 있는 Cloud SQL V2 인스턴스에서만 지원됩니다.

성능

통합 쿼리는 BigQuery 스토리지만 쿼리하는 것만큼 빠르지 않을 수 있습니다. BigQuery는 소스 데이터베이스에서 외부 쿼리를 실행할 때까지 기다려야 하며 임시로 Cloud SQL에서 BigQuery로 데이터를 이동해야 합니다. MySQL이나 PostgreSQL과 같은 소스 데이터베이스는 일반적으로 복잡한 분석 쿼리에 맞게 최적화되지 않습니다.

외부 쿼리가 읽기 전용

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

지원되지 않는 데이터 유형

외부 쿼리에 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으로 변환합니다.

할당량 및 한도

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

가격 책정

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

Project-id:location-id:instance-id

Cloud SQL 인스턴스 세부정보 페이지에서 인스턴스 ID를 확인할 수 있습니다.
cloudSql.database 문자열 연결할 Cloud SQL Database입니다.

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

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

데이터 유형 매핑

Cloud SQL 통합 쿼리를 실행할 때 Cloud SQL의 데이터(MySQL 또는 PostgreSQL 데이터 유형)는 BigQuery 표준 SQL 유형으로 변환됩니다. 다음 데이터 유형 매핑은 MySQL에서 BigQuery로, PostgreSQL에서 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 허용된 값 목록에서 선택된 값이 있는 문자열 객체 문자열
CHAR (M) 1~255자 사이의 고정 길이 문자열 문자열
VARCHAR (M) 1~255자 사이의 가변 길이 문자열 문자열
TEXT 최대 길이가 65,535자인 필드 문자열
TINYTEXT 최대 길이가 255자인 TEXT 열 문자열
MEDIUMTEXT 최대 길이가 16,777,215자인 TEXT 열 문자열
LONGTEXT 최대 길이가 4,294,967,295자인 TEXT 열 문자열
바이너리
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를 사용하여 이 열에 사전 정의된 값 집합을 추가합니다. 문자열
GEOMETRY GEOMETRY 아직 지원되지 않음
BIT INT64 아직 지원되지 않음

PostgreSQL에서 BigQuery로 유형 매핑

이름 설명 BigQuery 유형 유형 차이
정수
smallint 2바이트, -32768~+32767 INT64
smallserial smallint 참조 INT64
정수 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) ] 고정 길이 문자 문자열 문자열
character varying [ (n) ] 가변 길이 문자 문자열 문자열
text 가변 길이 문자 문자열 문자열
바이너리
bytea 바이너리 데이터('바이트 배열') BYTES
bit [ (n) ] 고정 길이 비트 문자열 BYTES
bit varying [ (n) ] 가변 길이 비트 문자열 BYTES
기타
부울 논리 부울(true/false) BOOL
inet IPv4 또는 IPv6 호스트 주소 지원되지 않음
path 평면상의 기하학적 경로 지원되지 않음
pg_lsn PostgreSQL 로그 시퀀스 번호 지원되지 않음
point 평면상의 기하학적 점 지원되지 않음
polygon 평면상의 닫힌 기하학적 경로 지원되지 않음
tsquery 텍스트 검색어 지원되지 않음
tsvector 텍스트 검색 문서 지원되지 않음
txid_snapshot 사용자 수준 트랜잭션 ID 스냅샷 지원되지 않음
uuid 범용 고유 식별자 지원되지 않음
xml XML 데이터입니다. 문자열
box 평면상의 직사각형 상자 지원되지 않음
cidr IPv4 또는 IPv6 네트워크 주소 지원되지 않음
circle 평면상의 원 지원되지 않음
interval [ fields ] [ (p) ] 시간 범위 지원되지 않음
json 텍스트 JSON 데이터 문자열
jsonb 바이너리 JSON 데이터(분할됨) 지원되지 않음
line 평면상의 무한 선 지원되지 않음
lseg 평면상의 선분 지원되지 않음
macaddr MAC(미디어 액세스 제어) 주소 지원되지 않음
macaddr8 MAC(미디어 액세스 제어) 주소(EUI-64 형식) 지원되지 않음