BigQuery ClickPipe는 BigQuery의 데이터를 ClickHouse Cloud로 수집할 수 있는 완전관리형의 안정적인 방법을 제공합니다. 비공개 프리뷰에서는 BigQuery 데이터셋을 탐색 및 프로토타이핑용으로 대량 적재할 수 있도록 초기 적재 복제 방식을 지원합니다. CDC는 향후 지원될 예정입니다. 그전까지는 초기 적재가 완료된 후 BigQuery 데이터 내보내기를 ClickHouse Cloud에 지속적으로 동기화하기 위해 Google Cloud Storage ClickPipe를 사용할 것을 권장합니다.
BigQuery ClickPipes는 ClickPipes UI를 통해 수동으로 배포하고 관리할 수 있으며, OpenAPI 및 Terraform을 사용해 프로그래밍 방식으로도 배포하고 관리할 수 있습니다.
기능
초기 적재
BigQuery ClickPipe는 BigQuery 데이터셋에서 선택한 테이블을 한 번의 배치 작업으로 ClickHouse 대상 테이블에 적재합니다. 수집 작업이 완료되면 ClickPipe는 자동으로 중지됩니다. 초기 적재 과정에는 스테이징용으로 사용자 제공 Google Cloud Storage(GCS) 버킷이 필요합니다. 앞으로는 이 중간 버킷을 ClickPipes에서 제공하고 관리할 예정입니다.
CDC (변경 데이터 캡처)
현재 비공개 프리뷰에서는 CDC가 지원되지 않지만, 향후 지원될 예정입니다. 그전까지는 초기 적재가 완료된 후 Google Cloud Storage ClickPipe를 사용해 BigQuery 데이터 내보내기를 ClickHouse Cloud에 지속적으로 동기화하는 것을 권장합니다.
데이터 타입 매핑
| BigQuery 데이터 타입 | ClickHouse 데이터 타입 | 세부 정보 |
|---|---|---|
BOOL |
Bool |
|
INT64 |
Int64 |
|
FLOAT64 |
Float64 |
|
NUMERIC |
Decimal(P, S) |
정밀도는 최대 38, scale은 최대 9입니다. 정밀도와 scale이 유지됩니다. |
BIGNUMERIC |
Decimal(P, S) |
정밀도는 최대 76, scale은 최대 38입니다. 정밀도와 scale이 유지됩니다. |
STRING |
String |
|
BYTES |
String |
|
JSON |
String (JSON) |
|
DATE |
Date |
|
TIME |
String |
마이크로초 정밀도입니다. |
DATETIME |
DateTime |
마이크로초 정밀도입니다. |
TIMESTAMP |
DateTime64(6) |
마이크로초 정밀도입니다. |
GEOGRAPHY |
String |
|
GEOMETRY |
String |
|
UUID |
String |
|
ARRAY<T> |
Array(T) |
|
ARRAY<DATE> |
Array(Date) |
|
STRUCT (RECORD) |
String |
접근 제어
인증
서비스 계정 자격 증명
ClickPipes는 서비스 계정 키를 사용해 Google Cloud 프로젝트에 인증합니다. ClickPipes가 BigQuery에서 데이터를 내보내고, 이를 스테이징 GCS 버킷에 적재한 뒤 ClickHouse에서 읽을 수 있도록, 필요한 최소한의 권한만 부여된 전용 서비스 계정을 생성하는 것을 권장합니다.

권한
BigQuery
서비스 계정에는 다음 BigQuery 역할이 있어야 합니다.
액세스 범위를 더 구체적으로 제한하려면 IAM 조건을 사용해 해당 역할이 액세스할 수 있는 리소스를 제한하는 것을 권장합니다. 예를 들어, dataViewer 역할을 동기화하려는 테이블이 포함된 특정 데이터셋으로 제한할 수 있습니다.
resource.name.startsWith("projects/<PROJECT_ID>/datasets/<DATASET_NAME>")Cloud Storage
서비스 계정에는 다음 Cloud Storage 역할이 있어야 합니다.
액세스 범위를 더 세분화하려면 역할이 접근할 수 있는 리소스를 제한하는 IAM 조건을 사용하는 것이 좋습니다. 예를 들어 objectAdmin 및 bucketViewer 역할을 ClickPipes 동기화용으로 생성된 전용 버킷에만 적용되도록 제한할 수 있습니다.
resource.name.startsWith("projects/_/buckets/<BUCKET_NAME>")