데이터의 품질 프로파일링 및 보장

코드로서의 정책 데이터 품질 워크플로를 빌드합니다. 이 튜토리얼에서는 선언적 버전 관리 파일에서 데이터 품질 기대치를 정의하여 수동 UI 기반 프로세스를 넘어가는 방법을 다룹니다.

AI가 초기 규칙을 초안으로 작성하고 사용자가 이를 검토, 수정, 검증하는 Human-in-the-Loop 접근 방식을 사용하면 프로필 통계를 데이터 품질 프레임워크로 빠르게 변환할 수 있습니다.

목표

  • 구체화된 뷰를 사용하여 중첩된 BigQuery 데이터를 평면화하여 Knowledge Catalog 프로파일링을 사용 설정합니다.
  • Python 클라이언트 라이브러리를 사용하여 Knowledge Catalog 프로필 스캔을 실행합니다.
  • Gemini CLI를 사용하여 프로필 통계를 기반으로 데이터 품질 규칙을 생성합니다.
  • 인간 참여형 검토 프로세스를 사용하여 AI 생성 규칙을 Knowledge Catalog 품질 스캔으로 검증하고 배포합니다.

시작하기 전에

시작하기 전에 결제가 사용 설정된 Google Cloud 프로젝트가 있어야 합니다.

개발 환경 준비

다음 단계에서는 클라우드에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다.

  1. Google Cloud 콘솔의 오른쪽 상단 툴바에서 Cloud Shell 활성화를 클릭합니다. 환경을 프로비저닝하고 연결하는 데 몇 분 정도 걸립니다.

  2. Cloud Shell에서 프로젝트 ID와 환경 변수를 설정합니다.

    export PROJECT_ID=$(gcloud config get-value project)
    gcloud config set project $PROJECT_ID
    export LOCATION="us-central1"
    export BQ_LOCATION="us"
    export DATASET_ID="dataplex_dq_codelab"
    export TABLE_ID="ga4_transactions"
    

    공개 샘플 데이터도 us (멀티 리전)에 있으므로 위치로 us (멀티 리전)를 사용합니다. BigQuery 쿼리의 경우 소스 데이터와 대상 테이블이 동일한 위치에 있어야 합니다.

  3. 필수 서비스를 사용 설정합니다.

    gcloud services enable dataplex.googleapis.com \
                           bigquery.googleapis.com \
                           serviceusage.googleapis.com
    
  4. 샘플 데이터와 결과를 저장할 BigQuery 데이터 세트를 만듭니다.

    bq --location=us mk --dataset $PROJECT_ID:$DATASET_ID
    
  5. Google Merchandise Store의 공개 전자상거래 데이터 세트에서 가져온 샘플 데이터를 준비합니다.

    다음 bq 명령어는 dataplex_dq_codelab 데이터 세트에 새 테이블 ga4_transactions를 만듭니다. 스캔이 빠르게 실행되도록 하루 (2021-01-31)의 데이터만 복사합니다.

    bq query \
    --use_legacy_sql=false \
    --destination_table=$PROJECT_ID:$DATASET_ID.$TABLE_ID \
    --replace=true \
    'SELECT * FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20210131`'
    
  6. 이 튜토리얼의 폴더 구조와 지원 파일이 포함된 GitHub 저장소를 클론합니다.

    # Perform a shallow clone to get only the latest repository structure without the full history
    git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/devrel-demos.git
    cd devrel-demos
    
    # Specify and download only the folder we need for this lab
    git sparse-checkout set data-analytics/programmatic-dq
    cd data-analytics/programmatic-dq
    

    이 디렉터리가 활성 작업 영역입니다.

프로필 중첩 데이터

데이터 프로파일링을 사용하면 Knowledge Catalog에서 데이터의 null 비율, 고유성, 값 분포와 같은 최상위 열의 통계를 찾아 데이터를 이해할 수 있습니다.

