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 옵션에서 설명한 값들의 배열이에요. 배열의 모든 요소를 집계해 상태를 구성해요.

valuearray 모드에서 포맷은 열을 값들의 타입을 가진 것처럼 읽어요. AggregateFunction(f, T)이면 T, AggregateFunction(f, T1, T2)이면 Tuple(T1, T2), array 모드에서는 그 Array로 읽어요. 값들은 포맷이 해당 타입에 사용하는 표현으로 기록돼요: 텍스트 포맷에서는 숫자나 문자열, JSON 포맷에서는 JSON 배열, RowBinaryNative에서는 타입의 바이너리 인코딩, 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]}

참고: valuearray 포맷은 삽입 중 값을 생성하고 집계해야 하므로 기본 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 │
└───────────────┴──────────────┘

더 알아보기 (Learn more)