allow_* 세션 설정
allow_* 세션 설정
이 설정들은 ClickHouse에서 다양한 기능(파티션별 독립 처리, 실험적 카탈로그, 델타 레이크, 조인 계획, 함수 등)을 허용할지 제어해요. ClickHouse 소스 코드에서 자동으로 생성된 세션 설정 문서예요.
출처: 문서
본문
이 설정들은 system.settings에서 사용할 수 있으며 소스 코드에서 자동으로 생성돼요.
allow_aggregate_partitions_independently
파티션 키가 group by 키에 맞을 때 별도 스레드에서 파티션의 독립적 집계를 활성화해요. 파티션 수가 코어 수에 가깝고 파티션 크기가 거의 같을 때 유리해요. ReadFromMergeTree의 휴리스틱은 불리한 레이아웃(파티션이 너무 적거나 너무 많거나 크기가 크게 편향된 경우)에 대해 자동으로 이 최적화를 비활성화해요. 검사를 건너뛰려면 force_aggregate_partitions_independently를 참고해요.
allow_archive_path_syntax
File/S3 엔진/테이블 함수가 올바른 확장자를 가진 아카이브의 '::'가 포함된 경로를 <archive> :: <file>로 파싱해요.
allow_asynchronous_read_from_io_pool_for_merge_tree
MergeTree 테이블을 읽는 데 백그라운드 I/O 풀을 사용해요. 이 설정은 I/O 바운드 쿼리의 성능을 향상시킬 수 있어요.
allow_calculating_subcolumns_sizes_for_merge_tree_reading
활성화하면 ClickHouse가 각 하위 열(subcolumn) 읽기에 필요한 파일 크기를 계산해 작업과 블록 크기 계산을 개선해요.
allow_changing_replica_until_first_data_packet
활성화하면 hedged 요청에서 이미 일부 진행했더라도(receive_data_timeout 타임아웃 동안 진행이 갱신되지 않은 경우) 첫 데이터 패킷을 받을 때까지 새 연결을 시작할 수 있어요. 그렇지 않으면 진행 이후에는 복제본 변경을 비활성화해요.
allow_correlated_subqueries
별칭(Aliases): allow_experimental_correlated_subqueries
상관 서브쿼리(correlated subqueries) 실행을 허용해요.
allow_create_index_without_type
TYPE이 없는 CREATE INDEX 쿼리를 허용해요. 해당 쿼리는 무시돼요. SQL 호환성 테스트를 위해 만들어졌어요.
allow_creating_set_partitions_independently
IN (subquery)의 집합을 만들 때, 서브쿼리의 MergeTree 테이블 파티션 표현식이 서브쿼리 출력 열의 결정적 함수일 경우 파티션별 병렬 사전 중복 제거를 활성화해요. 각 파티션은 별도 스트림으로 읽혀 독립적으로 중복 제거되므로, 단일 집합 채우기 변환은 고유 행만 해시해요. FINAL, 병렬 복제본, GLOBAL IN에서는 적용되지 않아요. 이 최적화는 데이터에 파티션이 하나 이상 있고 가장 큰 파티션이 평균 파티션 행 수의 최대 두 배일 때만 파티션별 읽기를 스스로 요청해요(편향 검사를 건너뛰려면 force_creating_set_partitions_independently 참고). 다른 파티션별 기능(예: 파티션별 LIMIT BY)이 스트림을 이미 파티션 분리된 상태로 만들었다면 읽기 레이아웃이 이미 고정되어 있으므로 사전 중복 제거는 그와 관계없이 적용돼요. 집합을 만드는 동안 스트림별 중복 제거 테이블은 함께 약 한 벌의 고유 키 복사분을 보유해요.
allow_custom_error_code_in_throwif
함수 throwIf()에서 사용자 지정 오류 코드를 활성화해요. true이면 던져진 예외가 예상치 못한 오류 코드를 가질 수 있어요.
allow_database_glue_catalog
별칭(Aliases): allow_experimental_database_glue_catalog
catalog_type = 'glue'인 데이터베이스 엔진 DataLakeCatalog를 허용해요.
Cloud 기본값: 1.
allow_database_iceberg
별칭(Aliases): allow_experimental_database_iceberg
catalog_type = 'iceberg'인 데이터베이스 엔진 DataLakeCatalog를 허용해요.
Cloud 기본값: 1.
allow_database_unity_catalog
별칭(Aliases): allow_experimental_database_unity_catalog
catalog_type = 'unity'인 데이터베이스 엔진 DataLakeCatalog를 허용해요.
Cloud 기본값: 1.
allow_ddl
true로 설정하면 사용자가 DDL 쿼리를 실행할 수 있어요.
allow_delta_kernel_rs
별칭(Aliases): allow_experimental_delta_kernel_rs
Delta Lake 테이블을 읽기 위한 delta-kernel-rs 구현을 허용해요.
allow_delta_lake_create_table
delta-kernel-rs를 사용해 새 DeltaLake 테이블을 만들거나 기존 테이블을 카탈로그에 등록하는 것을 허용해요. 파티셔닝된 테이블(PARTITION BY) 만들기는 아직 지원되지 않아요. DataLakeCatalog 데이터베이스에서는 테이블이 Delta 스키마로 등록되므로, 더 넓은 Delta 타입에 매핑되는 선언된 ClickHouse 타입(예: UInt8 -> short, FixedString(N) -> string)은 선언된 타입이 아니라 Delta 매핑 타입으로 읽혀요.
allow_delta_lake_writes
별칭(Aliases): allow_experimental_delta_lake_writes
delta-kernel 쓰기 기능을 활성화해요.
allow_distinct_partitions_independently
파티션 표현식이 DISTINCT 열의 결정적 함수일 때 별도 스레드에서 파티션별 DISTINCT 평가를 활성화하고 교차 스트림 병합을 건너뛰어요. 파티션 수가 코어 수에 가깝고 크기가 거의 같을 때 유리하고, 그렇지 않으면 비용 휴리스틱이 건너뛰어요. max_number_of_partitions_for_independent_distinct와 force_distinct_partitions_independently를 참고해요. FINAL이나 병렬 복제본에서는 적용되지 않아요.
max_rows_in_distinct 또는 max_bytes_in_distinct가 설정된 경우에는 적용되지 않아요. 그런 한도는 전체 병합 결과를 보는 단일 DISTINCT 변환에 의해 적용되므로, 그 전역적 의미를 보존하기 위해 교차 스트림 병합이 유지돼요.
allow_distributed_ddl
true로 설정하면 사용자가 분산 DDL 쿼리를 실행할 수 있어요.
allow_drop_detached
ALTER TABLE … DROP DETACHED PART[ITION] … 쿼리를 허용해요.
allow_dynamic_type_in_join_keys
JOIN 키에서 Dynamic 타입을 사용할 수 있게 해요. 호환성을 위해 추가되었어요. 다른 타입과의 비교가 예상치 못한 결과로 이어질 수 있으므로 JOIN 키에 Dynamic 타입을 사용하는 것은 권장되지 않아요.
allow_executable_tables
executable 테이블 함수와 Executable, ExecutablePool 테이블에서 읽는 것을 허용해요.
이 설정을 비활성화하면 읽기만 거부돼요. 그런 테이블의 생성, 연결, 삭제, 설명은 여전히 작동해요. 이미 시작된 ExecutablePool 프로세스는 종료되지 않고 실행을 유지하지만, 설정이 다시 활성화될 때까지 각 읽기는 여전히 거부돼요.
allow_execute_multiif_columnar
multiIf 함수를 컬럼 단위(columnar)로 실행하는 것을 허용해요.
allow_fuzz_query_functions
쿼리 문자열에 무작위 AST 변형을 적용하는 fuzzQuery 함수를 활성화해요.
allow_general_join_planning
더 복잡한 조건을 처리할 수 있는 더 일반적인 조인 계획 알고리즘을 허용해요. 단, 해시 조인에서만 작동해요. 해시 조인이 활성화되지 않으면 이 설정의 값과 관계없이 일반적인 조인 계획 알고리즘이 사용돼요.
allow_geo_types_in_iceberg
별칭(Aliases): allow_experimental_geo_types_in_iceberg
Iceberg geometry와 geography 필드 타입을 ClickHouse Geometry(Variant) 타입으로 파싱하는 것을 허용해요.
allow_get_client_http_header
현재 HTTP 요청 헤더의 값을 얻을 수 있는 getClientHTTPHeader 함수 사용을 허용해요. Cookie 같은 일부 헤더는 민감한 정보를 포함할 수 있으므로 보안상 기본으로 활성화되지 않아요. X-ClickHouse-*, Authentication, Authorization 헤더는 항상 제한되며 이 함수로 얻을 수 없어요.
allow_hyperscan
Hyperscan 라이브러리를 사용하는 함수를 허용해요. 잠재적으로 긴 컴파일 시간과 과도한 리소스 사용을 피하려면 비활성화해요.
allow_iceberg_remove_orphan_files
iceberg 테이블에 'ALTER TABLE … EXECUTE remove_orphan_files()'를 사용하는 것을 허용해요.
allow_insert_into_iceberg
별칭(Aliases): allow_experimental_insert_into_iceberg
iceberg에 insert 쿼리 실행을 허용해요.
allow_introspection_functions
쿼리 프로파일링을 위한 introspection 함수를 활성화하거나 비활성화해요.
가능한 값:
- 1 — Introspection 함수 활성화.
- 0 — Introspection 함수 비활성화.
참고
- Sampling Query Profiler
- 시스템 테이블 trace_log
allow_join_right_table_sorting
별칭(Aliases): allow_experimental_join_right_table_sorting
true로 설정하고 join_to_sort_minimum_perkey_rows와 join_to_sort_maximum_table_rows 조건이 충족되면 오른쪽 테이블을 키로 재정렬해 left 또는 inner hash join의 성능을 향상시켜요.
allow_kafka_offsets_storage_in_keeper
별칭(Aliases): allow_experimental_kafka_offsets_storage_in_keeper
Kafka 관련 오프셋을 ClickHouse Keeper에 저장하는 것을 허용해요. 활성화하면 Kafka 테이블 엔진에 ClickHouse Keeper 경로와 복제본 이름을 지정할 수 있어요. 결과적으로 일반 Kafka 엔진 대신 커밋된 오프셋을 주로 ClickHouse Keeper에 저장하는 새 유형의 스토리지 엔진이 사용돼요.
allow_key_condition_coalesce_rewrite
coalesce(a_1, ..., a_N) <op> const 형태의 프레디킷(동등하게 ifNull, 또는 상수가 왼쪽에 있는 형태)을 인덱스 분석 전에 논리합 (a_1 <op> const) OR (a_1 IS NULL AND a_2 <op> const) OR ... OR (a_1 IS NULL AND ... AND a_{N-1} IS NULL AND a_N <op> const)으로 재작성해서, 각 a_i에 대한 열별 기본 키와 스킵 인덱스를 사용할 수 있게 해요. coalesce(a, 42, b)나 coalesce(a, b, 42) 같은 부분 상수 형태도 처리해요. 인자 목록은 coalesce 자체처럼 정규화되고(리터럴 NULL은 버려지고 첫 번째 비-Nullable 인자 이후의 인자는 버려짐), 뒤에 오는 비-NULL 상수가 있으면 최종 분기로 내보내져요. 이 재작성은 인덱스 프루닝에 대해 엄격히 부가적이며, 런타임 필터링은 여전히 원래 프레디킷을 사용해요.
또한 nullIf(key, sentinel) = const 형태(sentinel != const이고 타입이 정확히 일치)의 정확한 동등성 프레디킷은 key = const로 재작성되어 key의 기본 키, 파티션, 스킵 인덱스가 직접 그라뉼을 프루닝할 수 있게 해요. 범위 및 논리합 형태의 nullIf 프루닝은 지원되지 않아요.
allow_limit_by_partitions_independently
파티션 표현식이 LIMIT BY 열의 결정적 함수일 때 별도 스레드에서 파티션별 LIMIT BY 평가를 활성화해요.
allow_lossy_numeric_supertype
활성화하면 손실 없는 공통 타입이 없는 숫자 인자 집합(예: Decimal과 Float64, 또는 Int64와 Float64)에 대한 if/multiIf/coalesce/ifNull/array/map이 실패하는 대신 숫자 슈퍼타입(Float64)으로 해석돼요. 정밀도 손실이 있을 수 있어요. 이를 통해 결과를 sum, avg, min, max 같은 값 결합 집계 함수와 직접 사용할 수 있어요. 이는 use_variant_as_common_type과 독립적이에요. use_variant_as_common_type 활성화 여부와 관계없이 숫자 슈퍼타입이 생성돼요. 비활성화하면(기본값) 그런 인자 집합은 공통 타입이 없으므로 use_variant_as_common_type이 활성화된 경우 Variant가 되거나 NO_COMMON_TYPE을 발생해요.
allow_materialized_view_with_bad_select
존재하지 않는 테이블이나 열을 참조하는 SELECT 쿼리로 CREATE MATERIALIZED VIEW를 허용해요. 문법적으로는 유효해야 해요. 갱신 가능한(refreshable) MV에는 적용되지 않아요. MV 스키마를 SELECT 쿼리에서 추론해야 하는 경우(즉 CREATE에 열 목록도 TO 테이블도 없는 경우)에는 적용되지 않아요. 소스 테이블보다 MV를 먼저 만들 때 사용할 수 있어요.
allow_metadata_only_named_tuple_alter
true이면 하위 필드만 추가하는 명명된(named) Tuple에 대한 ALTER MODIFY COLUMN은 메타데이터 전용(데이터 mutation 없음)이에요. 이전의 전체 mutation 동작을 강제하려면 false로 설정해요.
allow_minmax_index_for_json
JSON(Object) 열에 minmax 스킵 인덱스를 만드는 것을 허용해요. JSON 열이 포함할 수 있는 이질적인 Field 값을 minmax 인덱스 직렬화 경로가 처리할 수 없어 기본적으로 비활성화돼요.
allow_named_collection_override_by_default
named collections의 필드를 기본으로 재정의하는 것을 허용해요.
allow_non_metadata_alters
테이블 메타데이터뿐 아니라 디스크의 데이터에도 영향을 주는 alter를 실행하는 것을 허용해요.
allow_nonconst_timezone_arguments
toTimeZone(), fromUnixTimestamp*(), snowflakeIDToDateTime*() 같은 일부 시간 관련 함수에서 비-상수 타임존 인자를 허용해요. 이 설정은 호환성 이유로만 존재해요. ClickHouse에서 타임존은 데이터 타입, 즉 열의 속성이에요. 이 설정을 활성화하면 열 안의 서로 다른 값이 서로 다른 타임존을 가질 수 있다는 잘못된 인상을 줘요. 따라서 이 설정을 활성화하지 마세요.
allow_nullable_tuple_in_extracted_subcolumns
Tuple(...) 타입의 추출된 하위 열이 Nullable(Tuple(...))로 타입이 지정될 수 있는지 제어해요.
false:Tuple(...)을 반환하고 하위 열이 없는 행에는 기본 튜플 값을 사용해요.true:Nullable(Tuple(...))을 반환하고 하위 열이 없는 행에는NULL을 사용해요.
이 설정은 추출된 하위 열 동작만 제어해요. 테이블에 Nullable(Tuple(...)) 열을 만들 수 있는지는 제어하지 않아요. 그것은 enable_nullable_tuple_type이 제어해요.
ClickHouse는 서버 시작 시 로드한 이 설정의 값을 사용해요. SET이나 쿼리 수준 SETTINGS로 변경한 것은 추출된 하위 열 동작을 바꾸지 않아요. 추출된 하위 열 동작을 바꾸려면 시작 프로필 구성(예: users.xml)에서 allow_nullable_tuple_in_extracted_subcolumns를 갱신하고 서버를 재시작해요.
allow_preliminary_distinct_abandoning
예비(스트림별) DISTINCT가 대부분 고유한 입력의 중복 제거를 포기하게 해요. 그렇게 하면 해시 테이블을 해제하고 나머지 행을 통과시켜요. 예비 DISTINCT는 설계상 best-effort예요. 중복 제거를 수행해도 서로 다른 스트림의 중복은 통과되며, 최종 DISTINCT가 그 출력을 다시 중복 제거하므로, 포기는 거의 아무것도 제거하지 않는 것만 포기하고 고유 키의 두 번째 복사본에 대한 메모리와 해싱을 절약해요. 예비 DISTINCT가 한도 힌트(이후 정렬이 없는 일반 LIMIT)를 가질 때는 적용되지 않아요.
allow_rank_dense_rank_arguments
하위 호환성을 위해 RANK와 DENSE_RANK 창 함수에 인자를 전달하는 것을 허용해요.
SQL 표준에 따르면 RANK와 DENSE_RANK는 인자를 0개 받아요. OVER (ORDER BY ...) 창만을 기반으로 행 순위를 매기기 때문이에요. 26.5 이전 ClickHouse 버전에서는 RANK(x) OVER (...) 같은 쿼리가 인자를 조용히 받아 무시했고, 이는 사용자 혼란(보이는 인자가 순위에 영향을 주는 것처럼 보이지만 실제로는 아니었음)을 야기했어요.
이 설정이 false(기본값)이면 RANK와 DENSE_RANK는 어떤 인자도 거부하고 NUMBER_OF_ARGUMENTS_DOESNT_MATCH를 발생해요. true로 설정하면 이전의 관대한 동작이 복원돼요. 인자가 조용히 무시되어 26.5 이전 동작과 일치해요.
allow_reorder_prewhere_conditions
WHERE에서 PREWHERE로 조건을 옮길 때, 필터링을 최적화하기 위해 조건 재정렬을 허용해요.
allow_replace_partition_from_empty_source
ALTER TABLE ... REPLACE PARTITION ... FROM ...가 소스에 해당 파티션의 파트가 없을 때 대상 파티션을 조용히 버리도록 허용해요.
기본적으로 이는 허용되지 않아요. 요청된 파티션에 데이터가 없는 소스로부터의 REPLACE PARTITION은 예외를 발생해요. 이 경우 작업이 효과적으로 대상에 대한 조용한 DROP PARTITION(대상 데이터가 제거되고 아무것도 대체하지 않음)이 되어 우발적 데이터 손실의 흔한 원인이기 때문이에요(#23727 참고).
예를 들어 비어 있는 소스 파티션을 의도적으로 사용해 대상 파티션의 데이터를 지우는 경우 등 이전 동작을 복원하려면 이 설정을 활성화해요. 무조건적인 삭제에는 ALTER TABLE ... DROP PARTITION ...을 선호해요.
allow_settings_after_format_in_insert
INSERT 쿼리에서 FORMAT 뒤의 SETTINGS를 허용할지 여부를 제어해요. SETTINGS의 일부를 값으로 해석할 수 있으므로 사용하지 않는 것이 좋아요.
예:
INSERT INTO FUNCTION null('foo String') SETTINGS max_threads=1 VALUES ('bar');
하지만 다음 쿼리는 allow_settings_after_format_in_insert로만 작동해요:
SET allow_settings_after_format_in_insert=1;
INSERT INTO FUNCTION null('foo String') VALUES ('bar') SETTINGS max_threads=1;
가능한 값:
- 0 — 허용하지 않음.
- 1 — 허용.
사용 사례가 옛 문법에 의존한다면 하위 호환성을 위해서만 이 설정을 사용해요.
allow_simdjson
AVX2 명령을 사용할 수 있으면 'JSON*' 함수에서 simdjson 라이브러리를 사용하는 것을 허용해요. 비활성화하면 rapidjson이 사용돼요.
allow_special_serialization_kinds_in_output_formats
Sparse와 Replicated 같은 특수 직렬화 종류의 열을 전체 열 표현으로 변환하지 않고 출력할 수 있게 해요. 포맷팅 중 불필요한 데이터 복사를 피하는 데 도움이 돼요.
allow_unrestricted_reads_from_keeper
system.zookeeper 테이블에서 제한 없는(경로 조건 없음) 읽기를 허용해요. 편리할 수 있지만 zookeeper에는 안전하지 않아요.
allow_url_wildcard_from_index_pages
별칭(Aliases): allow_experimental_url_wildcard_from_index_pages
HTTP 인덱스 페이지에서 url()과 ENGINE = URL에 와일드카드 확장을 허용해요.
allow_window_partitions_independently
MergeTree 테이블의 파티션 표현식이 창 PARTITION BY 열의 결정적 함수일 때 별도 스레드에서 파티션별 창 함수의 독립적 평가를 활성화해요. 각 파티션은 별도 스트림으로 읽혀 창 정렬 설명에 따라 독립적으로 정렬되고 자신의 창 변환으로 처리되며, 보통 모든 행을 스레드 간에 섞는 해시 분산(hash scatter)을 건너뛰어요. 파티션 수가 코어 수에 가깝고 크기가 거의 같을 때 유리하고, 그렇지 않으면 비용 휴리스틱이 건너뛰어요. max_number_of_partitions_for_independent_window와 force_window_partitions_independently를 참고해요. FINAL이나 병렬 복제본에서는 적용되지 않아요.