중첩된 필드의 통계를 가져오려면 구체화된 뷰 집합을 사용하여 데이터를 평면화하면 됩니다. 이렇게 하면 각 중첩 필드가 Knowledge Catalog에서 프로필을 작성할 수 있는 최상위 열로 변환됩니다.

중첩된 스키마 가져오기

모든 중첩 구조를 포함한 소스 테이블의 전체 스키마를 가져와 출력을 JSON 파일로 저장합니다.

bq show --schema --format=json $PROJECT_ID:$DATASET_ID.$TABLE_ID > bq_schema.json

스키마 보기:

jq < bq_schema.json

bq_schema.json 파일은 복잡한 구조를 보여줍니다.

구체화된 뷰로 데이터 평면화

중첩된 데이터를 평면화할 때는 동일한 뷰에서 독립적인 여러 배열을 중첩 해제하지 않는 것이 중요합니다. 이렇게 하면 배열 간에 암시적 교차 조인 (카티전 프로덕트)이 실행되어 행이 잘못 곱해지고 데이터가 손상됩니다.

대신 특정 용도로 각각 빌드된 여러 보기를 만드는 것이 좋습니다. 각 뷰는 명확한 세부정보 수준을 하나만 유지해야 합니다. 이 단계에서는 다음 구체화된 뷰를 만듭니다.

  • 세션 플랫 보기 (mv_ga4_user_session_flat.sql): 이벤트당 하나의 행입니다.
  • 트랜잭션 보기 (mv_ga4_ecommerce_transactions.sql): 트랜잭션당 하나의 행입니다.
  • 상품 보기 (mv_ga4_ecommerce_items.sql): 상품당 하나의 행

프로젝트 저장소는 이러한 뷰를 정의하는 devrel-demos/data-analytics/programmatic-dq 디렉터리에 세 개의 SQL 파일을 제공합니다.

다음 BigQuery 명령어를 사용하여 Cloud Shell에서 이러한 파일을 실행합니다.

envsubst < mv_ga4_user_session_flat.sql | bq query --use_legacy_sql=false
envsubst < mv_ga4_ecommerce_transactions.sql | bq query --use_legacy_sql=false
envsubst < mv_ga4_ecommerce_items.sql | bq query --use_legacy_sql=false

Python 클라이언트로 프로필 검사 실행

이제 각 구체화된 뷰에 대해 Knowledge Catalog 데이터 프로필 스캔을 만들고 실행할 수 있습니다. 다음 Python 스크립트는 google-cloud-dataplex 클라이언트 라이브러리를 사용하여 이 프로세스를 자동화합니다.

스크립트를 실행하기 전에 프로젝트 디렉터리에 격리된 Python 가상 환경을 만드세요.

# Create the virtual environment
python3 -m venv dq_venv

# Activate the environment
source dq_venv/bin/activate

가상 환경 내에 Knowledge Catalog 클라이언트 라이브러리를 설치합니다.

# Install the Dataplex client library
pip install google-cloud-dataplex

환경을 설정하고 라이브러리를 설치했으므로 이제 1_run_dataplex_scans.py 스크립트를 사용할 수 있습니다. 이 스크립트는 각 구체화된 뷰에 대한 스캔을 만들어 실행하여 세 개의 구체화된 뷰를 프로파일링합니다. 완료되면 다음 단계에서 AI 기반 데이터 품질 규칙을 생성하는 데 사용하는 풍부한 통계 요약이 출력됩니다.

Cloud Shell 터미널에서 스크립트를 실행합니다.

python3 1_run_dataplex_scans.py

프로필 스캔 확인하기

Google Cloud 콘솔에서 새 프로필 스캔을 확인할 수 있습니다.

  1. 탐색 메뉴에서 Knowledge Catalog로 이동하고 관리 섹션에서 데이터 프로파일링 및 품질을 선택합니다.
  2. 최신 작업 상태와 함께 나열된 세 개의 프로필 스캔을 확인합니다. 스캔을 클릭하여 자세한 결과를 살펴봅니다.

