리소스 구성
조직
BigQuery 프로젝트와 ClickHouse Cloud 서비스 비교
- 컴퓨트 노드 그룹(현재 개발 tier 서비스는 2개의 노드, 프로덕션 tier 서비스는 3개의 노드)입니다. 이러한 노드에 대해 ClickHouse Cloud는 수동 및 자동 방식 모두에서 수직 및 수평 스케일링을 지원합니다.
- 서비스의 모든 데이터를 저장하는 객체 스토리지 폴더.
- endpoint(또는 ClickHouse Cloud UI Console을 통해 생성된 여러 endpoint) - 서비스에 연결할 때 사용하는 서비스 URL(예:
https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443)
BigQuery 데이터셋 vs ClickHouse Cloud 데이터베이스
BigQuery 폴더
BigQuery 슬롯 예약 및 쿼터
권한
데이터 타입
INT64, NUMERIC, BIGNUMERIC, FLOAT64 수치형 타입을 제공합니다. 반면 ClickHouse는 Decimal, Float, Integer에 대해 다양한 정밀도의 타입을 제공합니다. 이러한 데이터 타입을 사용하면 스토리지와 메모리 오버헤드를 최적화할 수 있으므로 쿼리 성능이 향상되고 리소스 활용량도 줄어듭니다. 아래에서는 각 BigQuery 타입에 해당하는 ClickHouse 타입을 매핑합니다.
쿼리 가속 기법
BigQuery에서는 테이블에 프라이머리 키 및 외래 키 제약 조건을 정의할 수 있습니다. 일반적으로 프라이머리 키와 외래 키는 관계형 데이터베이스에서 데이터 무결성을 보장하는 데 사용됩니다. 프라이머리 키 값은 보통 각 행마다 고유하며
NULL이 아닙니다. 각 행의 외래 키 값은 프라이머리 키 테이블의 프라이머리 키 컬럼에 존재하거나 NULL이어야 합니다. BigQuery에서는 이러한 제약 조건이 강제되지는 않지만, 쿼리 최적화기가 이 정보를 활용해 쿼리를 더 효율적으로 최적화할 수 있습니다.
ClickHouse에서도 테이블에 프라이머리 키를 둘 수 있습니다. BigQuery와 마찬가지로 ClickHouse도 테이블의 프라이머리 키 컬럼 값에 대한 고유성을 강제하지는 않습니다. BigQuery와 달리, 테이블 데이터는 프라이머리 키 컬럼을 기준으로 정렬된 순서대로 디스크에 저장됩니다. 쿼리 최적화기는 이 정렬 순서를 활용해 재정렬을 방지하고, 조인 시 메모리 사용량을 최소화하며, LIMIT 절에서 조기 종료를 가능하게 합니다. 또한 BigQuery와 달리 ClickHouse는 프라이머리 키 컬럼 값을 기반으로 (희소) 프라이머리 인덱스를 자동으로 생성합니다. 이 인덱스는 프라이머리 키 컬럼에 대한 필터가 포함된 모든 쿼리의 속도를 높이는 데 사용됩니다. 현재 ClickHouse는 외래 키 제약 조건을 지원하지 않습니다.
보조 인덱스 (ClickHouse에서만 사용 가능)
- 블룸 필터 인덱스:
- 동등 조건(예: =, IN)이 있는 쿼리의 속도를 높이는 데 사용됩니다.
- 확률적 자료구조를 사용해 값이 데이터 블록에 존재하는지 판단합니다.
- 토큰 블룸 필터 인덱스:
- 블룸 필터 인덱스와 유사하지만 토큰화된 문자열에 사용되며, 전문 검색 쿼리에 적합합니다.
- Min-Max 인덱스:
- 각 데이터 파트별로 컬럼의 최솟값과 최댓값을 유지합니다.
- 지정된 범위에 속하지 않는 데이터 파트를 읽지 않고 건너뛸 수 있도록 도와줍니다.
검색 인덱스
벡터 인덱스
파티셔닝
클러스터링
materialized views
materialized view 쿼리
트랜잭션
집계 함수
- BigQuery에는 18개의 집계 함수와 4개의 근사 집계 함수가 있습니다.
- ClickHouse에는 150개가 넘는 사전 구축된 집계 함수가 있으며, 사전 구축된 집계 함수의 동작을 확장할 수 있는 강력한 집계 컴비네이터도 제공합니다. 예를 들어, 150개가 넘는 사전 구축된 집계 함수를 테이블의 행 대신 배열에 적용하려면 -Array 접미사를 붙여 호출하기만 하면 됩니다. -Map 접미사를 사용하면 모든 집계 함수를 맵에 적용할 수 있습니다. 또한 -ForEach 접미사를 사용하면 모든 집계 함수를 중첩 배열에 적용할 수 있습니다.
데이터 소스와 파일 포맷
- ClickHouse는 사실상 모든 데이터 소스에서 90개 이상의 파일 포맷으로 데이터를 로드할 수 있도록 네이티브로 지원합니다
- BigQuery는 5개의 파일 포맷과 19개의 데이터 소스를 지원합니다
SQL 언어 기능
배열
groupArray 집계 함수를 사용해 테이블의 특정 행 값을 (일시적으로) 배열로 변환하는 것입니다. 그런 다음 배열 함수를 사용해 이를 편리하게 처리할 수 있고, 결과는 arrayJoin 함수를 통해 다시 테이블의 개별 행으로 변환할 수 있습니다.
ClickHouse SQL은 고차 람다 함수를 지원하므로, BigQuery에서 배열 필터링이나 배열 zipping처럼 흔히 필요한 배열을 다시 테이블로 일시 변환하는 과정 없이도, 고차 내장 배열 함수 하나만 호출하여 다양한 고급 배열 연산을 수행할 수 있습니다. ClickHouse에서는 이러한 연산을 각각 고차 함수 arrayFilter와 arrayZip를 호출하는 것만으로 간단히 처리할 수 있습니다.
아래에서는 BigQuery의 배열 연산을 ClickHouse에 대응해 정리했습니다:
하위 쿼리의 각 행에 대해 요소 하나씩 포함하는 배열 만들기
BigQuery
ARRAY 함수
UNNEST 연산자
UNNEST 연산자를 통해 배열을 다시 테이블로 변환하는 과정이 임시로 필요합니다.
UNNEST 연산자를 사용해 배열을 일시적으로 다시 테이블로 변환해야 합니다
UNNEST 연산자가 필요합니다