CREATE DICTIONARY ... SOURCE MySQL

CREATE DICTIONARY ... SOURCE MySQL

MySQL 소스는 MySQL 데이터베이스에서 딕셔너리 데이터를 로드해요.

출처: 문서

본문

설정 예시:

  • DDL
  • Configuration file
SOURCE(MYSQL(
    port 3306
    user 'clickhouse'
    password 'qwerty'
    replica(host 'example01-1' priority 1)
    replica(host 'example01-2' priority 1)
    db 'db_name'
    table 'table_name'
    where 'id=10'
    invalidate_query 'SQL_QUERY'
    fail_on_connection_loss 'true'
    query 'SELECT id, value_1, value_2 FROM db_name.table_name'
    enable_compression 1
))
<source>
  <mysql>
      <port>3306</port>
      <user>clickhouse</user>
      <password>qwerty</password>
      <replica>
          <host>example01-1</host>
          <priority>1</priority>
      </replica>
      <replica>
          <host>example01-2</host>
          <priority>1</priority>
      </replica>
      <db>db_name</db>
      <table>table_name</table>
      <where>id=10</where>
      <invalidate_query>SQL_QUERY</invalidate_query>
      <fail_on_connection_loss>true</fail_on_connection_loss>
      <query>SELECT id, value_1, value_2 FROM db_name.table_name</query>
      <enable_compression>1</enable_compression>
  </mysql>
</source>

설정 필드:

Setting Description
port MySQL 서버의 포트예요. 모든 리플리카에 대해 지정하거나 각각 개별로(내부 <replica>) 지정할 수 있어요.
user MySQL 사용자의 이름이에요. 모든 리플리카에 대해 지정하거나 각각 개별로 지정할 수 있어요.
password MySQL 사용자의 비밀번호예요. 모든 리플리카에 대해 지정하거나 각각 개별로 지정할 수 있어요.
replica 리플리카 구성 섹션이에요. 여러 섹션이 있을 수 있어요.
replica/host MySQL 호스트예요.
replica/priority 리플리카 우선순위예요. 연결을 시도할 때 ClickHouse는 우선순위 순서대로 리플리카를 순회합니다. 숫자가 낮을수록 우선순위가 높아요.
db 데이터베이스의 이름이에요.
table 테이블의 이름이에요.
where 선택 기준이에요. 조건의 문법은 MySQL의 WHERE 절과 같아요. 예: id > 10 AND id < 20. 선택 사항이에요.
invalidate_query 딕셔너리 상태를 확인하는 쿼리예요. 선택 사항이에요. Refreshing dictionary data using LIFETIME 섹션에서 자세히 알아보세요.
fail_on_connection_loss 연결 손실 시 서버 동작을 제어해요. true이면 클라이언트와 서버 사이의 연결이 끊어지면 즉시 예외가 발생합니다. false이면 서버는 오류를 보고하기 전에 데이터를 최소 세 번 다시 가져오려고 시도합니다. 재시도는 응답 시간 증가로 이어진다는 점에 유의하세요. 기본값: false.
query 사용자 정의 쿼리예요. 선택 사항이에요.
enable_compression MySQL 프로토콜 연결에 zlib 압축을 활성화해요. 1로 설정하면 ClickHouse는 MySQL 서버에 프로토콜 수준 압축을 요청합니다. <replica> 안에서 리플리카별로도 설정할 수 있어요. 기본값: 0.
enable_local_infile MySQL 서버가 ClickHouse에 로컬 파일(LOAD DATA LOCAL INFILE)의 내용을 요청하도록 허용해요. 서버 구성 파일에 정의된 딕셔너리만 활성화할 수 있습니다. CREATE DICTIONARY 쿼리는 설정하지 않거나 0으로 설정할 수 있어요. <replica> 안에서 리플리카별로도 설정할 수 있으며, 설정하지 않은 <replica>는 위 값을 상속합니다. 기본값: 0.
ssl_ca_pem MySQL 서버 인증서가 검증되는 CA 인증서의 내용이에요. 선택 사항이에요.
ssl_cert_pem 인증서 기반 인증을 위한 클라이언트 인증서의 내용이에요. 선택 사항이에요.
ssl_key_pem ssl_cert_pem에 속하는 개인 키의 내용이에요. 선택 사항이에요.
ssl_ca, ssl_cert, ssl_key 서버의 파일 경로로 제공되는 동일한 자격 증명이에요. 서버 구성 파일 또는 거기에 정의된 named collection으로 정의된 딕셔너리에만 허용됩니다(아래 참조). 선택 사항이에요.

table 또는 where 필드는 query 필드와 함께 사용할 수 없어요. 그리고 table 또는 query 필드 중 하나는 반드시 선언해야 합니다.

ssl_ca, ssl_cert, ssl_key는 서버가 자기 권한으로 여는 파일을 지정하므로, 서버 구성 파일 또는 거기에 정의된 named collection으로 정의된 딕셔너리에서만 허용됩니다. TLS 자격 증명을 직접 지정하는 CREATE DICTIONARY 쿼리는 대신 내용을 ssl_ca_pem, ssl_cert_pem, ssl_key_pem으로 전달해야 해요. 이 값들은 비밀번호와 같은 방식으로 로그 및 SHOW 쿼리에서 마스킹됩니다.

enable_local_infile은 MySQL 서버가 ClickHouse에 자기 선택의 파일 내용을 요청하게 하는데, 서버는 자기 권한으로 그 파일을 읽으므로 서버 구성 파일에 정의된 딕셔너리에서만 허용됩니다. 소스 또는 해당 <replica> 항목 중 하나에서 활성화하는 CREATE DICTIONARY 쿼리는 BAD_ARGUMENTS로 거부됩니다.

명시적인 secure 파라미터는 없어요. SSL 연결을 설정할 때 보안은 필수입니다.

MySQL은 소켓으로 로컬 호스트에 연결될 수 있어요. 이렇게 하려면 hostsocket을 설정하세요.

설정 예시:

  • DDL
  • Configuration file
SOURCE(MYSQL(
    host 'localhost'
    socket '/path/to/socket/file.sock'
    user 'clickhouse'
    password 'qwerty'
    db 'db_name'
    table 'table_name'
    where 'id=10'
    invalidate_query 'SQL_QUERY'
    fail_on_connection_loss 'true'
    query 'SELECT id, value_1, value_2 FROM db_name.table_name'
))
<source>
  <mysql>
      <host>localhost</host>
      <socket>/path/to/socket/file.sock</socket>
      <user>clickhouse</user>
      <password>qwerty</password>
      <db>db_name</db>
      <table>table_name</table>
      <where>id=10</where>
      <invalidate_query>SQL_QUERY</invalidate_query>
      <fail_on_connection_loss>true</fail_on_connection_loss>
      <query>SELECT id, value_1, value_2 FROM db_name.table_name</query>
  </mysql>
</source>

더 알아보기 (Learn more)