프로필 결과를 JSON으로 내보내기

Gemini가 프로필 스캔을 읽으려면 콘텐츠를 로컬 파일로 추출해야 합니다.

2_dq_profile_save.py 스크립트를 사용하여 mv_ga4_user_session_flat 뷰의 최신 성공 스캔을 찾고, 프로필 데이터를 다운로드하여 dq_profile_results.json라는 파일에 저장합니다.

python3 2_dq_profile_save.py

스크립트가 완료되면 디렉터리에 dq_profile_results.json 파일이 생성됩니다. 이 파일에는 데이터 품질 규칙을 생성하는 데 필요한 자세한 통계 메타데이터가 포함되어 있습니다. 다음 명령어를 실행하여 콘텐츠를 확인합니다.

cat dq_profile_results.json

Gemini CLI로 데이터 품질 규칙 생성

이제 Gemini CLI를 사용하여 로컬 프로필 스캔 결과를 읽을 수 있습니다.

복잡한 데이터 세트에 대한 데이터 품질 규칙을 수동으로 작성하는 것은 시간이 오래 걸리고 오류가 발생하기 쉽습니다. 생성형 AI는 몇 초 만에 포괄적인 초기 데이터 품질 구성을 생성하여 이 워크플로를 가속화합니다. 이를 통해 수동 작업 실행에서 높은 수준의 감독으로 전환할 수 있습니다.

Gemini CLI를 시작하려면 다음 명령어를 사용하세요.

gemini

이제 품질 규칙을 생성할 준비가 되었습니다. CLI는 현재 디렉터리의 파일을 읽을 수 있으므로 새 프로필 스캔 데이터를 직접 사용할 수 있습니다.

Gemini에 계획을 만들어 달라고 요청하기

Gemini에게 전문가 분석가 역할을 맡아 데이터 품질 규칙을 만드는 계획을 제안해 달라고 요청합니다. Gemini가 분석에 집중할 수 있도록 아직 YAML 파일을 작성하지 말라고 요청합니다. Gemini가 JSON 파일을 분석하고 구조화된 계획을 반환합니다.

You are an expert Google Cloud Dataplex engineer.
Your first task is to create a plan. I have a file in the current directory named ./dq_profile_results.json.
Based on the statistical data within that file, propose a step-by-step plan to create a Dataplex data quality rules file.
Your plan should identify which specific columns are good candidates for rules like nonNullExpectation, setExpectation, or rangeExpectation, and explain why based on the metrics (for example, "Plan to create a nonNullExpectation for column X because its null percentage is 0%").
Do not write the YAML file yet. Just provide the plan.

데이터 품질 규칙 생성

Gemini의 계획은 전적으로 통계적 패턴에 의존하며 특정 비즈니스 지식이 부족합니다.

계획을 검토하고 다음과 같은 질문을 해 보세요.

  • 비즈니스 목표 및 컨텍스트와 일치하나요?
  • 통계적으로 타당한 규칙이 실제로 비실용적인가요 (예: 증가하는 테이블의 엄격한 rowCount)?

Gemini로 계획을 다듬거나 다음 예시 프롬프트를 사용하여 있는 그대로 승인합니다. 프롬프트는 먼저 몇 가지 의견을 제공한 다음, Gemini에게 작업 디렉터리에 dq_rules.yaml 파일을 생성하고 Knowledge Catalog에는 정확한 YAML 구조가 필요하므로 DataQualityRule 사양을 준수하도록 지시합니다. 이렇게 하면 구문 오류나 오래된 스키마 버전의 사용을 방지할 수 있습니다.


- "The plan looks good. Please proceed."
- "The rowCount rule is not necessary, as the table size changes daily. The rest of the plan is approved. Please proceed."
- "For the setExpectation on the geo_continent column, please also include 'Antarctica'."

Once you have incorporated my feedback, please generate the `dq_rules.yaml` file.

You must adhere to the following strict requirements:

