aggregate_function_input_format / aggregate_functions_null_for_empty 세션 설정
aggregate_function_input_format / aggregate_functions_null_for_empty 세션 설정
이 설정들은 AggregateFunction 타입 열을 입력 포맷이 어떻게 읽을지, 그리고 빈 결과에 대해 집계 함수를 어떻게 처리할지를 결정해요. ClickHouse 소스 코드에서 자동으로 생성된 세션 설정 문서예요.
출처: 문서
본문
이 설정들은 system.settings에서 사용할 수 있으며 소스 코드에서 자동으로 생성돼요.
aggregate_function_input_format
입력 포맷이 AggregateFunction 타입의 열을 읽는 방법이에요.
가능한 값:
state— 집계 함수의 직렬화된 상태로서, 출력 포맷이 쓰는 방식이에요(기본값).value— 집계 함수 인자의 값 또는, 여러 인자가 있다면 인자들의 튜플이에요. 이 값을 집계해 상태를 구성해요.array— 위value옵션에서 설명한 값들의 배열이에요. 배열의 모든 요소를 집계해 상태를 구성해요.
value 및 array 모드에서 포맷은 열을 값들의 타입을 가진 것처럼 읽어요. AggregateFunction(f, T)이면 T, AggregateFunction(f, T1, T2)이면 Tuple(T1, T2), array 모드에서는 그 Array로 읽어요. 값들은 포맷이 해당 타입에 사용하는 표현으로 기록돼요: 텍스트 포맷에서는 숫자나 문자열, JSON 포맷에서는 JSON 배열, RowBinary나 Native에서는 타입의 바이너리 인코딩, Parquet에서는 해당 타입의 열 등이 그것이에요. 이것은 모든 입력 포맷에 적용되며, Array, Tuple 또는 Map에 중첩된 AggregateFunction에도 적용돼요.
예시
다음 구조의 테이블에 대해:
CREATE TABLE example (
user_id UInt64,
avg_session_length AggregateFunction(avg, UInt32)
);
aggregate_function_input_format = 'value'일 때:
INSERT INTO example FORMAT CSV
123,456
INSERT INTO example FORMAT JSONEachRow
{"user_id": 123, "avg_session_length": 456}
aggregate_function_input_format = 'array'일 때:
INSERT INTO example FORMAT CSV
123,"[456,789,101]"
INSERT INTO example FORMAT JSONEachRow
{"user_id": 123, "avg_session_length": [456, 789, 101]}
참고: value와 array 포맷은 삽입 중 값을 생성하고 집계해야 하므로 기본 state 포맷보다 느려요.
aggregate_functions_null_for_empty
쿼리의 모든 집계 함수를 다시 작성하고 -OrNull 접미사를 추가할지 여부를 활성화·비활성화해요. SQL 표준 호환을 위해 활성화하세요. 분산 쿼리에서 일관된 결과를 얻기 위해 쿼리 다시 작성으로 구현돼요(count_distinct_implementation 설정과 유사).
가능한 값:
- 0 — 비활성화.
- 1 — 활성화.
예시
집계 함수가 있는 다음 쿼리를 생각해보세요:
SELECT SUM(-1), MAX(0) FROM system.one WHERE 0;
aggregate_functions_null_for_empty = 0이면 다음을 생성해요:
┌─SUM(-1)─┬─MAX(0)─┐
│ 0 │ 0 │
└─────────┴────────┘
aggregate_functions_null_for_empty = 1이면 결과는 다음과 같아요:
┌─SUMOrNull(-1)─┬─MAXOrNull(0)─┐
│ NULL │ NULL │
└───────────────┴──────────────┘