CREATE DICTIONARY ... SOURCE Executable Pool

CREATE DICTIONARY ... SOURCE Executable Pool

Executable Pool은 프로세스 풀에서 데이터를 로드할 수 있게 해줘요. 이 소스는 소스에서 모든 데이터를 로드해야 하는 딕셔너리 레이아웃에서는 동작하지 않습니다.

출처: 문서

본문

Executable pool은 다음 레이아웃 중 하나로 딕셔너리가 저장될 때 동작해요.

  • cache
  • complex_key_cache
  • ssd_cache
  • complex_key_ssd_cache
  • direct
  • complex_key_direct

Executable pool은 지정된 명령으로 프로세스 풀을 만들고 종료할 때까지 계속 실행시켜요. 프로그램은 STDIN에서 데이터를 사용 가능한 동안 읽고 결과를 STDOUT으로 출력해야 합니다. STDIN에서 다음 데이터 블록을 기다릴 수 있어요. ClickHouse는 데이터 블록을 처리한 후 STDIN을 닫지 않고, 필요할 때 또 다른 데이터 청크를 파이프로 보냅니다. 실행 스크립트는 이런 데이터 처리 방식에 대비해야 해요 — STDIN을 폴링하고 데이터를 STDOUT으로 일찍 플러시해야 합니다.

설정 예시:

  • DDL
  • Configuration file
SOURCE(EXECUTABLE_POOL(
    command 'while read key; do printf "$key\tData for key $key\n"; done'
    format 'TabSeparated'
    pool_size 10
    max_command_execution_time 10
    implicit_key false
))
<source>
    <executable_pool>
        <command>while read key; do printf "$key\tData for key $key\n"; done</command>
        <format>TabSeparated</format>
        <pool_size>10</pool_size>
        <max_command_execution_time>10</max_command_execution_time>
        <implicit_key>false</implicit_key>
    </executable_pool>
</source>

설정 필드:

Setting Description
command 실행 파일의 절대 경로 또는(프로그램 디렉터리가 PATH에 쓰여 있다면) 파일 이름이에요.
format 파일 형식이에요. Formats에 설명된 모든 형식이 지원됩니다.
pool_size 풀의 크기예요. pool_size0을 지정하면 풀 크기 제한이 없어요. 기본값은 16이에요.
command_termination_timeout 실행 스크립트는 메인 읽기-쓰기 루프를 포함해야 해요. 딕셔너리가 파괴된 후 파이프가 닫히고, ClickHouse가 자식 프로세스에 SIGTERM 신호를 보내기 전에 실행 파일이 종료할 수 있는 시간이 command_termination_timeout초 있습니다. 초 단위로 지정됩니다. 기본값은 10이에요. 선택 사항이에요.
max_command_execution_time 데이터 블록을 처리하기 위한 최대 실행 스크립트 명령 실행 시간이에요. 초 단위로 지정됩니다. 기본값은 10이에요. 선택 사항이에요.
command_read_timeout 명령 stdout에서 데이터를 읽는 타임아웃(밀리초)이에요. 기본값 10000. 선택 사항이에요.
command_write_timeout 명령 stdin에 데이터를 쓰는 타임아웃(밀리초)이에요. 기본값 10000. 선택 사항이에요.
implicit_key 실행 소스 파일은 값만 반환할 수 있으며, 요청된 키와의 대응은 결과의 행 순서로 암시적으로 결정돼요. 기본값은 false예요. 선택 사항이에요.
execute_direct execute_direct = 1이면 commanduser_scripts_path로 지정된 user_scripts 폴더 안에서 검색됩니다. 추가 스크립트 인자는 공백 구분자로 지정할 수 있어요. 예: script_name arg1 arg2. execute_direct = 0이면 commandbin/sh -c의 인자로 전달됩니다. 기본값은 1이에요. 선택 사항이에요.
send_chunk_header 처리할 데이터 청크를 보내기 전에 행 수를 보낼지 제어해요. 기본값은 false예요. 선택 사항이에요.

이 딕셔너리 소스는 XML 구성으로만 설정할 수 있어요. DDL로 실행 소스를 가진 딕셔너리를 만드는 것은 비활성화되어 있습니다. 그렇지 않으면 DB 사용자가 ClickHouse 노드에서 임의 바이너리를 실행할 수 있기 때문이에요.

더 알아보기 (Learn more)