ClickHouse가 아닌 데이터베이스의 ETL 도구로서 clickhouse-local을 사용하여 마이그레이션하기

ClickHouse가 아닌 데이터베이스의 ETL 도구로서 clickhouse-local을 사용하여 마이그레이션하기

현재 데이터베이스에서 ClickHouse Cloud로 데이터를 옮기는 ETL 도구로 clickhouse-local을 사용할 수 있어요. clickhouse-local이 중간 피벗(pivot) 지점 역할을 하며, 소스 데이터베이스에서 데이터를 읽어 destination ClickHouse 데이터베이스로 밀어 넣는 방식이에요.

출처: Migrating to ClickHouse using clickhouse-local

본문

ClickHouse, 더 정확히는 clickhouse-local을 ETL 도구로 사용해서 현재 데이터베이스 시스템에서 ClickHouse Cloud로 데이터를 마이그레이션할 수 있어요. 단, 현재 데이터베이스 시스템에 대해 ClickHouse가 제공하는 통합 엔진(integration engine)이나 테이블 함수(table function)이 있거나, 벤더가 제공하는 JDBC 드라이버 또는 ODBC 드라이버가 있어야 해요.

우리는 이 마이그레이션 방법을 가끔 "피벗(pivot)" 방법이라고 불러요. 중간 피벗 지점 또는 홉(hop)을 사용해서 소스 데이터베이스에서 목적지 데이터베이스로 데이터를 옮기기 때문이에요. 예를 들어 보안 요구사항 때문에 사설·내부 네트워크에서 아웃바운드 연결만 허용되는 경우 이 방법이 필요할 수 있어요 — 그럴 때 clickhouse-local로 소스 데이터베이스에서 데이터를 pull하고, clickhouse-local을 피벗 지점으로 삼아 destination ClickHouse 데이터베이스로 데이터를 push하는 거죠.

ClickHouse는 MySQL, PostgreSQL, MongoDB, SQLite에 대한 통합 엔진과 테이블 함수(통합 엔진을 즉석(on-the-fly)으로 만드는)를 제공해요. 그 외의 널리 쓰이는 데이터베이스 시스템 대부분은 벤더가 JDBC 드라이버나 ODBC 드라이버를 제공해요.

clickhouse-local이란?

보통 ClickHouse는 클러스터 형태로 실행돼요. 여러 ClickHouse 데이터베이스 엔진 인스턴스가 서로 다른 서버에서 분산 방식으로 동작하죠. 단일 서버에서는 ClickHouse 데이터베이스 엔진이 clickhouse-server 프로그램의 일부로 실행돼요. 데이터베이스 접근(경로, 사용자, 보안 등)은 서버 구성 파일로 설정돼요.

clickhouse-local 도구를 사용하면 ClickHouse 데이터베이스 엔진을 명령줄 유틸리티처럼 격리된 방식으로 쓸 수 있어요. ClickHouse 서버를 구성하고 시작할 필요 없이, 다양한 입력과 출력에 대해 매우 빠른 SQL 데이터 처리를 할 수 있죠.

clickhouse-local 설치하기

clickhouse-local을 실행할 호스트 머신은 현재 소스 데이터베이스 시스템과 ClickHouse Cloud 대상 서비스 양쪽에 네트워크 접근이 가능해야 해요. 그 호스트 머신에서 운영체제에 맞는 clickhouse-local 빌드를 내려받으세요.

  • Linux
  • macOS
  1. clickhouse-local을 로컬에 내려받는 가장 간단한 방법은 다음 명령을 실행하는 거예요:
curl https://clickhouse.com/ | sh
  1. clickhouse-local을 실행합니다 (버전만 출력할 거예요):
./clickhouse-local

macOS에서:

./clickhouse local

중요: 이 가이드의 예시들은 Linux 명령(./clickhouse-local)을 사용해요. Mac에서 clickhouse-local을 실행하려면 ./clickhouse local을 사용하세요.

원격 시스템을 ClickHouse Cloud 서비스의 IP Access List에 추가하세요. remoteSecure 함수가 ClickHouse Cloud 서비스에 연결하려면, 원격 시스템의 IP 주소가 IP Access List에 허용되어 있어야 해요. 이 팁 아래의 Manage your IP Access List를 펼쳐서 자세한 정보를 확인하세요.

IP Access List 관리하기: ClickHouse Cloud 서비스 목록에서 작업할 서비스를 선택하고 Settings로 전환하세요. IP Access List에 ClickHouse Cloud 서비스에 연결해야 하는 원격 시스템의 IP 주소나 범위가 없다면, Add IPs로 문제를 해결할 수 있어요. ClickHouse Cloud 서비스에 연결해야 하는 개별 IP 주소나 주소 범위를 추가하고, 양식을 적절히 수정한 뒤 Save하세요.

예시: 통합 엔진으로 MySQL에서 ClickHouse Cloud로 마이그레이션

소스 MySQL 데이터베이스에서 데이터를 읽는 데 통합 테이블 엔진 ( mysql 테이블 함수로 즉석 생성됨)을 사용하고, ClickHouse Cloud 서비스의 destination 테이블에 데이터를 쓰는 데 remoteSecure 테이블 함수를 사용할 거예요.

destination ClickHouse Cloud 서비스에서:

destination 데이터베이스를 만듭니다:

CREATE DATABASE db

MySQL 테이블과 동일한 스키마의 destination 테이블을 만듭니다:

CREATE TABLE db.table ...

ClickHouse Cloud destination 테이블의 스키마와 소스 MySQL 테이블의 스키마는 정렬되어야 해요 (컬럼 이름과 순서가 같아야 하고, 컬럼 데이터 타입은 호환 가능해야 해요).

clickhouse-local 호스트 머신에서:

마이그레이션 쿼리로 clickhouse-local을 실행합니다:

./clickhouse-local --query "
INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 'default', 'PASS')
SELECT * FROM mysql('host:port', 'database', 'table', 'user', 'password');"

clickhouse-local 호스트 머신에는 데이터가 로컬로 저장되지 않아요. 대신 소스 MySQL 테이블에서 데이터를 읽어 즉시 ClickHouse Cloud 서비스의 destination 테이블에 기록해요.

더 알아보기 (Learn more)