Clickhouse: Выполнение linux команды через словари

Created on 31 May 2018  ·  5Comments  ·  Source: ClickHouse/ClickHouse

Добрый день. Подскажите пожалуйста как работает блок execute command в словарях?

Мне нужно выполнять линукс команду, которая будет заменять все html entities на нужные символы.
Например у меня в таблице есть колонка name - в которой есть сущности " '

Мне нужно заменить в имени каждой строки эти сущности на правильный знак
с помощью команды:

echo 'Rib <' | recode html..ascii

Можно ли это сделать с помощью словарей?

comp-dictionary question st-community-taken

Most helpful comment

Ещё из "побочных" эффектов - запрос будет выполняться в несколько потоков, но доступ к словарю будет только одним потоком. Т.е. это выглядит примерно так: все данные быстро и эффективно обрабатываются, ну скажем в 16 потоков, используя все можности процессора, а потом приходит момент когда нужно "заглянуть в словарь" и все резко замедляется, т.к. все 16 потоков "встают в очередь" за данными из словаря, который будет выполняться в одном потоке и тянуть данные блок за блоком (обычно по 65 тысяч записей в блоке).

ЗЫ. Очень хотелось бы иметь возможность "подкрутить" то как кликхаус читает словари - например разрешать читать многопоточно (даже в ущерб тому, что те же самые данные будут многократно запрошены с разных потоков, ну и ограничение на количество одновременно работающих потоков), использовать те же подлючения многократно (в том числе в разных словарах), изменять размер блока который запрашивается "за один раз", сделать способ хранения - "no store / no cache" - когда данные запрашиваются из внешнего источника каждый раз, без проверки времени жизни, хранения предыдущих значений в памяти и т.п. (это конечно очень медленно, но при некоторых сценариях и так лучше, чем то же самое но с бесполезным кэшированием).

All 5 comments

Для работы с executable словарями важно, чтобы STDOUT возвращал обратно такое же значение ключа, какое было передано при использовании функции dictGet*.

Например,
при использовании dictGetUInt64('geoip2', 'asn', tuple(ip)) и формата JSONEachRow:
для STDIN {"ip": "8.8.8.8"} приложение должен вернуть в STDOUT {"ip": "8.8.8.8", "asn": 15169}

По этой причине недостаточно вернуть только результат, нужно вернуть и исходные данные для сопоставления ключа.

_Также хочу обратить внимание, что CH по какой-то причине не отправляет данные в STDIN, до тех пор, пока ваше приложение не начнет запись в STDOUT (см. #1697)_

Ещё из "побочных" эффектов - запрос будет выполняться в несколько потоков, но доступ к словарю будет только одним потоком. Т.е. это выглядит примерно так: все данные быстро и эффективно обрабатываются, ну скажем в 16 потоков, используя все можности процессора, а потом приходит момент когда нужно "заглянуть в словарь" и все резко замедляется, т.к. все 16 потоков "встают в очередь" за данными из словаря, который будет выполняться в одном потоке и тянуть данные блок за блоком (обычно по 65 тысяч записей в блоке).

ЗЫ. Очень хотелось бы иметь возможность "подкрутить" то как кликхаус читает словари - например разрешать читать многопоточно (даже в ущерб тому, что те же самые данные будут многократно запрошены с разных потоков, ну и ограничение на количество одновременно работающих потоков), использовать те же подлючения многократно (в том числе в разных словарах), изменять размер блока который запрашивается "за один раз", сделать способ хранения - "no store / no cache" - когда данные запрашиваются из внешнего источника каждый раз, без проверки времени жизни, хранения предыдущих значений в памяти и т.п. (это конечно очень медленно, но при некоторых сценариях и так лучше, чем то же самое но с бесполезным кэшированием).

@namikhnenko
@evillique
@kekekekule

@filimonov This feature was implemented by @nikitamikhaylov in #8303

Was this page helpful?
0 / 5 - 0 ratings

Related issues

jangorecki picture jangorecki  ·  3Comments

vvp83 picture vvp83  ·  3Comments

zhicwu picture zhicwu  ·  3Comments

innerr picture innerr  ·  3Comments

fizerkhan picture fizerkhan  ·  3Comments