Skip to main content
MySQL 엔진을 사용하면 원격 MySQL 서버에 저장된 데이터에 대해 SELECTINSERT 쿼리를 실행할 수 있습니다.

테이블 생성하기

CREATE TABLE 쿼리에 대한 자세한 설명은 해당 문서를 참조하십시오. 테이블 구조는 원본 MySQL 테이블 구조와 다를 수 있습니다.
  • 컬럼 이름은 원본 MySQL 테이블과 같아야 하지만, 그중 일부만 어떤 순서로든 사용할 수 있습니다.
  • 컬럼 타입은 원본 MySQL 테이블의 타입과 달라도 됩니다. ClickHouse는 값을 ClickHouse 데이터 타입으로 형 변환하려고 시도합니다.
  • external_table_functions_use_nulls 설정은 널 허용 컬럼을 처리하는 방식을 정의합니다. 기본값은 1입니다. 값이 0이면 테이블 함수는 널 허용 컬럼을 만들지 않고 null 대신 기본값을 삽입합니다. 이는 배열 내부의 NULL 값에도 적용됩니다.
엔진 매개변수
  • host:port — MySQL 서버 주소입니다.
  • database — 원격 데이터베이스 이름입니다.
  • table — 원격 테이블 이름 또는 MySQL에 그대로 전달되는 쿼리입니다(테이블 이름 대신 쿼리 전달하기 참조).
  • user — MySQL 사용자입니다.
  • password — 사용자 비밀번호입니다.
  • replace_queryINSERT INTO 쿼리를 REPLACE INTO로 변환하는 플래그입니다. replace_query=1이면 해당 쿼리로 대체됩니다.
  • on_duplicate_clauseINSERT 쿼리에 추가되는 ON DUPLICATE KEY on_duplicate_clause 표현식입니다. 예시: INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1에서 on_duplicate_clauseUPDATE c2 = c2 + 1입니다. ON DUPLICATE KEY 절과 함께 사용할 수 있는 on_duplicate_clauseMySQL 문서를 참조하십시오. on_duplicate_clause를 지정하려면 replace_query 매개변수에 0을 전달해야 합니다. replace_query = 1on_duplicate_clause를 동시에 전달하면 ClickHouse에서 예외가 발생합니다.
인수는 이름이 지정된 컬렉션을 사용해 전달할 수도 있습니다. 이 경우 hostport는 별도로 지정해야 합니다. 이 방식은 프로덕션 환경에 권장됩니다. =, !=, >, >=, <, <=와 같은 단순한 WHERE 절은 MySQL 서버에서 실행됩니다. 나머지 조건과 LIMIT 샘플링 제약은 MySQL 쿼리가 완료된 후에만 ClickHouse에서 실행됩니다.

테이블 이름 대신 쿼리 전달하기

테이블 이름 대신 table 인수에 MySQL로 그대로 전달되는 SELECT 쿼리를 사용할 수 있습니다. 테이블의 구조는 쿼리 결과를 바탕으로 추론됩니다. 쿼리는 서브쿼리로 작성하거나 query 함수로 감싸 작성할 수 있습니다:
이는 조인, 집계 또는 기타 처리를 MySQL로 푸시 다운하는 데 유용합니다. 이러한 테이블은 읽기 전용이며, 여기에 INSERT하는 것은 허용되지 않습니다. 동일한 구문은 mysql 테이블 함수에서도 지원됩니다.
서브쿼리 형식 (SELECT ...)은 ClickHouse에서 파싱된 후 서버로 전송되기 전에 MySQL 방언(백틱으로 식별자 인용)으로 다시 직렬화됩니다. 따라서 유효한 ClickHouse SQL이어야 합니다. ClickHouse가 파싱하지 않는 MySQL 전용 구문을 전달하려면 텍스트가 MySQL로 그대로 전송되는 query('...') 형식을 사용하십시오.전달된 쿼리에는 이를 둘러싼 ClickHouse 쿼리의 외부 WHERE, LIMIT, 집계 등이 푸시 다운되지 않습니다. 대신 전체 쿼리 결과를 가져온 후 ClickHouse에서 적용됩니다. MySQL에서 읽는 데이터를 제한하려면 필터를 전달된 쿼리 내부에 넣으십시오. external_table_strict_query = 1을 사용하면 푸시 다운할 수 없는 외부 필터는 로컬에서 적용되지 않고 예외와 함께 거부됩니다.
여러 레플리카를 지원하며, |로 구분해 나열해야 합니다. 예를 들면 다음과 같습니다.

사용 예시

MySQL에서 테이블 생성:
일반 인수를 사용해 ClickHouse에서 테이블을 생성합니다:
또는 이름이 지정된 컬렉션:
MySQL 테이블에서 데이터 가져오기:

설정

기본 설정은 연결조차 재사용하지 않아 효율이 그다지 높지 않습니다. 이러한 설정을 사용하면 서버가 초당 처리할 수 있는 쿼리 수를 늘릴 수 있습니다.

connection_auto_close

쿼리 실행 후 연결을 자동으로 닫아, 연결 재사용을 비활성화할 수 있습니다. 가능한 값:
  • 1 — 연결 자동 닫기가 허용되며, 연결 재사용이 비활성화됩니다
  • 0 — 연결 자동 닫기가 허용되지 않으며, 연결 재사용이 활성화됩니다
기본값: 1.

connection_max_tries

페일오버를 지원하는 풀의 재시도 횟수를 설정합니다. 가능한 값:
  • 양의 정수
  • 0 — 페일오버를 지원하는 풀에 대해 재시도하지 않습니다.
기본값: 3.

connection_pool_size

연결 풀의 크기입니다(모든 연결이 사용 중인 경우, 일부 연결이 해제될 때까지 쿼리는 대기합니다). 가능한 값:
  • 양의 정수.
기본값: 16.

connection_wait_timeout

사용 가능한 연결이 생길 때까지 대기하는 시간 제한(초)입니다(이미 connection_pool_size개의 연결이 활성 상태인 경우). 0이면 대기하지 않습니다. Possible values:
  • 양의 정수.
기본값: 5.

connect_timeout

연결 시간 제한(초)입니다. 가능한 값:
  • 양의 정수.
기본값: 10.

read_write_timeout

읽기-쓰기 타임아웃(초)입니다. 가능한 값:
  • 양의 정수.
기본값: 300.

enable_compression

MySQL 프로토콜 연결에서 압축을 활성화합니다. 기본값: false. 이 설정은 다음에 적용됩니다.
  • MySQL 테이블 엔진;
  • MySQL 데이터베이스 엔진;
  • mysql 테이블 함수;
  • MySQL 통합에 사용되는 이름이 지정된 컬렉션.
활성화되면 ClickHouse가 해당 연결에 대해 압축을 요청합니다. 예시:

관련 항목

마지막 수정일 2026년 7월 23일