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)
groupArray와 groupConcat처럼 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"}