MySQL 테이블 엔진
MySQL 엔진을 사용하면 원격 MySQL 서버에 저장된 데이터에 대해 SELECT 및 INSERT 쿼리를 실행할 수 있습니다.
테이블 생성
CREATE TABLE 쿼리에 대한 자세한 설명을 참고하십시오.
테이블 구조는 원래 MySQL 테이블 구조와 다를 수 있습니다:
- 컬럼 이름은 원래 MySQL 테이블과 같아야 하지만, 이 중 일부 컬럼만 사용해도 되고 순서는 임의로 지정할 수 있습니다.
- 컬럼 타입은 원래 MySQL 테이블의 타입과 다를 수 있습니다. ClickHouse는 값을 ClickHouse 데이터 타입으로 캐스팅하려고 시도합니다.
- external_table_functions_use_nulls 설정은 널 허용 컬럼을 어떻게 처리할지 정의합니다. 기본값: 1. 0이면, 테이블 함수는 널 허용 컬럼을 만들지 않고 null 대신 기본값을 삽입합니다. 이는 배열 내부의 NULL 값에도 동일하게 적용됩니다.
Engine Parameters
host:port— MySQL 서버 주소.database— 원격 데이터베이스 이름.table— 원격 테이블 이름.user— MySQL 사용자.password— 사용자 비밀번호.replace_query—INSERT INTO쿼리를REPLACE INTO로 변환하는 플래그입니다.replace_query=1이면 쿼리가 대체됩니다.on_duplicate_clause—INSERT쿼리에 추가되는ON DUPLICATE KEY on_duplicate_clause표현식입니다. 예:INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1에서on_duplicate_clause는UPDATE c2 = c2 + 1입니다.ON DUPLICATE KEY절과 함께 사용할 수 있는on_duplicate_clause에 대해서는 MySQL documentation을 참고하십시오.on_duplicate_clause를 지정하려면replace_query파라미터에0을 전달해야 합니다.replace_query = 1과on_duplicate_clause를 동시에 전달하면 ClickHouse는 예외를 발생시킵니다.
인수는 named collections를 사용하여 전달할 수도 있습니다. 이 경우 host와 port는 별도로 지정해야 합니다. 이 접근 방식은 프로덕션 환경에서 사용하는 것을 권장합니다.
=, !=, >, >=, <, <=와 같은 단순 WHERE 절은 MySQL 서버에서 실행됩니다.
나머지 조건과 LIMIT 샘플링 제약 조건은 MySQL에 대한 쿼리가 완료된 후에만 ClickHouse에서 실행됩니다.
|로 나열해야 하는 여러 레플리카를 지원합니다. 예를 들면 다음과 같습니다:
사용 예제
MySQL에서 테이블을 생성합니다:
일반 매개변수를 사용해 ClickHouse에서 테이블을 생성합니다:
또는 named collections을 사용할 수 있습니다:
MySQL 테이블에서 데이터 조회:
Settings
기본 설정은 연결을 재사용하지 않아 효율적이지 않습니다. 이 설정들을 사용하면 서버가 초당 처리할 수 있는 쿼리 수를 늘릴 수 있습니다.
connection_auto_close
쿼리 실행 후 연결을 자동으로 닫아, 연결 재사용을 비활성화합니다.
가능한 값:
- 1 — 연결 자동 닫기가 허용되며, 연결 재사용이 비활성화됩니다.
- 0 — 연결 자동 닫기가 허용되지 않으며, 연결 재사용이 활성화됩니다.
기본값: 1.
connection_max_tries
장애 조치(failover)가 있는 풀에 대한 재시도 횟수를 설정합니다.
가능한 값:
- 양의 정수.
- 0 — 장애 조치가 있는 풀에 대해 재시도를 수행하지 않습니다.
기본값: 3.
connection_pool_size
연결 풀의 크기입니다. 모든 연결이 사용 중인 경우, 일부 연결이 해제될 때까지 쿼리가 대기합니다.
가능한 값:
- 양의 정수.
기본값: 16.
connection_wait_timeout
사용 가능한 연결을 기다리는 시간 초과(초 단위)입니다. 이미 connection_pool_size만큼의 활성 연결이 있는 경우에 적용되며, 0이면 대기하지 않습니다.
가능한 값:
- 양의 정수.
기본값: 5.
connect_timeout
연결 시 발생하는 시간 초과(초 단위)입니다.
가능한 값:
- 양의 정수.
기본값: 10.
read_write_timeout
읽기/쓰기 작업에 대한 시간 초과(초 단위)입니다.
가능한 값:
- 양의 정수.
기본값: 300.