‘arrayJoin’ 함수에 해당하는 세 번째 유형의 함수도 있습니다. 또한 테이블 함수도 별도의 범주로 볼 수 있습니다.
엄격한 타입 지정
공통 부분표현식 제거
결과의 타입
a.N 연산자)와 toFixedString 함수입니다.
상수
NULL 처리
- 함수의 인수 중 하나 이상이
NULL이면 함수 결과도NULL입니다. - 각 함수 설명에 개별적으로 명시된 특별한 동작이 있습니다. ClickHouse 소스 코드에서 이러한 함수는
UseDefaultImplementationForNulls=false를 가집니다.
불변성
고차 함수
-> 연산자와 lambda(params, expr) 함수
-> 연산자를 사용합니다. 화살표 왼쪽에는 형식 매개변수가 오며, 이는 임의의 ID 하나이거나 튜플에 포함된 여러 ID일 수 있습니다. 화살표 오른쪽에는 이러한 형식 매개변수와 테이블의 모든 컬럼을 사용할 수 있는 표현식이 옵니다.
예시:
함수 이름만으로 사용하는 람다
arrayMap(plus, ...)는 plus가 2개의 인수를 받으므로 인수 개수 2를 사용합니다. 따라서 튜플 요소가 람다 인수로 언패킹되는 arrayMap(plus, [(1, 10), (2, 20)])와 같은 튜플 입력에도 작동합니다.
가변 인수 내부 함수(concat처럼 인수를 임의 개수만큼 받을 수 있는 함수)의 경우, 람다의 인수 개수는 배열 인수의 개수로 결정됩니다. 이는 arrayMap, arrayFilter, arrayFold와 같은 고차 함수에는 올바릅니다. 하지만 배열 외에 고정된 비배열 매개변수도 받는 고차 함수(예: arrayPartialSort(f, limit, arr))에서는 가변 인수 함수 이름만 사용하면 잘못된 인수 개수가 적용될 수 있으므로, 이 경우에는 명시적인 람다가 필요합니다.
가변 인수 내부 함수는 튜플 입력도 자동으로 언패킹하지 않습니다. 예를 들어 arrayMap(concat, [('a', 'b'), ('c', 'd')])는 단항 람다로 재작성되며, arrayMap((x, y) -> concat(x, y), [('a', 'b'), ('c', 'd')])와 동일하지 않습니다. 튜플 요소를 분해하여 가변 인수 호출에 사용하려면 명시적인 람다를 사용하십시오.