BigQuery에서 AlloyDB로의 제로 ETL 데이터 통합

1. 개요

1부에서는 Knowledge Catalog와 DataScan을 사용하여 혼란스럽고 비구조적인 PDF를 BigQuery의 깔끔하고 지능적인 구조화된 표로 변환했습니다. 이제 강력한 데이터 웨어하우스가 있습니다.

빠르게 복습하자면, 파트 1 실습에서는 가상의 Frozen Yogurt 프랜차이즈 사용 사례를 살펴보고 텍스트, 표, 이미지를 포함하는 400개의 구조화되지 않은 PDF 파일을 BigQuery Knowledge Catalog 및 Dataplex를 사용하여 관계가 자동으로 추론되는 깔끔하게 구조화된 BigQuery 테이블로 변환했습니다.

빌드할 항목

이 세션에서는 PostgreSQL용 AlloyDB를 설정하고 BigQuery 데이터를 AlloyDB로 직접 페더레이션하는 마법 같은 작업을 수행합니다. 즉, 트랜잭션 앱에서 데이터를 복사하거나 중복하지 않고도 데이터 웨어하우스 데이터를 실시간으로 쿼리할 수 있습니다.

개발자는 이 단계에서 다음 질문을 해야 합니다.

'데이터가 이미 BigQuery에 있는데 AlloyDB를 사용하는 이유는 무엇인가요? 애플리케이션에서 BigQuery에 대해 SELECT 문을 직접 실행하지 않는 이유는 무엇인가요?'

이유:

레이크하우스 페더레이션을 사용하면 동일한 인터페이스 내에서 애플리케이션의 트랜잭션 및 분석 워크로드를 AlloyDB의 쿼리 엔진으로 구동할 수 있습니다. 또한 애플리케이션에서 더 빠르게 액세스할 수 있도록 이 데이터를 AlloyDB에 구체화하거나 가져올 수 있으며, 이를 통해 AlloyDB AI열 기반 엔진을 사용할 수 있습니다.

AlloyDB를 트랜잭션 데이터베이스로 사용할 수 있으며 대량의 데이터를 BigQuery 또는 BigLake에 저장할 수 있습니다. 일반적으로 애플리케이션은 이러한 다양한 Google Cloud 서비스의 데이터에 액세스하기 위해 이러한 시스템과 독립적으로 통합됩니다. AlloyDB용 레이크하우스 페더레이션을 사용하면 AlloyDB에 SQL 인터페이스를 사용하여 BigQuery 및 AlloyDB 데이터에 액세스할 수 있도록 외부 데이터 래퍼로 구현된 AlloyDB의 페더레이션 쿼리 지원을 사용할 수 있습니다.

AlloyDB에서 BigQuery 데이터를 쿼리하기 위해 깨지기 쉬운 ETL 파이프라인을 빌드하는 대신 페더레이션 쿼리를 사용합니다. AlloyDB는 통합 엔드포인트 역할을 하며 필요할 때 BigQuery에 원활하게 연결됩니다.

빌드를 시작해 보겠습니다.

1a3f48f6d70b16ad.png

학습할 내용

  • 버튼 클릭으로 AlloyDB 클러스터, 인스턴스, 네트워킹을 설정하는 방법
  • 연동을 준비하기 위해 확장 프로그램을 설정하는 방법
  • BigQuery에서 AlloyDB로 통합을 설정하는 방법
  • 테스트하기

요구사항

  • 브라우저(Chrome, Firefox 등)
  • 결제가 사용 설정된 Google Cloud 프로젝트.
  • SQL에 대한 기본 지식

2. 시작하기 전에

프로젝트 만들기

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
  2. Cloud 프로젝트에 결제가 사용 설정되어 있어야 하므로 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
  1. Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다. Google Cloud 콘솔 상단에서 Cloud Shell 활성화를 클릭합니다.

Cloud Shell 활성화 버튼 이미지

  1. Cloud Shell에 연결되면 다음 명령어를 사용하여 이미 인증되었는지, 프로젝트가 프로젝트 ID로 설정되었는지 확인합니다.
gcloud auth list
  1. Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project
  1. 인증을 원하는 경우
