본문으로 바로가기
본문으로 바로가기

MySQL 테이블 엔진

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

테이블 생성

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
    ...
) ENGINE = MySQL({host:port, database, table, user, password[, replace_query, on_duplicate_clause] | named_collection[, option=value [,..]]})
SETTINGS
    [ connection_pool_size=16, ]
    [ connection_max_tries=3, ]
    [ connection_wait_timeout=5, ]
    [ connection_auto_close=true, ]
    [ connect_timeout=10, ]
    [ read_write_timeout=300 ]
;

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_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_clause에 대해서는 MySQL documentation을 참고하십시오. on_duplicate_clause를 지정하려면 replace_query 파라미터에 0을 전달해야 합니다. replace_query = 1on_duplicate_clause를 동시에 전달하면 ClickHouse는 예외를 발생시킵니다.

인수는 named collections를 사용하여 전달할 수도 있습니다. 이 경우 hostport는 별도로 지정해야 합니다. 이 접근 방식은 프로덕션 환경에서 사용하는 것을 권장합니다.

=, !=, >, >=, <, <=와 같은 단순 WHERE 절은 MySQL 서버에서 실행됩니다.

나머지 조건과 LIMIT 샘플링 제약 조건은 MySQL에 대한 쿼리가 완료된 후에만 ClickHouse에서 실행됩니다.

|로 나열해야 하는 여러 레플리카를 지원합니다. 예를 들면 다음과 같습니다:

CREATE TABLE test_replicas (id UInt32, name String, age UInt32, money UInt32) ENGINE = MySQL(`mysql{2|3|4}:3306`, 'clickhouse', 'test_replicas', 'root', 'clickhouse');

사용 예제

MySQL에서 테이블을 생성합니다:

mysql> CREATE TABLE `test`.`test` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `int_nullable` INT NULL DEFAULT NULL,
    ->   `float` FLOAT NOT NULL,
    ->   `float_nullable` FLOAT NULL DEFAULT NULL,
    ->   PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into test (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)

mysql> select * from test;
+------+----------+-----+----------+
| int_id | int_nullable | float | float_nullable |
+------+----------+-----+----------+
|      1 |         NULL |     2 |           NULL |
+------+----------+-----+----------+
1 row in set (0,00 sec)

일반 매개변수를 사용해 ClickHouse에서 테이블을 생성합니다:

CREATE TABLE mysql_table
(
    `float_nullable` Nullable(Float32),
    `int_id` Int32
)
ENGINE = MySQL('localhost:3306', 'test', 'test', 'bayonet', '123')

또는 named collections을 사용할 수 있습니다:

CREATE NAMED COLLECTION creds AS
        host = 'localhost',
        port = 3306,
        database = 'test',
        user = 'bayonet',
        password = '123';
CREATE TABLE mysql_table
(
    `float_nullable` Nullable(Float32),
    `int_id` Int32
)
ENGINE = MySQL(creds, table='test')

MySQL 테이블에서 데이터 조회:

SELECT * FROM mysql_table
┌─float_nullable─┬─int_id─┐
│           ᴺᵁᴸᴸ │      1 │
└────────────────┴────────┘

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.

함께 보기