Hay un tercer tipo de función, al que pertenece la función ‘arrayJoin’. Las funciones de tabla también pueden mencionarse por separado.
Tipado fuerte
Eliminación de subexpresiones comunes
Tipos de resultados
tupleElement (el operador a.N) y la función toFixedString.
Constantes
Procesamiento de NULL
- Si al menos uno de los argumentos de la función es
NULL, el resultado de la función también seráNULL. - Un comportamiento especial que se especifica individualmente en la descripción de cada función. En el código fuente de ClickHouse, estas funciones tienen
UseDefaultImplementationForNulls=false.
Constancia
Funciones de orden superior
Operador -> y funciones lambda(params, expr)
->. En el lado izquierdo de la flecha hay un parámetro formal, que puede ser cualquier ID, o varios parámetros formales: cualquier ID dentro de una tupla. En el lado derecho de la flecha hay una expresión que puede usar estos parámetros formales, así como cualquier columna de la tabla.
Ejemplos:
Nombres de funciones sin más como lambdas
arrayMap(plus, ...) usa aridad 2 porque plus toma dos argumentos, por lo que también funciona con tuplas de entrada como arrayMap(plus, [(1, 10), (2, 20)]), donde los elementos de la tupla se desempaquetan en los argumentos de la lambda.
En el caso de funciones internas variádicas (como concat, que acepta cualquier número de argumentos), la aridad de la lambda pasa a depender del número de argumentos de tipo array. Esto es correcto para funciones de orden superior como arrayMap, arrayFilter y arrayFold. En funciones de orden superior que aceptan parámetros fijos que no son arrays además de arrays —por ejemplo, arrayPartialSort(f, limit, arr)—, los nombres de funciones variádicas sin una lambda explícita pueden producir una aridad incorrecta, en cuyo caso se requiere una lambda explícita.
Las funciones internas variádicas tampoco desempaquetan automáticamente las tuplas de entrada. Por ejemplo, arrayMap(concat, [('a', 'b'), ('c', 'd')]) se reescribe como una lambda unaria y no es equivalente a arrayMap((x, y) -> concat(x, y), [('a', 'b'), ('c', 'd')]). Use una lambda explícita cuando quiera desestructurar elementos de una tupla en una llamada variádica.