gcloud auth login
  1. 프로젝트가 설정되지 않은 경우 다음 명령어를 사용하여 설정합니다.
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project <YOUR_PROJECT_ID>
  1. 필요한 API 사용 설정: 다음 명령어를 실행하여 필요한 모든 API를 사용 설정합니다.
gcloud services enable alloydb.googleapis.com

주의사항 및 문제 해결

'유령 프로젝트' 증후군

gcloud config set project를 실행했지만 Console UI에서 다른 프로젝트를 보고 있습니다. 왼쪽 상단의 드롭다운에서 프로젝트 ID를 확인하세요.

결제 바리케이드

프로젝트를 사용 설정했지만 결제 계정을 잊었습니다. AlloyDB는 고성능 엔진이므로 '연료 탱크' (결제)가 비어 있으면 시작되지 않습니다.

API 전파 지연

'API 사용 설정'을 클릭했지만 명령줄에 여전히 Service Not Enabled라고 표시됩니다. 60초 동안 기다립니다. 클라우드에서 뉴런을 활성화하는 데 시간이 걸립니다.

할당량 질문

새 체험판 계정을 사용하는 경우 AlloyDB 인스턴스의 리전별 할당량에 도달할 수 있습니다. us-central1가 실패하면 us-east1를 시도하세요.

3. 1부 데이터의 간단한 요약

이 섹션에서는 비정형 PDF에서 추출한 구조화된 데이터를 BigQuery에서 사용할 수 있는지 확인해야 합니다. 파트 1을 놓쳤거나 결제 계정이 없어도 괜찮습니다. 다음 단계를 완료하고 시작하면 됩니다.

개인 Gmail 계정에서 Google Cloud 콘솔로 이동하여 콘솔의 오른쪽 상단에 있는 Cloud Shell 활성화 버튼을 클릭합니다.

91567e2f55467574.png

그런 다음 아래의 결제 계정이 없는 경우 섹션의 단계를 따르세요.

이제 BigQuery에 데이터가 있으므로 다음 단계로 이동합니다.

4. AlloyDB 클러스터, 인스턴스, 네트워크 설정

AlloyDB 클러스터, 인스턴스 및 기타 종속 항목을 설정하는 데 도움이 되는 웹 기반 빠른 시작 애플리케이션이 있습니다. 이 실습의 2~4단계를 따라 버튼 클릭으로 설정할 수 있습니다.

https://codelabs.developers.google.com/quick-alloydb-setup

클러스터가 생성되면 클러스터 개요 페이지로 이동하여 서비스 계정 세부정보를 복사합니다.

7cd9d04e06c826d8.png

5. 권한 설정

이 서비스 계정에 BigQuery 권한 부여

  1. IAM 및 관리자 > IAM으로 이동합니다.
  2. 액세스 권한 부여를 클릭합니다.
  3. AlloyDB 서비스 계정 주소를 새 주 구성원 필드에 붙여넣습니다.
  4. 다음 역할을 할당합니다.
  • BigQuery 데이터 뷰어 (roles/bigquery.dataViewer): 데이터를 읽을 수 있습니다.
  • BigQuery 사용자 (roles/bigquery.user): 쿼리를 실행할 수 있습니다.
  • (선택사항이지만 권장됨) BigQuery 읽기 세션 사용자 (roles/bigquery.readSessionUser): Storage Read API를 통해 대규모 데이터 세트 읽기를 최적화합니다.

6. AlloyDB에 연결하고 BigQuery 확장 프로그램 사용 설정

이제 새로 만든 AlloyDB 인스턴스에 연결하여 페더레이션 확장 프로그램을 구성합니다. 이를 위해 AlloyDB Studio를 사용합니다.

  1. 클러스터 개요 페이지 (AlloyDB 콘솔)에서 AlloyDB Studio를 클릭합니다.

1dd78902dc2b4f39.png

  1. AlloyDB 빠른 설정 단계에서 구성한 데이터베이스, 사용자 이름, 비밀번호로 연결합니다.
  2. 연결되면 오른쪽의 쿼리 편집기 탭에서 다음 문을 입력하고 하나씩 실행합니다.
CREATE EXTENSION IF NOT EXISTS  bigquery_fdw;

CREATE SERVER bigquery_server FOREIGN DATA WRAPPER bigquery_fdw;

