Google BigQuery용 Openflow 커넥터 소개
Google BigQuery용 Openflow 커넥터 소개
Snowflake 커넥터는 Snowflake Openflow를 사용할 수 있는 모든 리전에서 지원돼요.
Openflow Snowflake 배포는 AWS, Azure, GCP 상용 리전의 모든 계정에서 사용할 수 있어요.
BYOC 배포의 Snowflake Openflow는 AWS 상용 리전(상용 리전)의 모든 계정에서만 사용할 수 있어요.
참고
이 커넥터는 Snowflake 커넥터 약관의 적용을 받아요.
Google BigQuery용 Openflow 커넥터는 Google BigQuery 프로젝트를 Snowflake에 연결하고 선택한 데이터셋, 테이블, 뷰의 데이터를 일정에 따라 복제해요. 커넥터는 각 테이블에 대해 초기 전체 로드를 수행한 다음 BigQuery의 네이티브 변경 추적 기능을 사용해 증분 업데이트를 수행해요. 뷰는 잘라내기 및 로드(truncate and load) 전략으로 복제돼요.
사용 사례
커넥터는 다음 사용 사례를 지원해요.
- Snowflake로의 복제: downstream 분석·모델링을 위해 BigQuery의 데이터셋을 Snowflake로 지속적으로 미러링해요. 증분 변경은 10분 지연 창으로 일정에 따라 도착해요.
- 선택적 복제: 넓은 커버리지를 제어하면서 이름이나 regex 필터로 포함할 리전, 데이터셋, 테이블, 뷰를 정의해요.
- 마이그레이션 및 변경 캡처: 마이그레이션을 위해 1회성 스냅샷 로드를 수행한 다음 BigQuery의 변경 기록을 사용해 증분 동기화를 실행해 테이블을 동기화 상태로 유지해요.
- 뷰 복제: 구성 가능한 일정에 따라 잘라내기 및 로드 전략으로 표준·구체화된 BigQuery 뷰를 Snowflake로 복제해요.
테이블 복제 수명주기
테이블의 복제 주기는 스키마 발견과 데이터의 초기 스냅샷 로드로 시작해요. 데이터가 Snowflake로 수집된 후에는 증분 동기화로 전환돼요.
- 스키마 검증(Schema Introspection): 커넥터가 소스 테이블의 스키마를 발견하고 데이터 유형을 검증한 다음 Snowflake에 해당 대상 스키마·테이블을 만들어요.
- 스냅샷 로드(Snapshot Load): 스키마와 테이블을 만든 후 커넥터가 BigQuery 테이블의 모든 기존 데이터를 Snowflake로 전체 복사해요. 이 프로세스는 구성에 있는 각 테이블에 대해 순차적으로 실행돼요.
- 증분 동기화(Incremental Sync): 초기 로드가 완료되면 테이블이 예약된 증분 동기화 모드로 전환돼요. 각 실행에서 커넥터는 BigQuery의 CHANGES 함수를 사용해 마지막 동기화 이후 발생한 행 수준 변경(삽입, 업데이트, 삭제)의 저널을 읽어요. 그런 다음 이 변경 사항을 가져와 Snowflake의 대상 테이블에 병합해요.
Openflow 요구 사항
최소 런타임 크기는 Medium이어야 해요. 대용량 데이터를 복제한다면 더 큰 런타임과 멀티 노드 Openflow 설정을 사용하세요.
제한 사항
- BigQuery는 소스 데이터를 가져오는 데 사용되는 데이터 스트림이 최소 6시간 동안 유효함을 보장해요. 따라서 데이터 스트림이 만료되지 않도록 소스 테이블 읽기 프로세스를 6시간 이내에 완료해야 해요. 100GB보다 큰 데이터 볼륨의 테이블을 수집할 때는 더 크고 멀티 노드인 런타임을 사용해야 해요.
- BigQuery의 BIGNUMERIC 유형은 Snowflake의 NUMBER 유형(38자리)보다 더 높은 정밀도(최대 76자리)를 지원해요. 커넥터는 Snowflake 한도를 초과하는 BIGNUMERIC 열의 값을 수집할 수 없어요.
- 커넥터는 외부 테이블 복제를 지원하지 않아요.
- 뷰 복제는 잘라내기 및 로드 전략만 사용해요. 뷰에 대한 증분 동기화(CDC)는 지원되지 않아요.
- 증분 동기화는 업데이트·삭제를 올바르게 처리하려면 기본 키가 필요해요. 기본 키가 없는 테이블의 경우 커넥터는 삭제를 지원하지 않고 업데이트를 새 삽입으로 처리해요.
참고
기본 키 제약 조건이 충족되는지 확인해야 해요. 기본 키로 표시된 필드가 고유하지 않으면 증분 모드에서 데이터 불일치가 발생할 수 있어요.
- 커넥터는 증분 업데이트에 BigQuery의 CHANGES 함수를 사용해요. 이 함수는 테이블 기록의 마지막 10분을 쿼리할 수 없으므로, 증분 모드의 복제 데이터는 소스보다 최소 10분의 지연이 있어요.
- 증분 동기화 프로세스는 BigQuery CHANGES 함수 때문에 최대 24시간 데이터 창으로 제한돼요. 테이블의 복제 지연이 이 기간을 초과하면 커넥터는 동기화를 진행하기 위해 변경 창을 24시간으로 잘라요. 이 잘라내기는 데이터 손실을 초래할 수 있어요.
- 커넥터는 BigQuery CHANGES 함수의 다른 모든 제한 사항을 상속해요. 자세한 내용은 BigQuery CHANGES 함수 문서를 참조하세요.
뷰 복제
커넥터는 BigQuery의 표준 뷰와 구체화된 뷰를 Snowflake로 복제하는 것을 지원해요. 테이블 복제와 달리 뷰는 증분 동기화(CDC)를 지원하지 않아요. 대신 커넥터가 잘라내기 및 로드(truncate and load) 전략을 사용해요: 각 동기화 주기에서 커넥터는 Snowflake 대상 테이블의 데이터를 소스 뷰의 현재 내용으로 완전히 교체해요.
뷰 동기화 빈도는 View Sync Frequency 매개변수를 사용해 테이블 증분 동기화 빈도와 별도로 구성돼요. 실행은 겹치지 않아요. 주기가 구성된 간격보다 오래 걸리면 다음 실행은 이전 실행이 끝날 때까지 기다려요.
Included View Names 및 Included View Names Regex 매개변수를 사용해 복제할 뷰를 필터링할 수 있어요. 이 필터는 복제를 위해 선택된 모든 데이터셋에 적용돼요.
커넥터는 뷰 수집 중에 BigQuery에 임시 테이블을 만들어요. Temporary Table Dataset 매개변수를 사용해 이 임시 테이블용 전용 데이터셋을 지정하세요. Snowflake는 임시 테이블에 별도 데이터셋을 사용하고, 수집된 데이터셋을 이 용도로 사용하지 않는 것을 권장해요.
데이터 유형 매핑
커넥터는 BigQuery 데이터 유형을 해당 Snowflake 데이터 유형에 매핑해요.
| BigQuery 데이터 유형 | Snowflake 데이터 유형 |
|---|---|
| BIGNUMERIC | NUMBER |
| NUMERIC | NUMBER |
| GEOGRAPHY | VARCHAR |
| DATETIME | TIMESTAMP_NTZ |
| JSON | OBJECT |
| STRUCT | OBJECT |
| RANGE | OBJECT |
| INTERVAL | OBJECT |
| TIMESTAMP | TIMESTAMP_NTZ |
| DATE | DATE |
| TIME | TIME |
| INT64 / INTEGER | NUMBER |
| FLOAT64 | FLOAT |
| BOOL / BOOLEAN | BOOLEAN |
| STRING | VARCHAR |
| BYTES | BINARY |
| ARRAY | ARRAY |
Google BigQuery의 데이터 변경 추적
커넥터의 증분 동기화 기능은 BigQuery의 네이티브 CHANGES 함수를 기반으로 해요. 소스 테이블에서 변경 기록을 활성화하면 BigQuery가 모든 행 수준 수정(삽입, 업데이트, 삭제)의 내부 저널을 유지해요.
커넥터는 구성된 증분 동기화 빈도 일정에 따라 이 저널을 쿼리해 변경 피드를 검색해요. 커넥터는 이 변경 사항을 동일한 BigQuery 데이터셋 안의 저널 테이블로 구체화해요. 이 저널 테이블은 일관된 명명 규칙을 따릅니다: <sourceTableName>_<incremental_number>_<hash>_journal
이 저널 테이블은 복제 프로세스 동안 커넥터가 완전히 관리하며, 최종 목적지인 Snowflake 테이블에 데이터를 병합하는 데 사용돼요.
경고
저널 테이블을 어떤 방식으로도 수정하지 마세요. 저널 테이블을 수정하면 동기화 프로세스가 중단되고 데이터 무결성 문제가 발생할 수 있어요.
병합 작업은 기본 키(PK)가 있는 테이블과 없는 테이블의 변경을 다르게 처리해요.
기본 키가 있는 테이블
기본 키가 있는 테이블의 경우 커넥터는 데이터 변경을 다음과 같이 처리해요.
삽입 및 업데이트:
INSERT 또는 UPDATE로 식별된 행은 해당 Snowflake 테이블에 "upsert"돼요.
삭제:
데이터 기록을 보존하기 위해 커넥터는 소프트 삭제 전략을 사용해요. 삭제된 행을 Snowflake에서 물리적으로 제거하는 대신 커넥터는 대상 행에 UPDATE를 수행해 _SNOWFLAKE_DELETED 열을 TRUE로 설정해요.
기본 키가 없는 테이블
기본 키가 없는 테이블의 경우 커넥터는 데이터 변경을 다음과 같이 처리해요.
삽입 및 업데이트:
INSERT 또는 UPDATE로 식별된 행은 동일하게 취급되어 해당 Snowflake 테이블에 삽입돼요.
삭제:
지원되지 않아요.
참고
커넥터는 대상 테이블 스키마를 만들 때 자동으로
_SNOWFLAKE_DELETED(BOOLEAN) 열을 추가해요.
구성된 동기화 빈도 일정과 실제 동기화 빈도
Incremental Sync Frequency 일정이 테이블 동기화 빈도를 결정해요. 지정한 일정이 테이블을 동기화하는 데 실제로 필요한 시간보다 더 빈번하면 시스템은 지정한 일정을 따르지 않아요. 증분 주기는 순차적으로 실행되어야 하고 겹칠 수 없기 때문이에요.
스키마 진화
커넥터는 소스 BigQuery 테이블의 몇 가지 일반적인 스키마 변경을 지원해요. 다음 스키마 변경이 감지되어 Snowflake 대상 테이블로 전파돼요.
열 추가:
BigQuery에서 추가된 새 열은 해당 Snowflake 테이블에 자동으로 추가돼요.
열 삭제(소프트 삭제):
BigQuery에서 열이 삭제되면 커넥터는 Snowflake에서 "소프트 삭제"를 수행해요. 열은 대상 테이블에서 삭제되지 않아요. 대신 열 이름 끝에 _SNOWFLAKE_DELETED 접미사를 추가해 이름이 바뀌어요. 예를 들어 my_column은 my_column_SNOWFLAKE_DELETED가 돼요. 이는 Snowflake의 과거 데이터를 보존해요.
열 이름 변경:
열 이름 변경 작업은 두 단계 프로세스예요.
- 원래 열이 "소프트 삭제"되고
_SNOWFLAKE_DELETED접미사가 추가된 이름으로 바뀌어요. - 새 이름의 새 열이 Snowflake 테이블에 추가돼요.
기본 키 수정:
기본 키 추가, 제거, 변경이 지원돼요.
데이터 유형 변경:
기존 유형을 넓히는 변경만 허용돼요. 열의 유형을 좁히거나 호환되지 않는 유형으로 변환하는 변경은 지원되지 않으며 해당 테이블의 복제를 실패시켜요.
다음 단계
커넥터 설정 방법에 대한 자세한 내용은 다음 항목을 참조하세요.