Cloud Storage Avro to Spanner Data Validation 템플릿은 Cloud Storage와 Spanner에서 데이터를 읽고 이를 비교하여 이전의 정확성을 검증하는 일괄 파이프라인입니다.
파이프라인 요구사항
- 파이프라인을 실행하기 전에 Avro 파일의 Cloud Storage 디렉터리가 있어야 합니다.
gcsOutputDirectory매개변수를 사용하여 SourceDB to Cloud Spanner 파이프라인을 실행하여 이러한 Avro 파일을 생성합니다. - 검증 결과를 위한 대상 BigQuery 데이터 세트는 파이프라인을 실행하기 전에 있어야 합니다.
- 파이프라인을 실행하기 전에 Spanner 테이블이 있어야 합니다.
- Spanner 테이블에 호환 가능한 스키마가 있어야 합니다 (직접 또는 스키마 매핑을 통해).
- SourceDB to Cloud Spanner 파이프라인에서 실행한 마이그레이션을 검증하려면 공유 구성 (예:
sessionFilePath,schemaOverridesFilePath,transformationJarPath)에 동일한 값을 전달해야 합니다.
템플릿 매개변수
필수 매개변수
- gcsInputDirectory: 이 디렉터리는 소스에서 읽은 레코드의 AVRO 파일을 읽는 데 사용됩니다. 예를 들면
gs://your-bucket/your-path입니다. - projectId: Cloud Spanner 프로젝트의 이름입니다.
- instanceId: 대상 Cloud Spanner 인스턴스입니다.
- databaseId: 대상 Cloud Spanner 데이터베이스입니다.
- bigQueryDataset: 검증 결과가 저장될 BigQuery 데이터 세트 ID입니다. 예를 들면
validation_report_dataset입니다.
선택적 파라미터
- spannerHost: 템플릿에서 호출할 Cloud Spanner 엔드포인트입니다. 예를 들면
https://batch-spanner.googleapis.com입니다. 기본값은 https://batch-spanner.googleapis.com입니다. - spannerPriority: Cloud Spanner 호출의 요청 우선순위입니다. 값은 [
HIGH,MEDIUM,LOW] 중 하나여야 합니다. 기본값은HIGH입니다. - sessionFilePath: Spanner 마이그레이션 도구의 매핑 정보가 포함된 Cloud Storage의 세션 파일 경로입니다. 기본값은 빈 값입니다.
- schemaOverridesFilePath: 소스에서 Spanner로 테이블 및 열 이름 재정의를 지정하는 파일입니다. 기본값은 빈 값입니다.
- tableOverrides: 소스에서 Spanner로의 테이블 이름 재정의입니다. 다음 형식으로 작성됩니다. [{SourceTableName1, SpannerTableName1}, {SourceTableName2, SpannerTableName2}] 이 예에서는 Singers 테이블을 Vocalists에, Albums 테이블을 레코드에 매핑하는 것을 보여줍니다. 예를 들면
[{Singers, Vocalists}, {Albums, Records}]입니다. 기본값은 빈 값입니다. - columnOverrides: 소스에서 Spanner로의 열 이름 재정의입니다. 다음 형식으로 작성됩니다. [{SourceTableName1.SourceColumnName1, SourceTableName1.SpannerColumnName1}, {SourceTableName2.SourceColumnName1, SourceTableName2.SpannerColumnName1}] SourceTableName은 소스 및 spanner 쌍에서 동일하게 유지되어야 합니다. 테이블 이름을 재정의하려면 tableOverrides를 사용합니다. 이 예시에서는 Singers 및 Albums 테이블에서 SingerName을 TalentName에, AlbumName을 RecordName에 각각 매핑하는 것을 보여줍니다. 예를 들면
[{Singers.SingerName, Singers.TalentName}, {Albums.AlbumName, Albums.RecordName}]입니다. 기본값은 빈 값입니다. - runId: 유효성 검사 실행의 고유 식별자입니다. 제공되지 않으면 Dataflow 작업 이름이 사용됩니다. 예를 들면
run_20230101_120000입니다. - transformationJarPath: 레코드를 처리하기 위한 맞춤 변환 로직이 포함된 Cloud Storage의 맞춤 jar 위치입니다. 기본값은 빈 값입니다.
- transformationClassName: 커스텀 변환 로직이 있는 정규화된 클래스 이름입니다. transformationJarPath가 지정된 경우 필수 필드입니다. 기본값은 빈 값입니다.
- transformationCustomParameters: 커스텀 변환 클래스에 전달할 커스텀 매개변수가 포함된 문자열입니다. 기본값은 빈 값입니다.
- tables: 검증 실행에 포함할 소스 테이블의 쉼표로 구분된 목록입니다. 기본값은 빈 값입니다.
- tableConfigurationFilePath: 유효성을 검사할 소스 테이블의 JSON 목록이 포함된 GCS 파일 경로입니다. 구조가
{"tableNames": ["table1", "table2"]}인 JSON 파일이어야 합니다. 선택적으로optionalConfigurations.<sourceTable>.spannerQuery는 테이블을 읽는 데 사용되는 Spanner 쿼리를 설정합니다(예: 선택된shardIds로 제한). Spanner 이름으로 Spanner 전용 테이블에 키를 지정합니다. 쿼리 규칙은 모듈 README.md의 '샤드 하위 집합 검증' 섹션을 참고하세요. 기본값은 빈 값입니다. - shardIds: 논리적 샤드 ID의 쉼표로 구분된 목록입니다 (sourcedb-to-spanner 템플릿에서 사용되는 ID로, Avro 출력에서
<table>/<shardId>/디렉터리로 표시됨). 설정되면 해당 샤드만 검증됩니다. 세션 파일ShardIdColumn이 있는 테이블은 해당 열에서 필터링됩니다. 범위 내의 다른 모든 테이블에는tableConfigurationFilePath에spannerQuery이 있어야 합니다. 그렇지 않으면 작업이 실패합니다. 예를 들면shard_001,shard_007입니다. 기본값은 빈 값입니다.
템플릿 실행
콘솔
- Dataflow 템플릿에서 작업 만들기 페이지로 이동합니다. 템플릿에서 작업 만들기로 이동
- 작업 이름 필드에 고유한 작업 이름을 입력합니다.
- (선택사항) 리전 엔드포인트의 드롭다운 메뉴에서 값을 선택합니다. 기본 리전은
us-central1입니다.Dataflow 작업을 실행할 수 있는 리전 목록은 Dataflow 위치를 참조하세요.
- Dataflow 템플릿 드롭다운 메뉴에서 Cloud Storage Avro files to Spanner Data Validation 템플릿을 선택합니다.
- 제공된 파라미터 필드에 파라미터 값을 입력합니다.
- 작업 실행을 클릭합니다.
gcloud CLI
셸 또는 터미널에서 템플릿을 실행합니다.
gcloud dataflow flex-template run JOB_NAME \ --template-file-gcs-location=gs://dataflow-templates/VERSION/flex/Avro_to_Spanner_Data_Validator \ --region=REGION_NAME \ --parameters \ gcsInputDirectory=PATH_TO_AVRO_FILES,\ projectId=PROJECT_ID,\ instanceId=INSTANCE_ID,\ databaseId=DATABASE_ID,\ bigQueryDataset=BIGQUERY_DATASET
다음을 바꿉니다.
JOB_NAME: 선택한 고유한 작업 이름VERSION: 사용할 템플릿 버전다음 값을 사용할 수 있습니다.
latest: 버킷의 날짜가 지정되지 않은 상위 폴더(gs://dataflow-templates/latest/)에서 사용할 수 있는 최신 버전의 템플릿을 사용합니다.- 버전 이름(예:
2023-09-12-00_RC00): 버킷의 날짜가 지정된 해당 상위 폴더(gs://dataflow-templates/)에 중첩되어 있는 특정 버전의 템플릿을 사용합니다.
REGION_NAME: Dataflow 작업을 배포할 리전(예:us-central1)PATH_TO_AVRO_FILES: Avro 파일의 Cloud Storage 경로입니다.PROJECT_ID: Spanner 프로젝트 ID입니다.INSTANCE_ID: 대상 Spanner 인스턴스 ID입니다.DATABASE_ID: 대상 Spanner 데이터베이스 ID입니다.BIGQUERY_DATASET: 검증 결과의 BigQuery 데이터 세트 ID입니다.
API
REST API를 사용하여 템플릿을 실행하려면 HTTP POST 요청을 전송합니다. API 및 승인 범위에 대한 자세한 내용은 projects.templates.launch를 참조하세요.
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launchParameter": { "jobName": "JOB_NAME", "parameters": { "gcsInputDirectory": "PATH_TO_AVRO_FILES", "projectId": "PROJECT_ID", "instanceId": "INSTANCE_ID", "databaseId": "DATABASE_ID", "bigQueryDataset": "BIGQUERY_DATASET" }, "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/Avro_to_Spanner_Data_Validator" } }
다음을 바꿉니다.
PROJECT_ID: Dataflow 작업을 실행하려는 Google Cloud 프로젝트 IDJOB_NAME: 선택한 고유한 작업 이름VERSION: 사용할 템플릿 버전다음 값을 사용할 수 있습니다.
latest: 버킷의 날짜가 지정되지 않은 상위 폴더(gs://dataflow-templates/latest/)에서 사용할 수 있는 최신 버전의 템플릿을 사용합니다.- 버전 이름(예:
2023-09-12-00_RC00): 버킷의 날짜가 지정된 해당 상위 폴더(gs://dataflow-templates/)에 중첩되어 있는 특정 버전의 템플릿을 사용합니다.
LOCATION: Dataflow 작업을 배포할 리전(예:us-central1)PATH_TO_AVRO_FILES: Avro 파일의 Cloud Storage 경로입니다.PROJECT_ID: Spanner 프로젝트 ID입니다.INSTANCE_ID: 대상 Spanner 인스턴스 ID입니다.DATABASE_ID: 대상 Spanner 데이터베이스 ID입니다.BIGQUERY_DATASET: 검증 결과의 BigQuery 데이터 세트 ID입니다.