Пользовательские функции (User Defined Functions) и Pivot (Crosstab)

732 views
Skip to first unread message

Артур Геращенко

unread,
Aug 26, 2016, 6:03:27 AM8/26/16
to ClickHouse
Здравствуйте,

все в ClickHouse жовольно круто и удобно, однако я не нашел упоминаний о UDF и Pivot.
Подскажите планируется ли добавление этого функционала?

Ну и внешние справочники из PostgreSQL очень ждем (https://groups.google.com/forum/#!searchin/clickhouse/pivot%7Csort:relevance/clickhouse/_nrdV7D0Pa4/STK8Nym9CQAJ)

man...@gmail.com

unread,
Aug 27, 2016, 8:18:38 PM8/27/16
to ClickHouse
Поддержки 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
Должно работать нормально, хотя я подозреваю, что это хуже использования родного клиента, поддержку которого стоило бы добавить.

Артур Геращенко

unread,
Aug 28, 2016, 5:08:31 AM8/28/16
to ClickHouse
Спасибо за ответ,

по PostgreSQL извиняюсь, не отписался, что вчера уже нашел информацию!

По UDF понял, причины стали понятны, 

По pivot ясно, но все же хотелось бы, так как иногда это просто удобно, чем писать конструкции  CASE WHEN для распределения по столбцами, когда надо посте пивотинга забрать на клиент не все данные.

воскресенье, 28 августа 2016 г., 3:18:38 UTC+3 пользователь man...@gmail.com написал:
Reply all
Reply to author
Forward
0 new messages