- Schema Compliance: The YAML structure must strictly conform to the DataQualityRule specification. For a definitive source of truth, you must refer to the sample_rule.yaml file in the current directory and the DataQualityRule class definition. Search for the `data_quality.py` file inside the `./dq_venv/lib/` directory to read this class definition.

- Data-Driven Values: All rule parameters, such as thresholds or expected values, must be derived directly from the statistical metrics in dq_profile_results.json.

- Rule Justification: For each rule, add a comment (#) on the line above explaining the justification, as you outlined in your plan.

- Output Purity: The final output must only be the raw YAML code block, perfectly formatted and ready for immediate deployment.

데이터 품질 스캔 만들기 및 실행

이제 스캔으로 등록하고 배포할 수 있는 에이전트 생성 데이터 품질 규칙 세트가 있습니다.

  1. /quit를 입력하거나 Ctrl+C를 두 번 눌러 Gemini CLI를 종료합니다.

  2. 그런 다음 Knowledge Catalog에서 데이터 스캔을 만듭니다.

    export DQ_SCAN="dq-scan"
    gcloud dataplex datascans create data-quality $DQ_SCAN \
        --project=$PROJECT_ID \
        --location=$LOCATION \
        --data-quality-spec-file=dq_rules.yaml \
        --data-source-resource="//bigquery.googleapis.com/projects/$PROJECT_ID/datasets/$DATASET_ID/tables/mv_ga4_user_session_flat"
    
  3. 마지막으로 스캔을 실행합니다.

    gcloud dataplex datascans run $DQ_SCAN --location=$LOCATION --project=$PROJECT_ID
    

    이 명령어는 이름이 dq-scan인 데이터 품질 스캔을 만듭니다.

  4. Google Cloud 콘솔의 Knowledge Catalog 섹션에서 스캔 진행 상황을 확인합니다.

    1. 탐색 메뉴에서 Knowledge Catalog로 이동하고 관리 섹션에서 데이터 프로파일링 및 품질을 선택합니다.
    2. dq-scan를 찾습니다. 스캔이 완료되면 스캔을 클릭하여 결과를 확인합니다.

삭제

이 튜토리얼에서 만든 리소스에 대한 정기 결제 요금이 발생하지 않도록 하려면 리소스를 삭제합니다.

Knowledge Catalog 스캔 삭제

이 Codelab의 특정 스캔 이름을 사용하여 프로필과 품질 스캔을 삭제합니다.

# Delete the Data Quality Scan
gcloud dataplex datascans delete dq-scan \
    --location=us-central1 \
    --project=$PROJECT_ID --quiet

# Delete the Data Profile Scans
gcloud dataplex datascans delete profile-scan-mv-ga4-user-session-flat \
    --location=us-central1 \
    --project=$PROJECT_ID --quiet

gcloud dataplex datascans delete profile-scan-mv-ga4-ecommerce-transactions \
    --location=us-central1 \
    --project=$PROJECT_ID --quiet

gcloud dataplex datascans delete profile-scan-mv-ga4-ecommerce-items \
    --location=us-central1 \
    --project=$PROJECT_ID --quiet

샘플 데이터 세트 삭제

임시 BigQuery 데이터 세트와 테이블을 삭제합니다.

bq rm -r -f --dataset $PROJECT_ID:dataplex_dq_codelab

로컬 파일 삭제

Python 가상 환경을 비활성화하고 클론된 저장소와 콘텐츠를 삭제합니다.

deactivate
cd ../../..
rm -rf devrel-demos

결론

축하합니다. 엔드 투 엔드 프로그래매틱 데이터 거버넌스 워크플로를 빌드했습니다.

Gemini를 Knowledge Catalog와 페어링하여 AI 지원 거버넌스를 위한 기반을 구축했습니다. 이 접근 방식은 거버넌스 루프를 대체하지는 않지만 규칙 생성 프로세스를 가속화하므로 비즈니스 로직에 따라 규칙을 검증하고 개선하는 데 집중할 수 있습니다.

다음 단계