CREATE USER MAPPING FOR postgres SERVER bigquery_server;
  1. 작업이 완료되면 왼쪽의 탐색기 창으로 이동하여 BigQuery 테이블로 스크롤합니다.

efe4f8be930824aa.png

  1. 점 3개를 클릭하고 'BigQuery 테이블 연결'을 클릭합니다.
  2. 열리는 BigQuery 테이블 연결 팝업에서 project_id와 AlloyDB 데이터베이스의 데이터를 쿼리할 BigQuery 데이터 세트 이름 (1부에서 생성됨)을 선택합니다.

1cc345197b0fbddf.png

  1. 각 테이블을 하나씩 선택하여 모든 데이터를 AlloyDB에 연결합니다. 이는 AlloyDB에서 지원되는 열 유형인지 확인하기 위한 것입니다.

포인트 앤 클릭 방식이 아닌 SQL을 통해 동일한 작업을 수행하려면 다음 단계를 따르세요.

CREATE FOREIGN TABLE <<TABLE_NAME>> (
      "cas_number" VARCHAR, "ingredient_name" VARCHAR, "max_moisture_percentage" DOUBLE PRECISION, "ph_range" VARCHAR, "purity_percentage" DOUBLE PRECISION, "shelf_life_months" BIGINT, "specific_gravity_range" VARCHAR
    ) SERVER "bigquery_server" OPTIONS (
      project '<<PROJECT_ID>>',
      dataset 'froyo_data',
      table '<<BQ_TABLE_NAME>>'
    );

마법 같은 일입니다.

AlloyDB에서 '외부 테이블'을 만들었습니다. 이러한 테이블은 일반 PostgreSQL 테이블처럼 보이고 작동하지만 데이터를 저장하지는 않습니다. AlloyDB에서 이러한 데이터를 쿼리하면 AlloyDB가 즉시 BigQuery에 쿼리를 전달하고, 결과를 가져와 사용자에게 반환합니다.

7. AlloyDB에서 페더레이션 테스트

트랜잭션 PostgreSQL 데이터베이스에서 대규모 분석 BigQuery 데이터 세트를 직접 쿼리할 수 있는지 확인해 보겠습니다.

AlloyDB Studio에서 'Midnight Swirl'에 어떤 알레르기 유발 물질이 있는지 알아보는 쿼리를 실행해 보겠습니다(1부에서 질문한 것과 동일한 질문이지만 이번에는 AlloyDB에서 질문함).

SELECT
    p.product_name,
    i.ingredient_name,
    a.allergen_name
FROM
    consistsof c
INNER JOIN product p
    ON c.product_id = p.product_id
INNER JOIN ingredient i
    ON c.ingredient_id = i.ingredient_name
LEFT OUTER JOIN containsallergen a
    ON i.ingredient_id = a.ingredient_id
WHERE
    UPPER(p.product_name) LIKE '%MIDNIGHT%SWIRL%'
    AND a.allergen_name IS NOT NULL;

Boom. BigQuery에서와 정확히 동일한 결과가 표시됩니다.

7d0be18295c5dfbd.png

8. 삭제

이 실습을 완료한 후에는 AlloyDB 클러스터와 인스턴스를 삭제해야 합니다.

인스턴스와 함께 클러스터를 정리해야 합니다.

9. 통합 데이터 레이어 구축을 축하합니다

지금까지 달성한 내용을 생각해 보세요.

  1. AlloyDB에서 실행되는 트랜잭션 앱은 동시 사용자 세션을 빠르게 처리할 수 있습니다.
  2. 과도한 분석 데이터나 과거 컨텍스트 (예: 공급업체 세부정보 또는 복잡한 성분 매핑)가 필요한 경우 BigQuery froyo_dataschema를 쿼리합니다.
  3. 제로 ETL 중단된 데이터 파이프라인이 없습니다. 동기화되지 않은 데이터베이스가 없습니다. 한 번 저장 (BQ)하고 필요한 곳에서 계산합니다.

이제 분석 및 트랜잭션 데이터 기반이 견고하고 상호 연결되었으므로 재미있는 부분을 시작할 수 있습니다.

3부에서는 이 아키텍처를 기반으로 Froyo 비즈니스 운영을 실행하는 멀티 에이전트 애플리케이션을 빌드합니다.