AlloyDB에서 BigQuery 액세스

이 페이지에서는 Lakehouse Federation을 사용하여 PostgreSQL용 AlloyDB 인터페이스에서 BigQuery를 사용하여 저장되거나 액세스할 수 있는 데이터에 액세스하는 방법을 설명합니다.

외부 데이터 래퍼는 다양한 BigQuery 리소스를 지원하므로 다음을 쿼리할 수 있습니다.

이 통합을 사용하면 PostgreSQL 환경 내에서 BigQuery 데이터 세트를 로컬 테이블로 취급하여 엔진 간 분석을 실행할 수 있습니다. 자세한 내용은 AlloyDB의 레이크하우스 페더레이션 개요를 참고하세요.

이 페이지에서는 AlloyDB 클러스터 및 기본 인스턴스가 있고 BigQuery 데이터 세트와 테이블이 있다고 가정합니다. 자세한 내용은 데이터 세트 만들기테이블 만들기 및 사용을 참조하세요.

시작하기 전에

  1. PostgreSQL용 AlloyDB 인스턴스에서 bigquery_fdw.enabled 플래그가 구성되어 있는지 확인합니다.
  2. 지원되는 BigQuery 데이터 유형 및 열 매핑에 대해 알아봅니다.
  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  4. Verify that billing is enabled for your Google Cloud project.

  5. Enable the AlloyDB, Compute Engine, Resource Manager, and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  6. PostgreSQL용 AlloyDB를 만들고 여기에 연결하는 데 필요한 Cloud API를 사용 설정합니다.

    API 사용 설정

  7. 프로젝트 확인 단계에서 다음을 클릭하여 변경할 프로젝트의 이름을 확인합니다.

  8. API 사용 설정 단계에서 사용 설정을 클릭하여 다음을 사용 설정합니다.

    • AlloyDB API
    • Compute Engine API
    • Cloud Resource Manager API
    • Service Networking API
    • BigQuery Storage API
    • BigQuery API

    AlloyDB와 동일한 Google Cloud 프로젝트에 있는 VPC 네트워크를 사용하여 AlloyDB에 대한 네트워크 연결을 구성하려면 Service Networking API가 필요합니다.

    다른 Google Cloud 프로젝트에 있는 VPC 네트워크를 사용하여 AlloyDB에 대한 네트워크 연결을 구성하려면 Compute Engine API와 Cloud Resource Manager API가 필요합니다.

필요한 역할

AlloyDB 클러스터 서비스 계정에 BigQuery 데이터 세트에 대한 읽기 액세스 권한을 부여하려면 다음 권한이 필요합니다. 자세한 내용은 BigQuery 데이터 세트에 AlloyDB 액세스 권한 부여를 참조하세요.

  • BigQuery 데이터 뷰어(roles/bigquery.dataViewer) 또는 bigquery.tables.getbigquery.tables.getData 권한아 있는 커스텀 역할. 테이블 또는 뷰에 부여되면 이 역할은 테이블 또는 뷰에서 데이터와 메타데이터를 읽을 수 있는 권한을 제공합니다.
  • BigQuery 읽기 세션 사용자(roles/bigquery.readSessionUser) 또는 bigquery.readsessions.createbigquery.readsessions.getData 권한이 있는 커스텀 역할. 읽기 세션을 만들고 사용할 수 있는 기능을 제공합니다.
  • BigQuery 작업 사용자 (roles/bigquery.jobUser) 또는 bigquery.jobs.create 권한이 있는 커스텀 역할. BigQuery API를 사용하여 프로젝트 내에서 쿼리 등의 작업을 실행할 수 있는 권한을 제공합니다. 이 역할은 Resource Manager 리소스 (프로젝트, 폴더, 조직)에만 부여할 수 있습니다.
  • 스토리지 객체 뷰어 (roles/storage.objectViewer) 또는 storage.objects.get 권한이 있는 커스텀 역할. BigQuery 외부 테이블에 액세스할 수 있는 권한을 제공합니다. 프로젝트 또는 버킷 수준에서 부여해야 합니다.

BigQuery 데이터 세트에 AlloyDB 액세스 권한 부여

AlloyDB 클러스터에서 레이크하우스 통합 기능이 사용 설정된 후 AlloyDB 클러스터 서비스 계정에 BigQuery 데이터 세트에 대한 액세스 권한을 부여해야 합니다.

AlloyDB Studio를 사용하여 BigQuery 테이블을 연결하면 Google Cloud 콘솔에서 클러스터 서비스 계정에 필요한 권한을 자동으로 부여합니다.

gcloud CLI를 사용하여 액세스 권한을 부여하려면 다음 단계를 따르세요.

gcloud

