UDFs Funções definidas pelo usuário
- UDFs executáveis iniciam um programa ou script externo (Python, Bash etc.) e enviam blocos de dados para ele via STDIN / STDOUT. Use-as para integrar código ou ferramentas existentes sem recompilar o ClickHouse. Elas têm maior sobrecarga por chamada em comparação com opções executadas no mesmo processo e são mais indicadas para lógicas mais pesadas ou quando é necessário um runtime diferente.
- UDFs SQL são definidas com
CREATE FUNCTIONexclusivamente em SQL. Elas são inline/expandidas no plano da consulta (sem separação de processo), o que as torna leves e ideais para reutilizar lógica de expressão ou simplificar colunas calculadas complexas. - UDFs WebAssembly experimentais executam código compilado em WebAssembly dentro de um sandbox no processo do servidor. Elas oferecem menor sobrecarga por chamada do que executáveis externos, com melhor isolamento do que extensões nativas, o que as torna adequadas para algoritmos personalizados escritos em linguagens que podem gerar WASM (por exemplo, C/C++/Rust).
Funções executáveis definidas pelo usuário
Este recurso está disponível em visualização privada no ClickHouse Cloud.
Entre em contato com o suporte do ClickHouse em https://clickhouse.cloud/support para obter acesso.
user_defined_executable_functions_config.
A configuração de uma função contém as seguintes definições:
O comando deve ler os argumentos de
STDIN e enviar o resultado para STDOUT. O comando deve processar os argumentos iterativamente. Ou seja, após processar um fragmento de argumentos, ele deve aguardar o próximo fragmento.
Funções executáveis definidas pelo usuário
Exemplos
UDF de script embutido
test_function_sum manualmente, definindo execute_direct como 0, usando configuração XML ou YAML.
- XML
- YAML
Arquivo
test_function.xml (/etc/clickhouse-server/test_function.xml com as configurações de caminho padrão)./etc/clickhouse-server/test_function.xml
Query
Result
UDF a partir de script Python
STDIN e o retorna como uma string.
Crie test_function usando configuração em XML ou YAML.
- XML
- YAML
Arquivo
test_function.xml (/etc/clickhouse-server/test_function.xml com as configurações de caminho padrão)./etc/clickhouse-server/test_function.xml
Crie um arquivo de script
test_function.py na pasta user_scripts (/var/lib/clickhouse/user_scripts/test_function.py com as configurações de caminho padrão).
Query
Result
Leia dois valores de STDIN e retorne a soma deles como um objeto JSON
test_function_sum_json com argumentos nomeados e o formato JSONEachRow usando configuração XML ou YAML.
- XML
- YAML
Arquivo
test_function.xml (/etc/clickhouse-server/test_function.xml com o caminho padrão)./etc/clickhouse-server/test_function.xml
Crie o arquivo de script
test_function_sum_json.py na pasta user_scripts (/var/lib/clickhouse/user_scripts/test_function_sum_json.py com o caminho padrão).
Query
Result
Use parâmetros na configuração command
command (isso funciona apenas para funções definidas pelo usuário do tipo executable).
Isso também exige a opção execute_direct para evitar vulnerabilidades de expansão de argumentos do shell.
- XML
- YAML
Arquivo
test_function_parameter_python.xml (/etc/clickhouse-server/test_function_parameter_python.xml com as configurações de caminho padrão)./etc/clickhouse-server/test_function_parameter_python.xml
Crie o arquivo de script
test_function_parameter_python.py dentro da pasta user_scripts (/var/lib/clickhouse/user_scripts/test_function_parameter_python.py com as configurações de caminho padrão).
Query
Result
UDF com script de shell
- XML
- YAML
Arquivo
test_function_shell.xml (/etc/clickhouse-server/test_function_shell.xml com o caminho padrão)./etc/clickhouse-server/test_function_shell.xml
Crie o script
test_shell.sh dentro da pasta user_scripts (/var/lib/clickhouse/user_scripts/test_shell.sh com o caminho padrão).
/var/lib/clickhouse/user_scripts/test_shell.sh
Query
Result
Tratamento de erros
Avaliação de expressões de argumentos
&&, || e ?:.
No ClickHouse, os argumentos de funções (operadores) são sempre avaliados.
Isso acontece porque partes inteiras de colunas são avaliadas de uma só vez, em vez de cada linha ser calculada separadamente.
Execução de funções no processamento distribuído de consultas
SELECT f(sum(g(x))) FROM distributed_table GROUP BY h(y),
- se uma
distributed_tabletiver pelo menos dois shards, as funções ‘g’ e ‘h’ serão executadas em servidores remotos, e a função ‘f’ será executada no servidor solicitante. - se uma
distributed_tabletiver apenas um shard, todas as funções ‘f’, ‘g’ e ‘h’ serão executadas no servidor desse shard.
hostName, que retorna o nome do servidor em que está sendo executada para permitir o GROUP BY por servidores em uma consulta SELECT.
Se uma função em uma consulta for executada no servidor solicitante, mas você precisar executá-la em servidores remotos, poderá encapsulá-la em uma função agregada ‘any’ ou adicioná-la a uma chave no GROUP BY.