특정 설정으로 SQL 문을 실행하는 방법은 여러 가지가 있습니다.
설정은 계층적으로 구성되며, 이후 계층에서 이전 계층의 설정 값을 재정의합니다.
우선순위
설정을 정의할 때 적용되는 우선순위는 다음과 같습니다.
-
설정을 사용자에게 직접 적용하거나 settings profile 내에서 적용하는 경우
- SQL(권장)
- 하나 이상의 XML 또는 YAML 파일을
/etc/clickhouse-server/users.d 디렉터리에 추가합니다.
-
세션 설정
- ClickHouse Cloud SQL 콘솔 또는 대화형 모드의
clickhouse client에서 SET setting=value를 전송합니다. 이와 같이 HTTP 프로토콜에서 ClickHouse 세션도 사용할 수 있습니다. 이때는 session_id HTTP 매개변수를 지정해야 합니다.
-
쿼리 설정
- 비대화형 모드로
clickhouse client를 시작할 때 시작 매개변수 --setting=value를 설정합니다.
- HTTP API를 사용할 때 CGI 매개변수(
URL?setting_1=value&setting_2=value...)를 전달합니다.
- SELECT 쿼리의
SETTINGS
절에서 설정을 정의합니다. 설정 값은 해당 쿼리에서만 적용되며,
쿼리 실행 후 기본값 또는 이전 값으로 재설정됩니다.
설정을 기본값으로 되돌리기
설정을 변경한 후 기본값으로 되돌리려면 값을 DEFAULT로 설정하면 됩니다. 구문은 다음과 같습니다.
SET setting_name = DEFAULT
예를 들어 async_insert의 기본값은 0입니다. 이를 1로 변경한다고 가정해 보겠습니다:
SET async_insert = 1;
SELECT value FROM system.settings where name='async_insert';
응답은 다음과 같습니다:
┌─value──┐
│ 1 │
└────────┘
다음 명령은 해당 값을 다시 0으로 설정합니다:
SET async_insert = DEFAULT;
SELECT value FROM system.settings where name='async_insert';
이제 설정이 기본값으로 복원되었습니다:
┌─value───┐
│ 0 │
└─────────┘
사용자 정의 설정
공통 설정 외에도, 사용자 정의 설정을 정의할 수 있습니다.
사용자 정의 설정 이름은 미리 정의된 접두사 중 하나로 시작해야 합니다. 이러한 접두사의 목록은 서버 구성 파일의 custom_settings_prefixes 매개변수로 선언해야 합니다.
<custom_settings_prefixes>custom_</custom_settings_prefixes>
커스텀 설정을 정의하려면 SET 명령을 사용하십시오:
커스텀 설정의 현재 값을 확인하려면 getSetting() 함수를 사용합니다:
SELECT getSetting('custom_a');
다음 예시들은 모두 async_insert 설정 값을 1로 지정하며,
실행 중인 시스템에서 해당 설정을 확인하는 방법을 보여줍니다.
SQL을 사용하여 사용자에게 설정을 직접 적용하기
다음 SQL은 설정 async_inset = 1이 적용된 사용자 ingester를 생성합니다:
CREATE USER ingester
IDENTIFIED WITH sha256_hash BY '7e099f39b84ea79559b3e85ea046804e63725fd1f46b37f281276aae20f86dc3'
-- highlight-next-line
SETTINGS async_insert = 1
설정 프로필과 할당을 검토합니다
┌─ACCESS─────────────────────────────────────────────────────────────────────────────┐
│ ... │
# highlight-next-line
│ CREATE USER ingester IDENTIFIED WITH sha256_password SETTINGS async_insert = true │
│ ... │
└────────────────────────────────────────────────────────────────────────────────────┘
SQL로 설정 프로필(settings profile)을 생성하고 사용자에게 할당하기
다음 SQL은 async_inset = 1 설정이 적용된 log_ingest 프로필을 생성합니다:
CREATE
SETTINGS PROFILE log_ingest SETTINGS async_insert = 1
이는 ingester USER를 생성하고 해당 사용자에게 SETTINGS PROFILE log_ingest를 할당합니다:
CREATE USER ingester
IDENTIFIED WITH sha256_hash BY '7e099f39b84ea79559b3e85ea046804e63725fd1f46b37f281276aae20f86dc3'
-- highlight-next-line
SETTINGS PROFILE log_ingest
XML을 사용하여 SETTINGS PROFILE과 USER 생성하기
<clickhouse>
# highlight-start
<profiles>
<log_ingest>
<async_insert>1</async_insert>
</log_ingest>
</profiles>
# highlight-end
<users>
<ingester>
<password_sha256_hex>7e099f39b84ea79559b3e85ea046804e63725fd1f46b37f281276aae20f86dc3</password_sha256_hex>
# highlight-start
<profile>log_ingest</profile>
# highlight-end
</ingester>
<default replace="true">
<password_sha256_hex>7e099f39b84ea79559b3e85ea046804e63725fd1f46b37f281276aae20f86dc3</password_sha256_hex>
<access_management>1</access_management>
<named_collection_control>1</named_collection_control>
</default>
</users>
</clickhouse>
설정 프로필과 할당을 확인합니다
┌─ACCESS─────────────────────────────────────────────────────────────────────────────┐
│ CREATE USER default IDENTIFIED WITH sha256_password │
# highlight-next-line
│ CREATE USER ingester IDENTIFIED WITH sha256_password SETTINGS PROFILE log_ingest │
│ CREATE SETTINGS PROFILE default │
# highlight-next-line
│ CREATE SETTINGS PROFILE log_ingest SETTINGS async_insert = true │
│ CREATE SETTINGS PROFILE readonly SETTINGS readonly = 1 │
│ ... │
└────────────────────────────────────────────────────────────────────────────────────┘
세션에 설정 지정하기
SET async_insert =1;
SELECT value FROM system.settings where name='async_insert';
┌─value──┐
│ 1 │
└────────┘
쿼리에서 설정 지정하기
INSERT INTO YourTable
-- highlight-next-line
SETTINGS async_insert=1
VALUES (...)
같이 보기