gcloud CLI를 사용하려면 Google Cloud CLI를 설치 및 초기화하거나 Cloud Shell을 사용합니다.

  1. gcloud CLI를 엽니다. gcloud CLI가 설치되어 있지 않으면 gcloud CLI를 설치 및 초기화하거나 Cloud Shell을 사용합니다.

  2. gcloud beta alloydb clusters describe 명령어를 실행합니다.

    gcloud beta alloydb clusters describe CLUSTER --region=REGION

    다음을 바꿉니다.

    • CLUSTER: AlloyDB 클러스터 ID
    • REGION: AlloyDB 클러스터의 위치(예: asia-east1, us-east1). AlloyDB 위치에서 전체 리전 목록을 확인하세요.

    출력에는 이 클러스터의 서비스 계정인 serviceAccountEmail 필드가 포함됩니다. 클러스터 개요 페이지에서도 서비스 계정을 확인할 수 있습니다.

  3. 필수 권한 부여 자세한 내용은 IAM으로 리소스 액세스 제어를 참조하세요.

    클러스터 서비스 계정에 필요한 권한이 없으면 BigQuery 테이블에 대해 쿼리를 실행할 때 다음 오류가 표시됩니다.

    • The user does not have bigquery.readsessions.create permissions
    • Permission bigquery.tables.get denied on table
    • Permission bigquery.tables.getData denied on table

확장 프로그램 구성

확장 프로그램을 구성하려면 다음 단계를 따르세요.

콘솔

  1. 클러스터 페이지로 이동합니다.

    클러스터로 이동

  2. 사용하려는 클러스터의 ID를 클릭합니다.

  3. 탐색 메뉴에서 AlloyDB Studio를 클릭합니다.

  4. 데이터베이스에 로그인합니다.

  5. 탐색기 창에서 관련 스키마를 펼칩니다.

  6. BigQuery 테이블 옆에 있는 작업 메뉴를 클릭하고 BigQuery 테이블 연결을 클릭합니다.

  7. BigQuery 테이블 연결 창에서 소스 프로젝트, 소스 데이터 세트, 테이블을 선택합니다.

  8. 열 검토 및 선택 표에는 선택한 표의 열이 표시됩니다. 매핑할 열을 선택합니다.

  9. 테이블 이름 필드에 외부 테이블의 이름을 입력합니다.

  10. 선택사항: SQL 명령어 보기를 클릭하여 생성된 명령어를 확인합니다.

  11. 표 연결을 클릭합니다. 진행 상황을 보여주는 대화상자가 표시됩니다. 이 프로세스가 완료되면 AlloyDB의 테이블을 쿼리하는 것처럼 테이블을 쿼리할 수 있습니다.

