Поддержки UDF нет.
Причина состоит в том, что для этого пришлось бы фиксировать интерфейс для разработки UDF.
В связи с тем, что данные в ClickHouse не только хранятся по столбцам, но и обрабатываются тоже массивами - кусочками столбцов,
этот интерфейс был бы сложным, неудобным в использовании, и к тому же, слишком сильно зависящим от внутреннего расположения данных в памяти, которое хотелось бы иметь возможность без проблем менять.
Для примера, рассмотрим функцию, принимающую String и возвращающую String.
При разработке хорошего интерфейса, возникает слишком много вопросов. Например, как обеспечить ресайз буфера для расположения результата. Или, как обеспечить управление состоянием, которое может инициализироваться один раз на много вызовов - скажем, для работы регекспов, для поиска подстроки в строке. Как сделать, чтобы часто вызываемые функции для обеспечения работы UDF инлайнились. Эти вопросы решаемы, но ведут к сложному интерфейсу, который будет трудно сделать так, чтобы это не потребовало затем частых изменений, и им будет трудно пользоваться.
Можно было бы сделать простейший интерфейс, который позволил бы даже подключать внешние функции из Python, JavaScript и т. п.
Такой интерфейс привёл бы к необходимости создания временных объектов и лишних копирований, а в некоторых случаях даже перекодировки данных.
В ClickHouse функции сделаны максимально лёгкими - издержки на их выполнение сравнимы с затратами на лишнее копирование.
А значит, если допустить лишние копирования, то функции будут работать существенно медленнее.
ClickHouse обычно используется для онлайн запросов - то есть, выполнения относительно несложных запросов сразу после того, как пользователь нажал на кнопку. При таком сценарии, нагрузка является "импульсной": в среднем, на сервере используется не 100% CPU, но когда выполняется запрос, нужно использовать все ресурсы, чтобы выполнить запрос как можно быстрее.
Это контрастирует с задачами оффлайн обработки данных: подготовки, очистки, сложных преобразований данных - которые могут делаться продолжительное время. Для них обычно используется другие системы. Из-за того, что такие задачи могут быть размазаны по времени, становится допустимо использовать менее оптимальные по CPU решения задач, в том числе, произвольный пользовательский код. ClickHouse мог бы поддерживать запуск произвольного пользовательского кода на кластере, но для таких задач существует Hadoop.
Если вы хотите добавить в ClickHouse свои функции, самый простой способ - добавить их непосредственно в ClickHouse. То есть, они будут встроены в ClickHouse и будут поддерживаться вместе с ClickHouse.
Встроенной операции pivot нет. Эта операция зачастую реализуется на стороне клиента, который занимается отображением данных.
Внешний словарь из PostgreSQL можно сейчас подключить через ODBC.
https://groups.google.com/d/msg/clickhouse/1-Og3YVCtlg/mrG43q6_AwAJДолжно работать нормально, хотя я подозреваю, что это хуже использования родного клиента, поддержку которого стоило бы добавить.