groupFormat

groupFormat

그룹의 각 행을 출력 형식(format)을 이용해 포맷하고, 그 결과를 하나의 문자열로 반환하는 집계 함수예요. formatRow와 비슷하지만 그룹 전체에 대해 동작하며 블록 기반 형식을 사용할 수 있어요.

출처: 문서

본문

그룹의 각 행을 출력 형식을 이용해 포맷하고, 포맷된 데이터를 문자열로 반환해요. 이는 formatRow와 비슷하지만 그룹 전체에 대해 동작하며 블록 기반 형식을 사용할 수 있어요.

포맷된 문자열이 만들어지기 전에 각 그룹의 모든 행이 메모리에 누적돼요. 행 수가 매우 많은 그룹에서는 메모리를 상당히 많이 소모할 수 있어요. 메모리 사용을 통제하려면 서브쿼리 안에서 LIMIT를 사용하거나 큰 그룹을 분할하는 것을 고려해 보세요.

구문 (Syntax)

groupFormat(format)(x, y, ...)

파라미터 (Parameters)

  • format — 출력 형식 이름이에요. 예를 들어 JSONEachRow, CSV, TabSeparated 등이 있어요.

인자 (Arguments)

  • x, y, ... — 행으로 포맷할 표현식이에요. 최소 하나의 인자가 필요해요.

반환 값 (Returned value)

그룹에 대한 포맷된 출력을 담은 String이에요.

포맷된 출력의 컬럼 이름은 인자 순서대로 c1, c2, …로 생성돼요. 포맷된 행의 특정 순서는 보장되지 않아요. 쿼리의 형식 설정(예: format_csv_delimiter 또는 output_format_json_quote_64bit_integers)은 집계 함수가 초기화될 때 캡처되어 출력을 만드는 데 사용돼요. output_format_write_statistics 설정은 항상 강제로 꺼지므로, 포맷된 문자열에는 통계 섹션이 포함되지 않아요.

NULL 처리 (NULL handling)

groupArraygroupConcat처럼 groupFormat도 인자 중 하나라도 NULL이면 해당 행을 건너뛰며, 그런 행은 포맷된 출력에 나타나지 않아요. 인자가 nullable이면 결과 타입은 Nullable(String)이 되고, 모든 행이 건너뛰어진 그룹 — 그리고 Nullable(Nothing) 타입의 리터럴 untyped NULL 인자 — 은 일반 Null 컴비네이터를 통해 NULL을 반환해요.

SELECT groupFormat('JSONEachRow')(if(number = 0, NULL, number))
FROM numbers(3);
-- {"c1":1}
-- {"c1":2}

예시 (Examples)

JSONEachRow로 기본 사용:

SELECT groupFormat('JSONEachRow')(number, toString(number))
FROM numbers(3);

결과:

{"c1":0,"c2":"0"}
{"c1":1,"c2":"1"}
{"c1":2,"c2":"2"}

더 알아보기 (Learn more)