psql

  1. 확장 프로그램을 만듭니다.

    1. 인스턴스에 psql 클라이언트 연결의 안내에 따라 psql 클라이언트를 사용하여 AlloyDB 인스턴스에 연결합니다. 또는 AlloyDB Studio를 사용할 수 있습니다. 자세한 내용은 Google Cloud 콘솔을 사용하여 데이터 관리를 참고하세요.
    2. 다음 명령어를 실행합니다.

      CREATE EXTENSION bigquery_fdw;
      
  2. 원격 BigQuery 데이터 세트의 연결 파라미터를 정의하는 외부 서버를 만듭니다.

    CREATE SERVER BIGQUERY_SERVER_NAME FOREIGN DATA WRAPPER bigquery_fdw;
    

    다음을 바꿉니다.

    • BIGQUERY_SERVER_NAME: 외부 서버의 고유 식별자. 지정된 데이터베이스에서 한 번 정의합니다. BIGQUERY_SERVER_NAME을 서버 이름으로 바꿀 수 있습니다.
  3. CREATE USER MAPPING 명령어를 실행하여 사용자 매핑을 만듭니다. 이 명령어는 외부 서버에 연결할 로컬 PostgreSQL 사용자를 매핑합니다.

    CREATE USER MAPPING FOR USERNAME SERVER BIGQUERY_SERVER_NAME ;
    

    다음을 바꿉니다.

    • USERNAME: 외부 테이블에 액세스하는 데이터베이스 사용자 이름 또는 IAM 사용자
    • BIGQUERY_SERVER_NAME: 생성한 외부 서버의 고유 식별자
  4. CREATE FOREIGN TABLE 명령어를 사용하여 BigQuery에서 액세스하려는 테이블에 해당하는 외부 테이블을 정의합니다. 이 명령어를 사용하면 원격 테이블의 구조를 정의할 수 있습니다. 외부 테이블에는 BigQuery의 소스 테이블에 있는 열이 전부 또는 일부 포함될 수 있습니다.

    CREATE FOREIGN TABLE TABLENAME (
    COLUMN1_NAME DATA_TYPE,
    COLUMN2_NAME DATA_TYPE,
    ... ) SERVER BIGQUERY_SERVER_NAME OPTIONS (project BIGQUERY_PROJECT_ID,
    dataset BIGQUERY_DATASET_NAME,
    table BIGQUERY_TABLE_NAME
    [, mode EXECUTION_MODE]);
    

    다음을 바꿉니다.

    • TABLENAME: 로컬 AlloyDB 데이터베이스의 외부 테이블 이름입니다.
    • COLUMNX_NAME: AlloyDB 열 이름입니다. 열 이름은 BigQuery 소스 테이블의 해당 열 이름과 정확히 일치해야 합니다. X는 테이블을 여러 열로 만들 수 있음을 나타냅니다. 이름은 BigQuery 열의 대소문자와 정확히 일치해야 합니다. BigQuery 열 이름에 대문자가 포함된 경우 (예: employeeID) 혼합 또는 대문자를 유지하려면 AlloyDB 식별자를 큰따옴표로 묶어야 합니다 (예: "employeeID").
    • DATA_TYPE: 열의 데이터 유형입니다.
    • BIGQUERY_SERVER_NAME: 생성한 외부 서버의 고유 식별자
    • BIGQUERY_PROJECT_ID: BigQuery 데이터 세트가 있는 프로젝트의 ID
    • BIGQUERY_DATASET_NAME: 테이블의 BigQuery 데이터 세트 이름입니다.
    • BIGQUERY_TABLE_NAME: BigQuery 테이블의 이름입니다.
    • EXECUTION_MODE: 선택사항. mode 옵션은 복잡한 쿼리에 BigQuery API를 사용하는 query, 더 빠른 대량 읽기를 위해 BigQuery Storage API를 사용하는 storage, 모드 간에 자동으로 선택하는 auto일 수 있습니다. 기본값은 auto입니다. 자세한 내용은 BigQuery 외부 데이터 래퍼 실행 모드를 참고하세요.

    외부 테이블이 생성된 후에는 AlloyDB의 테이블을 쿼리하는 것과 같은 방식으로 이 테이블을 쿼리할 수 있습니다.

BigQuery 외부 데이터 래퍼 실행 모드

실행 모드는 PostgreSQL용 AlloyDB가 BigQuery와 상호작용하여 데이터를 가져오는 방식을 결정합니다. BigQuery 외부 데이터 래퍼는 querystorage의 두 가지 실행 모드를 지원합니다. 각 모드마다 성능 특성과 가격이 다르므로 적절한 모드를 선택하는 것이 중요합니다. 자세한 내용은 BigQuery 가격 책정을 참고하세요.

쿼리 모드

이 모드는 BigQuery API를 사용하여 BigQuery에서 데이터를 가져옵니다. 필터와 집계를 푸시 다운하여 BigQuery의 컴퓨팅 엔진을 사용하여 복잡한 쿼리를 실행합니다. 즉, WHERE 절, GROUP BY 절, 집계는 데이터를 PostgreSQL로 다시 보내기 전에 BigQuery에서 실행됩니다. 이 모드에서는 BigQuery 뷰와 외부 테이블 쿼리도 지원합니다.

이 API는 소규모 결과 집합에 적합한 구조화된 페이지로 나뉜 행 응답을 제공하므로 대규모 데이터 세트를 읽을 때 BigQuery Storage API의 스트리밍 대안에 비해 처리량 제한이 있고 지연 시간이 더 깁니다.

스토리지 모드

이 모드는 BigQuery Storage API를 사용하여 BigQuery에서 데이터를 가져옵니다. 바이너리 직렬화 형식으로 네트워크를 통해 구조화된 데이터를 전송하여 처리량이 높은 읽기를 지원합니다. 이 모드는 BigQuery에서 큰 테이블을 스캔하는 데 권장됩니다.

하지만 이 모드에는 몇 가지 제한사항이 있습니다. 모든 복잡한 SQL 작업을 BigQuery Storage API로 푸시할 수 있는 것은 아닙니다. 예를 들어 집계는 BigQuery로 푸시다운할 수 없으며 AlloyDB에서 실행해야 합니다. 이 모드에서는 BigQuery 뷰와 외부 테이블 쿼리도 지원하지 않습니다.

자동 모드

CREATE FOREIGN TABLE 명령어에서 모드를 설정하지 않으면 기본 모드가 auto으로 설정됩니다. auto 모드를 사용하면 AlloyDB에서 성능의 균형을 맞추고 BigQuery로 푸시되는 SQL 작업을 최대화하기 위해 기본 API를 선택합니다.

다음 단계