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

1. 개요

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

빠른 회상을 위해 1부 실습에서는 가상의 냉동 요구르트 프랜차이즈의 사용 사례를 가져와 텍스트, 테이블, 이미지를 포함하는 400개의 구조화되지 않은 PDF 파일을 BigQuery Knowledge Catalog 및 Dataplex를 사용하여 관계가 자동으로 추론되는 깔끔하게 구조화된 BigQuery 테이블로 변환했습니다.

빌드할 항목

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

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

'데이터가 이미 BigQuery에 있는데 왜 AlloyDB를 추가해야 할까요? 애플리케이션이 BigQuery에 대해 직접 SELECT 문을 실행하지 않는 이유는 무엇일까요?'

이유는 다음과 같습니다.

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

AlloyDB를 트랜잭션 데이터베이스로 사용할 수 있으며 대량의 데이터를 BigQuery 또는 BigLake에 저장할 수 있습니다. 애플리케이션은 일반적으로 이러한 두 시스템과 독립적으로 통합되어 이러한 다양한 Google Cloud 서비스에서 데이터에 액세스합니다. AlloyDB용 Lakehouse Federation 을 사용하면 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를 실행했지만 콘솔 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

그런 다음 아래의 결제 계정이 없는 섹션의 단계를 따릅니다.

결제 계정 없이 데이터를 계속 경험하는 단계는 다음과 같습니다.

  1. 위의 GitHub 저장소 링크에서 데이터 csv 파일 (BigQuery 데이터)을 가져올 수 있습니다.
  2. 먼저 Cloud Shell 터미널에서 아래 명령어를 실행하여 BigQuery 데이터 세트를 만듭니다.
bq mk --location us-central1 --dataset froyo_data
  1. 다음으로 다음 명령어를 하나씩 실행하여 GitHub 저장소에서 작업 디렉터리로 8개의 데이터 파일 (csv 파일)을 다운로드합니다.
wget https://raw.githubusercontent.com/AbiramiSukumaran/raw-data-to-gold/refs/heads/main/data/froyo_data.allergen.csv
wget https://raw.githubusercontent.com/AbiramiSukumaran/raw-data-to-gold/refs/heads/main/data/froyo_data.consistsof.csv
wget https://raw.githubusercontent.com/AbiramiSukumaran/raw-data-to-gold/refs/heads/main/data/froyo_data.containsallergen.csv
wget https://raw.githubusercontent.com/AbiramiSukumaran/raw-data-to-gold/refs/heads/main/data/froyo_data.froyo_data_materialized.csv
wget https://raw.githubusercontent.com/AbiramiSukumaran/raw-data-to-gold/refs/heads/main/data/froyo_data.ingredient.csv
wget https://raw.githubusercontent.com/AbiramiSukumaran/raw-data-to-gold/refs/heads/main/data/froyo_data.product.csv
wget https://raw.githubusercontent.com/AbiramiSukumaran/raw-data-to-gold/refs/heads/main/data/froyo_data.suppliedby.csv
wget https://raw.githubusercontent.com/AbiramiSukumaran/raw-data-to-gold/refs/heads/main/data/froyo_data.supplier.csv
  1. 다음 명령어를 하나씩 실행하여 새로 만든 데이터 세트의 데이터로 이러한 테이블을 만듭니다.
bq load --autodetect --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines --quote="" froyo_data.allergen ./froyo_data.allergen.csv allergen_name:STRING
bq load --autodetect --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines --quote="" froyo_data.consistsof ./froyo_data.consistsof.csv product_id:STRING,ingredient_id:STRING
bq load --autodetect --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines --quote="" froyo_data.containsallergen ./froyo_data.containsallergen.csv ingredient_id:STRING,allergen_name:STRING
bq load --autodetect --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines --quote="" froyo_data.froyo_data_materialized ./froyo_data.froyo_data_materialized.csv allergen:STRING,containsallergen:STRING,ingredient:STRING,product:STRING,suppliedby:STRING,supplier:STRING,ref:STRING,md5_hash:STRING
bq load --autodetect --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines --quote="" froyo_data.ingredient ./froyo_data.ingredient.csv ingredient_id:STRING,ingredient_name:STRING,purity:STRING,moisture_content:STRING,ph_range:STRING,specific_gravity_range:STRING
bq load --autodetect --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines --quote="" froyo_data.product ./froyo_data.product.csv product_id:STRING,product_name:STRING,category:STRING,stability:STRING
bq load --autodetect --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines --quote="" froyo_data.suppliedby ./froyo_data.suppliedby.csv ingredient_id:STRING,supplier_id:STRING
bq load --autodetect --source_format=CSV --skip_leading_rows=1 --allow_quoted_newlines --quote="" froyo_data.supplier ./froyo_data.supplier.csv supplier_id:STRING,supplier_name:STRING,production_site_id:STRING,facility_grade:STRING

이제 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 콘솔)에서 기본 인스턴스의 "기본 수정"을 클릭하고 아래로 스크롤하여 "고급 구성 옵션"으로 이동합니다.
  2. '플래그' 섹션으로 이동하여 아래와 같이 2개의 플래그를 '사용'으로 설정합니다.

197c2b667d1e53e8.png 3. 인스턴스 업데이트 버튼을 클릭하면 업데이트를 완료하는 데 몇 분 정도 걸립니다. 4. 클러스터 개요 페이지 (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 테이블 연결 팝업에서 AlloyDB 데이터베이스에서 데이터를 쿼리하려는 project_id와 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가 즉시 쿼리를 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;

짜잔. BigQuery에서와 동일한 결과가 표시됩니다.

7d0be18295c5dfbd.png

8. 정리

이 실습이 완료되면 AlloyDB 클러스터와 인스턴스를 삭제하는 것을 잊지 마세요.

클러스터와 인스턴스가 정리됩니다.

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

지금까지 수행한 작업을 생각해 보세요.

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

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

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