• 01 March 2020 (23 messages)
  • https://t.me/clickhouse_ru
    Если у вас были данные на одном сервере
    Вы добавили второй
    Прописати remote_servers и сделали distributed таблицу вы убьете перформанс

    Нужно данные между серверами распределить

    Почитайте в доке

    distributed тпблица фактически это правило разбиения при записи с очередью недолитых партоа если шард недоступен
    А при чтении. Вообще стучится на все шарды и старается если можно аггрегировать на них
    Но часто запросы так пишут что данные для аггрегироаания приходится ташить на один хост
  • https://t.me/clickhouse_ru
    @alexeychernykh #145182 01:45 PM, 01 Mar 2020
    Подскажите, пожалуйста, в логах вижу Index IX_EndDateTime has dropped 2 granules. Это хорошо или плохо? Индекс помог или нет в этом случае?
  • https://t.me/clickhouse_ru
    он помог и отбросил 2 куска с ненужными данными, но тут нужно понимать что (как я понимаю это дополнительный индекс) его использование тоже не бесплатно
  • https://t.me/clickhouse_ru
    Да это skipping index, если dropped 0 granules это значит не помог?
  • https://t.me/clickhouse_ru
    д
  • https://t.me/clickhouse_ru
    @unamedrus #145186 01:52 PM, 01 Mar 2020
    они оч специальные и дадут прирост производительности в достаточно редких случаях
  • https://t.me/clickhouse_ru
    спасибо, буду смотреть
  • https://t.me/clickhouse_ru
    @alexeychernykh #145188 02:02 PM, 01 Mar 2020
    есть возможность отключить использование skipping index'ов для конкретного запроса, чтобы потестить с ними и без?
  • https://t.me/clickhouse_ru
    вы например построили индекс по полю X , можно написать where identity(X) = ... , или where X+0 = ....
  • https://t.me/clickhouse_ru
    Понял, спасибо!
  • @kazennikov #145194 04:35 PM, 01 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @vixtrime #145195 05:17 PM, 01 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @edyya #145196 06:57 PM, 01 Mar 2020
    Подскажите, пожалуйста, по синтаксису select columns('^x')
    Как вывести только колонки начинающиеся x понятно, а вот как Исключить колонки начинающиеся на x ( или не содержат `x`) ?
  • https://t.me/clickhouse_ru
    а перенести это на момент select к базе не получится?
  • https://t.me/clickhouse_ru
    @lnuynxa #145199 07:01 PM, 01 Mar 2020
    3 столбца и 5 лямов в день это очень немного
    и какой нибудь ORDER BY (id, date) то будет довольно быстро
  • https://t.me/clickhouse_ru
    Никак. Ещё не сделали.
  • https://t.me/clickhouse_ru
    @edyya ↶ Reply to #145203 #145204 07:07 PM, 01 Mar 2020
    Спасибо
  • https://t.me/clickhouse_ru
    нет, просто делать агрегацию уже во время запросов к базе данных
  • https://t.me/clickhouse_ru
    Раз в день считать и складывать он результат в отдельную таблицу
  • https://t.me/clickhouse_ru
    SELECT max(date), argMax(value, date) - argMin(value,date) WHERE date > '' GROUP BY id
  • https://t.me/clickhouse_ru
    @den_crane #145209 07:15 PM, 01 Mar 2020
    sumIf(col, date=today()) - sumIf... Group by id
  • https://t.me/clickhouse_ru
    @438733862 #145211 07:21 PM, 01 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @JuliaFilaretova #145212 07:41 PM, 01 Mar 2020
    Joined.
  • 02 March 2020 (145 messages)
  • https://t.me/clickhouse_ru
    @portmare #145213 05:33 AM, 02 Mar 2020
    Всем привет!
    Скажите, кто знает, CROSS JOIN работает в MATERIALIZED VIEW при чтении из кафки? Джойнится небольшой словарь, чтобы можно было заполнить нулями данные, id которых нет в выборке из кафки.
    Или в MV вообще джойны не работают?
  • @1045373893 #145214 06:32 AM, 02 Mar 2020
    Joined.
  • @1045373893 #145215 06:51 AM, 02 Mar 2020
    Ребята, всем привет ;-)
  • @plshn #145216 07:42 AM, 02 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145217 07:58 AM, 02 Mar 2020
    Всем привет, при запросе через http, сервер вырубается. В логах прописаны такие строки
    2020.03.02 13:41:47.048545 [ 2873 ] {e206d2c2-2a88-45e9-b30d-6ec2e93aa8d6} <Error> executeQuery: Code: 60, e.displayText() = DB::Exception: Table KPI.firstkpi doesn't exist. (version 19.13.2.19) (from [::ffff:172.28.171.181]:49873) (in query: Select * from KPI.firstkpi FORMAT CSVWithNames ), Stack trace:

    0. clickhouse-server(StackTrace::StackTrace()+0x30) [0x6f28600]
    1. clickhouse-server(DB::Exception::Exception(std::string const&, int)+0x1f) [0x316365f]
    2. clickhouse-server(DB::Context::getTableImpl(std::string const&, std::string const&, DB::Exception*) const+0x39b) [0x5d4d09b]
    3. clickhouse-server(DB::Context::getTable(std::string const&, std::string const&) const+0x5f) [0x5d4d42f]
    4. clickhouse-server(DB::InterpreterSelectQuery::InterpreterSelectQuery(std::shared_ptr<DB::IAST> const&, DB::Context const&, std::shared_ptr<DB::IBlockInputStream> const&, std::shared_ptr<DB::IStorage> const&, DB::SelectQueryOptions const&, std::vector<std::string, std::allocator<std::string> > const&)+0x11e9) [0x5daca59]
    5. clickhouse-server(DB::InterpreterSelectQuery::InterpreterSelectQuery(std::shared_ptr<DB::IAST> const&, DB::Context const&, DB::SelectQueryOptions const&, std::vector<std::string, std::allocator<std::string> > const&)+0x3b) [0x5dacebb]
    6. clickhouse-server(DB::InterpreterSelectWithUnionQuery::InterpreterSelectWithUnionQuery(std::shared_ptr<DB::IAST> const&, DB::Context const&, DB::SelectQueryOptions const&, std::vector<std::string, std::allocator<std::string> > const&)+0x758) [0x5dc84a8]
    7. clickhouse-server(DB::InterpreterFactory::get(std::shared_ptr<DB::IAST>&, DB::Context&, DB::QueryProcessingStage::Enum)+0x120) [0x5d92b00]
    8. clickhouse-server() [0x5ebbd81]
    9. clickhouse-server(DB::executeQuery(DB::ReadBuffer&, DB::WriteBuffer&, bool, DB::Context&, std::function<void (std::string const&)>, std::function<void (std::string const&)>)+0x1ef) [0x5ebe71f]
    10. clickhouse-server(DB::HTTPHandler::processQuery(Poco::Net::HTTPServerRequest&, HTMLForm&, Poco::Net::HTTPServerResponse&, DB::HTTPHandler::Output&)+0x16dc) [0x31b19fc]
    11. clickhouse-server(DB::HTTPHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&)+0x443) [0x31b4bb3]
    12. clickhouse-server(Poco::Net::HTTPServerConnection::run()+0x2af) [0x6a76f2f]
    13. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x6a6dc7f]
    14. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x166) [0x6a6e046]
    15. clickhouse-server(Poco::PooledThread::run()+0x77) [0x70fd527]
    16. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x70f96e8]
    17. clickhouse-server() [0x76cb73f]
    18. /lib64/libpthread.so.0(+0x7dd5) [0x7f524afa7dd5]
    19. /lib64/libc.so.6(clone+0x6d) [0x7f524a9ceead]
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145218 07:58 AM, 02 Mar 2020
    можете, пожалуйста, сказать причину
  • @bashlykevich #145219 08:02 AM, 02 Mar 2020
    Table KPI.firstkpi doesn't exist
    а таблица существует?
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145220 08:02 AM, 02 Mar 2020
    нет
  • @bashlykevich #145221 08:02 AM, 02 Mar 2020
    и прям сервер умирает?
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145222 08:02 AM, 02 Mar 2020
    он перестает отвечать
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145223 08:02 AM, 02 Mar 2020
    хотя работает в фоновом режиме
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145224 08:02 AM, 02 Mar 2020
    судя по логам
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145225 08:03 AM, 02 Mar 2020
    я именно этого понять и не могу
  • @bashlykevich #145226 08:03 AM, 02 Mar 2020
    а через cli зайти?
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145227 08:03 AM, 02 Mar 2020
    cli?
  • https://t.me/clickhouse_ru
    command line interface
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145229 08:04 AM, 02 Mar 2020
    ClickHouse client version 19.13.2.19.
    Connecting to localhost:9000 as user default.
    Code: 210. DB::NetException: Connection reset by peer, while reading from socket ([::1]:9000)
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145230 08:04 AM, 02 Mar 2020
    пробовал
  • @qhang #145231 09:05 AM, 02 Mar 2020
    возможно сервер таки умирает, а systemd его перезапускает и выглядит как будто все ок
  • https://t.me/clickhouse_ru
    а может ли он не отвечать из-за того что было много единовременных запросов? просто тестили одну систему и, как мне кажется, человек накликал кнопку, потому что этот лог выводился 4 раза подряд
  • https://t.me/clickhouse_ru
    @liz_ko #145233 09:14 AM, 02 Mar 2020
    Joined.
  • ^[^x]
  • https://t.me/clickhouse_ru
    @hombit #145236 09:49 AM, 02 Mar 2020
    Боюсь, что это холиварный вопрос, но какой асинхронный клиент для питона стоит использовать? Нашел два:
    https://github.com/mymarilyn/aioch
    https://github.com/maximdanilchenko/aiochclient

    Поделитесь опытом, если пробовали какой-нибудь из них
  • asyncio + REST
  • @AS12389 #145238 09:51 AM, 02 Mar 2020
    Немного оффтоп конечно.
  • @AS12389 #145239 09:51 AM, 02 Mar 2020
    Большинству моим задачам с головой хвататет.
  • https://t.me/clickhouse_ru
    @hombit #145240 09:53 AM, 02 Mar 2020
    То есть просто асинхронный веб-клиент и руками написанные запросы?
  • @takikvara #145241 09:58 AM, 02 Mar 2020
    Привет, есть кто может хелпануть по куберу?
  • @181568392 #145242 10:00 AM, 02 Mar 2020
    подскажите, какие функции есть в кх по работе с регулярками, нужна функция по поиску значений в колонке в соответствии с регуляркой
  • https://t.me/clickhouse_ru
    @OlgaSvitneva #145243 10:01 AM, 02 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @Zu1Ke0pai5 #145244 10:23 AM, 02 Mar 2020
    Joined.
  • @181568392 #145245 10:26 AM, 02 Mar 2020
    подскажите пожалуйста еще как обрабатывать null, привычная функция is null, is not null не работает
  • https://t.me/clickhouse_ru
    @Zu1Ke0pai5 #145246 10:28 AM, 02 Mar 2020
    Подскажите пожалуйста, почему может такое происходить? Я явно указываю базу, а клиент пытается подключиться к "default".
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    Могу ошибаться, а разве нужно писать --database при указании базы?
  • благодарю, а как написать в case when value = null then 1
  • @181568392 #145252 10:36 AM, 02 Mar 2020
    case when value isNull then 1 так не работает
  • https://t.me/clickhouse_ru
    when isNull(value) then
  • https://t.me/clickhouse_ru
    @forward32 #145254 11:06 AM, 02 Mar 2020
    А с какой версии КХ появился CREATE DICTIONARY?
  • https://t.me/clickhouse_ru
    @Zu1Ke0pai5 #145255 11:16 AM, 02 Mar 2020
    Пытаюсь импортнуть данные в таблицу, используя команду "zcat ./cl_crm_access.tsv.gz | clickhouse-client --host ****.mdb.yandexcloud.net --user dude --database test --port 9440 --password=123123123123 --multiquery --query="INSERT INTO test.crm_access FORMAT TabSeparated"", на что мне отвечает "Code: 32. DB::Exception: Attempt to read after eof". Это баг какой или что?
  • https://t.me/clickhouse_ru
    @m1khal3v #145256 11:42 AM, 02 Mar 2020
    а multiquery зачем?
  • https://t.me/clickhouse_ru
    Если мультиквери ключик, то запрос надо точкой с запятой закончить.
  • https://t.me/clickhouse_ru
    @OlegTimofeev #145258 11:50 AM, 02 Mar 2020
    Добрый день, каким запросом можно получить кол-во строк в таблице в разбивке по номеру шарда без выгрузки целых колонок куда-либо? Может кто сталкивался с этим?
  • @YaroslavMakarov #145259 11:52 AM, 02 Mar 2020
    Коллеги, нет ли какого-то параметра, чтобы ClickHouse не генерил текстовую ошибку, а просто завершал запрос?
    Потоково выгружаем логи в файл и, если возникает какая-то ошибка в середине выгрузки, то эта ошибка попадает в итоговый файлик.
  • https://t.me/clickhouse_ru
    А, остался с прошлого раза. Но я его убрал и ничего не поменялось.
  • https://t.me/clickhouse_ru
    Поставил точку с запятой, тоже не помогло.(
  • https://t.me/clickhouse_ru
    @m1khal3v #145262 12:01 PM, 02 Mar 2020
    а в конце файла TSV точно есть EOL ?
  • https://t.me/clickhouse_ru
    Этот TSV clickhouse же и выплюнул. Посмотреть возможности нет, он в сжатом виде весит в 6гб. Сжимал пайпом через gzip.
  • https://t.me/clickhouse_ru
    @Zu1Ke0pai5 #145264 12:04 PM, 02 Mar 2020
    А экспортировал через clickhouse-client --query="SELECT * FROM crm_access FORMAT TabSeparated;" --password=*** | gzip > cl_crm_access.tsv.gz
  • https://t.me/clickhouse_ru
    @bass4x4 #145265 12:06 PM, 02 Mar 2020
    Всем привет. Как можно смигрировать тип колонки из string в Array(string) при помощи splitByChar?
  • https://t.me/clickhouse_ru
    @Zu1Ke0pai5 #145266 12:07 PM, 02 Mar 2020
    А, да. С форматами native, csv тож самое.
  • https://t.me/clickhouse_ru
    странный вопрос. как стринг выглядит?
  • https://t.me/clickhouse_ru
    @tsondinov #145268 12:11 PM, 02 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    19.17
  • https://t.me/clickhouse_ru
    Баг. Какая версия кх?
  • https://t.me/clickhouse_ru
    Буквы латинского алфавита) Я нашел решение только через миграция в другую таблицу и обратно
  • https://t.me/clickhouse_ru
    19.14
  • https://t.me/clickhouse_ru
    И что типа каждая буква это элемент массива?
    Типа 'abc' -> ['a','b','c'] ?
  • https://t.me/clickhouse_ru
    Нет, строчка без разделителей. Я пробовал modify column Array(String), но тогда в итоге получаются пустые массивы. Не нашел другой функции, которая могла бы просто перегнать String в Array (String)
  • https://t.me/clickhouse_ru
    [ colname ]
  • https://t.me/clickhouse_ru
    А кх не падает? select uptime()
  • https://t.me/clickhouse_ru
    Modify column Array([columname])?
  • https://t.me/clickhouse_ru
    Просто [ colname ] -- превратит строку в массив с одним элементом
  • https://t.me/clickhouse_ru
    Работают , скорее всего вам нужен join_use_nulls=1
    и лучше обойтись без join, покажите пример что на входе и что надо заполнить, что получить на выходе
  • https://t.me/clickhouse_ru
    Не падает. Он вообще managed в яндексе. И мощности выбраны нормальные.
  • https://t.me/clickhouse_ru
    @Zu1Ke0pai5 #145282 12:33 PM, 02 Mar 2020
    Так, я нашёл причину. Стучался без ssl.
  • https://t.me/clickhouse_ru
    @Zu1Ke0pai5 #145283 12:33 PM, 02 Mar 2020
    Спасибо всем принявшим участие.)
  • https://t.me/clickhouse_ru
    в кафке:
    | received_at | mc_id | weight |
    | 2020-03-02 00:00:01 | 1 | 100 |

    в словаре есть другие mc:
    | id | name | connection_type |
    | 1 | AAA | active |
    | 2 | BBB | active |
    | 3 | CCC | active |

    в итоге должно быть:
    | received_at | mc_id | weight |
    | 2020-03-02 00:00:00 | 1 | 100 |
    | 2020-03-02 00:00:00 | 2 | 0 |
    | 2020-03-02 00:00:00 | 3 | 0 |

    мой запрос вот такой:
    CREATE MATERIALIZED VIEW count_successes_mv`ON CLUSTER staging TO `.count_successes_distributed` (
    `received_at` DateTime,
    `mc_id` UInt16,
    `value` UInt32
    ) AS
    SELECT
    toStartOfInterval(received_at, toIntervalSecond(10)) AS received_at,
    toUInt16(multiIf(mc_id=id,mc_id,id)) AS mc_id,
    toUInt32(multiIf(mc_id=id,count(),0)) AS value
    FROM `.all_messages_kafka`
    CROSS JOIN mc_ids
    WHERE
    resp = 0 AND connection_type='active'
    GROUP BY
    received_at,
    mc_id,
    id

    но он не работает
  • https://t.me/clickhouse_ru
    Каким должен быть expression?
    Alter table TABLENAME modify column COLUMNNAME expression
  • https://t.me/clickhouse_ru
    @DimitryGoryaev #145286 01:24 PM, 02 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @edyya ↶ Reply to #145234 #145287 01:53 PM, 02 Mar 2020
    Круто! спасибо
  • https://t.me/clickhouse_ru
    @sizovilya #145288 02:24 PM, 02 Mar 2020
    Привет! Как в clickhouse можно указать сортировку данных в партиции по убыванию (DESC) и можно ли вообще ?
    Есть таблица:
    CREATE TABLE IF NOT EXISTS news.news_2
    (
    id UUID,
    entityId String,
    entityType String,
    userId String,
    createTime Int64,
    ) ENGINE = MergeTree
    PARTITION BY userId
    ORDER BY createTime DESC;

    Я имею ввиду строку ORDER BY createTime DESC;
  • https://t.me/clickhouse_ru
    @sizovilya #145289 02:26 PM, 02 Mar 2020
    Задача которую хочется решить - чтобы данные были отсортированы по createTime по убыванию времени и запрос SELECT * FROM news_2 WHERE userId = '...' отдавал данные как можно быстрее.
  • https://t.me/clickhouse_ru
    @sizovilya #145290 02:27 PM, 02 Mar 2020
    Тоесть запрос всегда будет выбирать данные по userId
  • https://t.me/clickhouse_ru
    проблема такого подхода в том что в кафку кладем mc_id 1,2,3 , случайно они попадают в 3 разных блока, и MV вставляет 9 строк, если случайно попадают в 1 блок, MV вставляет 3 строки

    FROM .all_messages_kafka x
    CROSS JOIN mc_ids y on x.mc_id = y.mc_id
  • https://t.me/clickhouse_ru
    но все равно нельзя написать регулярку не выбирай только колонку X, если есть другие колонки XX, X1, если их полностью не перечислять
  • https://t.me/clickhouse_ru
    можно ORDER BY (-createTime) -- но это бессмысленно
  • https://t.me/clickhouse_ru
    @den_crane #145294 02:33 PM, 02 Mar 2020
    select desc и так неплохо работает по ORDER BY createTime, но медленее конечно
  • https://t.me/clickhouse_ru
    а что SELECT * FROM news_2 WHERE userId = '...' order by createTime desc не использует индекс?
  • https://t.me/clickhouse_ru
    Индекс добавлю. Просто хотелось решить задачу без дополнительных действий. Например cassandra/scylla/dynamo умеют сразу класть данные в партицию в нужном порядке, думал в клике из коробки есть нечто подобное.
  • https://t.me/clickhouse_ru
    a нет, alter modify такое не умеет, только если сначала alter update и потом alter modify
  • https://t.me/clickhouse_ru
    нет, и насколько я понимаю никогда не будет, вы проверьте сначала с таблицей ORDER BY createTime и так более менее работает
  • https://t.me/clickhouse_ru
    @sizovilya #145300 02:41 PM, 02 Mar 2020
    @den_crane спасибо, потесчу
  • @dosereda #145301 03:05 PM, 02 Mar 2020
    Подскажите как пробросить variable в запросе через javascript
    делаю следующее:

    const test = "2020-03-01 00:00:00";
    const query = `
    SELECT
    ...
    WHERE
    EventTime >= toDateTime(${test})
    `;

    и, получаю ошибку:

    DB::Exception: Syntax error: failed at position 270 (line 13, col 44): 00:00:00)\
  • https://t.me/clickhouse_ru
    @den_crane #145302 03:09 PM, 02 Mar 2020
    toDateTime('${test}')
  • @freedomtobe #145303 03:09 PM, 02 Mar 2020
    Joined.
  • Спасибо, так работает..
  • https://t.me/clickhouse_ru
    То есть только миграция в другую таблицу может помочь?
  • Так задача была получить колонки , не начинающиеся на Х
  • https://t.me/clickhouse_ru
    ????

    create table M (A String, B Int64) Engine=MergeTree order by B;

    insert into M values ('s', 1) ('xxx',2);

    alter table M update A = toString([A]) where 1;

    подождать 8 минут, пока дропнутся неактивные (или detach table M; / attach table M;)
    alter table M modify column A Array(String);
  • https://t.me/clickhouse_ru
    @den_crane #145308 03:27 PM, 02 Mar 2020
    хотя нет, фигня какая-то
  • @kamila_musina #145309 03:28 PM, 02 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    Говорит cannot parse [
  • https://t.me/clickhouse_ru
    @den_crane #145311 03:28 PM, 02 Mar 2020
    и вообще неправльно работает по крайней мере 19.17.9.60, похоже alter table modify сломался, все работало в 19.14
  • https://t.me/clickhouse_ru
    @edyya ↶ Reply to #145292 #145312 03:47 PM, 02 Mar 2020
    Судя по всему, все же можно:
    select columns('[^database]') from system.merges;
    select columns('[^databas]') from system.merges;
  • https://t.me/clickhouse_ru
    alter table update block_array = cast([column] as Array(String)) where 1; если кому-то еще понадобится)
  • https://t.me/clickhouse_ru
    create table T(cat String, catcat String, cacat String, catca String, dog String) Engine=Memory;

    как выбрать все колонки не cat и не dog ? ('catcat', 'cacat', 'catca')
  • https://t.me/clickhouse_ru
    @baygeldin #145315 04:05 PM, 02 Mar 2020
    Joined.
  • @460254773 #145316 04:29 PM, 02 Mar 2020
    всем привет!
    есть задача перелить таблицу
    выполняю через INSERT INTO SELECT FROM
    и очередной раз процесс завершается с такой ошибкой

    ↗ Progress: 415.67 million rows, 254.44 GB (196.53 thousand rows/s., 120.30 MB/s.) █████████████████████████████████████████▎ 35Received exception from server (version 19.17.6):
    Code: 246. DB::Exception: Received from localhost:9000. DB::Exception: Received from clickhouse-node4.intra:9000. DB::Exception: Bad size of marks file '/var/lib/clickhouse/data/stats/antifraud_statistics_shows_goods_1574781952/20191223_3076_3078_1/resolution_width.mrk': 0, must be: 16.
    0 rows in set. Elapsed: 2116.742 sec. Processed 415.67 million rows, 254.44 GB (196.37 thousand rows/s., 120.20 MB/s.)
  • @460254773 #145317 04:30 PM, 02 Mar 2020
    сталкивались ли кто то с подобным?
  • @freedomtobe #145318 04:32 PM, 02 Mar 2020
    Добрый вечер, прошу помощи с созданием таблицы для однонодового сетапа. Количество созданных партиций ( папок в директории базы: 216216 ) и загрузка диска под 98% в iostat / iotop clickhouse-server подсказывает мне что что-то я делаю не так.

    Назначение таблицы:
    хранение отсортированных по времени (time_stamp UInt64) цен для инструментов (UInt64)

    Количество записей и её использование:
    несколько миллиардов за год для 200т инструментов
    Запросы к таблице будут поинструментно в рамках одного дня или для поточных данных
    Организация дискового пространства таблицы:
    YYYYMMDD + INSTRUMENT_ID

    Создал таблицу следующим образом:
    CREATE TABLE test.onetick_bbo ( time_stamp UInt64, RECEIVE_TIME UInt64, BID_SIZE Float64, BID_PRICE Float64, ASK_PRICE Float64, ASK_SIZE Float64, source_venue String, TRADING_PHASE String, VENUE_TRADING_STATUS String, TRADING_STATUS String, SRC_DB String, INSTRUMENT_ID UInt64, SYMBOL_NAME String, NODE_NAME String ) ENGINE = MergeTree() PARTITION BY (toYYYYMM(toDate(time_stamp), INSTRUMENT_ID) ORDER BY (time_stamp, INSTRUMENT_ID) SETTINGS index_granularity = 8192

    При попытке записать 400 миллионов записей система отваливается по timeout 900 port, но успевает записать 6316417 записей

    > time clickhouse-client --query "INSERT INTO test.onetick_bbo FORMAT CSV" --max_partitions_per_insert_block=800 --max_insert_block_size=1000000 < /opt/tbricks/tmp/onetick_data/get_bbo.output.without_head

    Дальнейшая работа с базой осложняется, тем что запрос на любые 5 записей выполняется очень долго - причина высокая загрузка дисков

    21018 be/4 clickhou 2.23 M/s 0.00 B/s 0.00 % 78.32 % clickhouse-server --daemon --pid-file=/var/run/clickhouse-server/clickhouse-server.pid --config-file=/etc/clickhouse-server/config.xml [QueryPipelineEx]

    К базе в этот момент запросов нет

    Обновление:

    загрузка диска в фоновом режиме прекратилась, предположу база закончила служебные операции, но столкнулся с другой проблемой, которая подсказывает мне что я неправильно создал таблицу:
    time clickhouse-client --query "SELECT * FROM test.onetick_bbo ORDER BY time_stamp ASC LIMIT 10;"
    Received exception from server (version 20.3.1):
    Code: 241. DB::Exception: Received from localhost:9000. DB::Exception: Memory limit (for query) exceeded: would use 9.32 GiB (attempt to allocate chunk of 4211606 bytes), maximum: 9.31 GiB: (while reading column time_stamp): (while reading from part /opt/clickhouse/data/test/onetick_bbo/206911-210946795_46260_46260_0/ from mark 0 with max_rows_to_read = 8192): While executing MergeTree.
  • @176504465 #145319 04:32 PM, 02 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    попробуйте optimize table antifraud_statistics_shows_goods_1574781952 partition 20191223
  • https://t.me/clickhouse_ru
    sudo dmesg |tail -100
    там точно не oom-killer убивает КХ ?
  • https://t.me/clickhouse_ru
    ну так очевидно что с таким кол-вом партов!!! и партиций никуда не поедем.

    ENGINE = MergeTree() PARTITION BY toYYYYMM(time_stamp) ORDER BY (INSTRUMENT_ID, time_stamp)
  • спасибо, пробую
  • @261638839 #145324 04:57 PM, 02 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @polyanin_mike #145325 04:57 PM, 02 Mar 2020
    Joined.
  • ага спасибо!
    пробую
  • @261638839 #145327 05:03 PM, 02 Mar 2020
    Привет всем!
    Пробую LowCardinality(String). Есть требование - быстро получать список уникальных значений колонки (для полноценной замены словарей). Делаю запрос с group by - получается долго. Где-то 0.7сек на млрд строк (и время растёт пропорционально числу строк), т.е. очевидно, что запрос не использует словарь а пробегает по колонке... Зачем? Как быстро получить список значений?
    Вот тест:
    CREATE TABLE LowCardinalityTest (a LowCardinality(String)) ENGINE = MergeTree() ORDER BY tuple() SETTINGS index_granularity = 8192
    INSERT INTO LowCardinalityTest SELECT toString(number % 10) FROM system.numbers LIMIT 1000000000
    SELECT a FROM LowCardinalityTest GROUP BY a
    ...
    10 rows in set. Elapsed: 0.640 sec. Processed 1.00 billion rows, 1.00 GB (1.56 billion rows/s., 1.57 GB/s.)
  • https://t.me/clickhouse_ru
    словарь не общий на всю таблицу
  • Ну так мёржить можно быстро. Просто мне нужно знать, что нет возможности получать это по словарю (или почанковым словарям) и что-то делается по колонкам. Тогда LC нам не подойдёт.
  • https://t.me/clickhouse_ru
    c 19.17
    https://clickhouse.tech/docs/en/changelog/#clickhouse-release-v19-17-4-11-2019-11-22
  • https://t.me/clickhouse_ru
    да, в каждом парте .dict файл

    читаем только словарь
    SELECT a FROM LowCardinalityTest GROUP BY a
    Elapsed: 0.302 sec. Processed 1.00 billion rows

    читаем словарь, unbox значения,
    SELECT distinct(a) FROM LowCardinalityTest
    Elapsed: 2.822 sec. Processed 1.00 billion rows
  • Да не похоже на только словарь. 0.3сек! У меня 0.6-0.7 вот. Если сделать 5млрд, то будет 1.5сек. На диске вижу 7 партов, словари - по 2 файла в каждом. Повторный запрос не ускоряет - т.е. файловый кеш работает, если на холодную делать у меня в более чем 5 раз ещё замедлялось. Откуда 0.3-0.7 сек для чтения мелкого словаря 7 раз из памяти?
  • https://t.me/clickhouse_ru
    @herohere #145334 05:23 PM, 02 Mar 2020
    DELETE FROM xxx WHERE CheckDate="2020-03-01 20:47:00" не удаляет строку в таблице, подскажите плз корректную структуру для удаления
  • https://t.me/clickhouse_ru
    вот такой у нас словарь, не доделано
  • https://t.me/clickhouse_ru
    в кликхаусе нет DELETE и UPDATE
  • https://t.me/clickhouse_ru
    @lnuynxa #145338 05:25 PM, 02 Mar 2020
    есть мутации, но скорее всего это не то что тебе надо
    https://clickhouse.tech/docs/en/query_language/alter/#alter-mutations
  • Мне всё-таки кажется, что там нет оптимизации для конкретно запроса типа "SELECT a FROM LowCardinalityTest GROUP BY a", есть общие оптимизации для GROUP BY по LC-колонкам, и только они и используется, всё равно по столбцу пробегаем. Хотелось бы от того, кто с кодом знаком явное подтверждение получить: пробегаем по колонке или только словарь зачитываем. Там 0.3 сек ну никак не сделаешь, если только sleep не ставить.
    Вообще, можно специальный какой-нибудь синтаксис придумать для получения уникального списка или договориться, что это заклинание вида "SELECT a FROM LowCardinalityTest GROUP BY a" и сделать для него ещё более специфичную оптимизацию.
    Ладно, если никто не напишет по коду, пойду завтра issue в github писать.
  • https://t.me/clickhouse_ru
    этот вопрос поднимался, там почти не сделано оптимизаций, ускорили только group by одна_low_cardinality_колонка, поэтому даже distinct в разы медленее. Все в курсе, видимо когда-нибудь доделают, колонка не читается, долго делается групбай 1млрд. значений из словаря
  • https://t.me/clickhouse_ru
    Спасибо!
  • В словаре тут 10 значений, в том и дело. 1 млрд записей. И похоже что время работы на 1млрд а не на 10 значений x7 партов.
  • https://t.me/clickhouse_ru
    Посмотрите видео Кочетова
  • https://t.me/clickhouse_ru
    @den_crane #145345 05:46 PM, 02 Mar 2020
    Да
  • https://t.me/clickhouse_ru
    @rheinx #145346 05:55 PM, 02 Mar 2020
    Скажите, а сколько мутаций может идти параллельно и можно ли этот параметр настраивать?
  • https://t.me/clickhouse_ru
    Сколько угодно, ограничено только размер background пула, но зачем вам нужно запускать их параллельно?
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #145347 #145348 06:04 PM, 02 Mar 2020
    Нужно выполнить очень неудобный запрос на дедупликацию. Для того чтобы найти дубликаты, нужно много памяти. На всю таблицу сразу, видимо не хватает памяти. Запускаю по партициям. И судя по всему, из-за параллельности оно снова не вмещается в память.
  • https://t.me/clickhouse_ru
    @rheinx #145349 06:05 PM, 02 Mar 2020
    Хочу запустить очередь мутаций сразу на все парты, но чтобы одновременно не более чем определенное количество
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #145347 #145350 06:11 PM, 02 Mar 2020
    иными словами, хочется наоборот, почти запретить им запускаться параллельно
  • https://t.me/clickhouse_ru
    @edyya ↶ Reply to #145314 #145351 06:31 PM, 02 Mar 2020
    не знаю как быть с двумя условиями, но убрать все колонки начинающиеся на cat можно так columns('[^cat]')
    а вообще эта штука странно себя ведет

    в твоем примере columns('[^cat]') - убирает все начинающиеся на cat
    а в моем примере
    select columns('[^database]') from system.merges; -- убирает колонку database
    когда select columns('[^data]') from system.merges; -- не убирает колонку database (а в примере с cat убирает)

    Регулярки==магия
  • Спасибо.
    Вобщем, я так понял, что с тех пор сделали только общую оптимизацию для group by, получение уникальных значений так и не оптимизировано - всё равно там проход по всему столбцу. Быстрее distinct только потому что в distinct раскрывается значение в String, а так всё равно линейная сложность по кол-ву записей.
    Это печально, сразу большой минус по сравнению с enum+dict, в частности для grafana не получается использовать LC - дашборды будут долго открываться (там как раз по таким колонкам нужно получать списки уникальных значений - для комбобоксов и наборов кривых на графиках).
  • https://t.me/clickhouse_ru
    @lamb_grey #145353 07:05 PM, 02 Mar 2020
    Joined.
  • спасибо огромное за совет
    после оптимайза всё влетело
  • @176504465 #145355 07:23 PM, 02 Mar 2020
    Вечер добрый, может кто подскажет как сгрупировать и обьеденить массивы (желательно оставить только уникальные значения) и получить один массив на выходе?

    SELECT arrayConcat(groupUniqArray(ar))
    FROM (
    SELECT 1 as id, arrayJoin(array(array(1,2), array(3,4), array(5,6))) as ar
    )
    GROUP BY id
  • https://t.me/clickhouse_ru
    @unamedrus #145356 07:28 PM, 02 Mar 2020
    arrayDistinct(flatten(arr))
  • @176504465 #145357 07:30 PM, 02 Mar 2020
    @unamedrus спасибо, так же добрался до arrayFlatten но не работало, flatten работает, версия старая, спасибо еще раз
  • https://t.me/clickhouse_ru
    groupUniqArrayArray

    SELECT arrayConcat(groupUniqArrayArray(ar))
    FROM (
    SELECT 1 as id, arrayJoin(array(array(1,2), array(3,4), array(5,6))) as ar
    )
    GROUP BY id

    ┌─arrayConcat(groupUniqArrayArray(ar))─┐
    │ [6,4,5,2,1,3] │
    └──────────────────────────────────────┘
  • @176504465 #145359 07:58 PM, 02 Mar 2020
    @den_crane интересно, спасибо, как я понимаю такое даже в исходниках не найти?
  • https://t.me/clickhouse_ru
    не найти, это комбинаторы, там можно и еще что-нибудь присобачить groupUniqArrayArrayArrayIf
  • https://t.me/clickhouse_ru
    @unamedrus #145361 08:01 PM, 02 Mar 2020
    select groupUniqArrayArrayArray([[[1],[2]],[[3]]])
    а можно как нить развернуть трехуровневый массив, через комбинаторы?
    у меня тупо в лоб не вышло
  • https://t.me/clickhouse_ru
    @den_crane #145362 08:02 PM, 02 Mar 2020
    select groupUniqArrayArrayArrayArray([[[1],[2]],[[3]]])
  • https://t.me/clickhouse_ru
    @unamedrus #145363 08:06 PM, 02 Mar 2020
    одного Array не хватило, поня спасибо
  • 03 March 2020 (201 messages)
  • https://t.me/clickhouse_ru
    видимо да: Killed process 63835 (clickhouse-odbc) total-vm:2212452kB, anon-rss:62596kB, file-rss:1012kB, shmem-rss:0kB , а можете подсказать, что делать в такой ситуации
  • https://t.me/clickhouse_ru
    @grave1986 #145365 02:31 AM, 03 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    А сколько памяти у сервера? Сколько своп?
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145367 03:05 AM, 03 Mar 2020
    свопа нет
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145368 03:05 AM, 03 Mar 2020
    памяти около 700 гб
  • https://t.me/clickhouse_ru
    @den_crane #145369 03:25 AM, 03 Mar 2020
    мониторинг есть? Сколько КХ жрет ? И есть ли тенденции на графиках?
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145370 03:54 AM, 03 Mar 2020
    мониторинг есть, кх жрет 354 гб, не понял, что вы имели ввиду насчет графиков
  • https://t.me/clickhouse_ru
    @den_crane #145371 03:58 AM, 03 Mar 2020
    ну график памяти сколько КХ rss (res) есть? Растет или все время 354, а потом хоп и 700.
    И вообще как он 354 гб жрет? Постянно идет поток запросов? И они столько занимают?
  • https://t.me/clickhouse_ru
    @den_crane #145372 03:59 AM, 03 Mar 2020
    а почему 19.13.2.19 ?
  • https://t.me/clickhouse_ru
    @den_crane #145373 03:59 AM, 03 Mar 2020
    последняя ведь 19.13.7.57 в 19.13 ветке?
  • https://t.me/clickhouse_ru
    систему недавно вывели на прод, поэтому я пока боялся обновлять (знаю что это глупо)😅 , планировал обновить в ближайшее время
  • https://t.me/clickhouse_ru
    это не глупо, это нормально как раз. Сначала на стейдже обкатайте 19.13.7.57 и потом на нее обновляйтесь
  • https://t.me/clickhouse_ru
    ну график памяти сколько КХ rss (res) есть? Растет или все время 354, а потом хоп и 700.
    И вообще как он 354 гб жрет? Постянно идет поток запросов? И они столько занимают?
  • https://t.me/clickhouse_ru
    графика расхода памяти нет, знаю что в пике он может задействовать все на 100%
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145378 04:08 AM, 03 Mar 2020
    поток запросов идет постоянно
  • https://t.me/clickhouse_ru
    @den_crane #145379 04:10 AM, 03 Mar 2020
    понятно что может, вопрос куда
  • @AS12389 #145380 04:11 AM, 03 Mar 2020
    Коллеги, подскажите стабильную версию для апгрейда. Раньше советовали 18.14.19
  • @AS12389 #145381 04:11 AM, 03 Mar 2020
    Сейчас живу на 1.1.54383 и проблем не знаю, но не хочу сильно отставать
  • @AS12389 #145382 04:12 AM, 03 Mar 2020
    Точнее DELETE нужен, а то дропать целыми партициями так себе стратегия
  • https://t.me/clickhouse_ru
    извините, немного не понял вопрос
  • запросы ad-hoc или одинаковые/однородные? может один из запросов имеет много промежуточных данных (потоков много). Пробовали уменьшать лимит потоков?
  • https://t.me/clickhouse_ru
    ну DELETE вообще не замена drop partition , даже близко
  • А понимаю
    Мне порой нужно строчки из таблиц удалять
  • CollapsingMT не вариант?
  • https://t.me/clickhouse_ru
    берите LTS 19.14...последнюю
  • Спасибо
  • @AS12389 #145390 04:16 AM, 03 Mar 2020
    Вы раньше вроде 18.14.19 советовали
  • https://t.me/clickhouse_ru
    я и сейчас ее советую и даже сам использую на проде, супер стейбл, наверное есть инстансы с годовым аптаймом
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145392 04:19 AM, 03 Mar 2020
    В принципе, запросы довольно однородные, в основном выборка из таблицы и заливка данных в таблицу. Лимит потоков уменьшать не пробовал
  • https://t.me/clickhouse_ru
    ну а сколько постоянных параллельных запросов ? 10? 100? 1000? куда 354 ГБ уходит?
  • https://t.me/clickhouse_ru
    параллельных запросов около 50
  • https://t.me/clickhouse_ru
    немного отхожу от темы, но хочу спросить, разве количество параллельных запросов может превышать 100?
  • https://t.me/clickhouse_ru
    да, это просто параметр, защитный лимит, можно сколько угодно поставить, нужен ребут
  • https://t.me/clickhouse_ru
    select elapsed, formatReadableSize(peak_memory_usage) from system.processes where is_initial_query
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145398 04:28 AM, 03 Mar 2020
    15 запросов на данный момент
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145399 04:29 AM, 03 Mar 2020
    peak_memory_usage 2.27 GiB
  • https://t.me/clickhouse_ru
    я результат запроса хотел увидеть
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145401 04:31 AM, 03 Mar 2020
    3.7135909 1.87 GiB
    1.7821608 1.87 GiB
    0.2606541 0.00 B
    0.001115937 0.00 B
    13.587054 2.27 GiB
    12.065541 2.27 GiB
    8.055254 2.26 GiB
    2.3233924 285.79 MiB
    2.072868 1.87 GiB
    2.0726457 1.87 GiB
    0.6653091 32.35 MiB
    0.500187 419.12 MiB
    0.43889683 177.87 MiB
    0.30426043 73.32 MiB
    11.446262 603.57 MiB
    11.19572 2.28 GiB
    11.19549 2.27 GiB
    9.788144 366.21 MiB
    6.0558844 2.26 GiB
    5.8842487 177.31 MiB
    5.6492915 459.29 MiB
    0.92088 177.03 MiB
    0.44633946 374.98 MiB
    20.718945 575.39 MiB
    16.815044 378.43 MiB
    6.903057 443.29 MiB
    6.4000196 2.27 GiB
    2.7216785 41.17 MiB
    2.4461057 124.87 MiB
  • https://t.me/clickhouse_ru
    @den_crane #145402 04:32 AM, 03 Mar 2020
    а КХ сколько ест?
  • https://t.me/clickhouse_ru
    @den_crane #145403 04:33 AM, 03 Mar 2020
    ps -eo pmem,comm,min_flt,rss,vsz --sort -rss |grep clickhouse-server
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145404 04:34 AM, 03 Mar 2020
    оу, а я это прописывал: ps -e -o pid,vsz,comm= | sort -n -k 2
  • https://t.me/clickhouse_ru
    1.5 clickhouse-serv 1047620439 12667828 404281616
    0.1 clickhouse-odbc 815766 1449428 1950308
  • https://t.me/clickhouse_ru
    @den_crane #145407 04:36 AM, 03 Mar 2020
    12 667 828 -- 12 ГБ, далеко до 700
  • https://t.me/clickhouse_ru
    То есть это не правильная команда?
  • https://t.me/clickhouse_ru
    Просто через нее мне и выводило 354 гб
  • https://t.me/clickhouse_ru
    @den_crane #145410 04:39 AM, 03 Mar 2020
    vsz -- это виртуальная память, адресное пространство, максимум 2^64
  • https://t.me/clickhouse_ru
    @den_crane #145411 04:40 AM, 03 Mar 2020
    там может быть любое число, вот например сейчас я вижу кассандру у которой java кушает 2,5TB vsz/ 18 GB res а памяти 32 ГБ у сервера
  • https://t.me/clickhouse_ru
    понял, спасибо за ответ, однако, получается, что дело не в оом киллере?
  • https://t.me/clickhouse_ru
    @den_crane #145413 04:52 AM, 03 Mar 2020
    что значит не в ООМ-килере
    >Killed process 63835 (clickhouse-odbc)
    вам графики нужны, чтобы понять что вообще происходит.

    а что кстати с cat /proc/sys/vm/overcommit_memory ?
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145414 04:56 AM, 03 Mar 2020
    0
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145415 04:56 AM, 03 Mar 2020
    cat /proc/sys/vm/overcommit_memory
    0
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145416 04:56 AM, 03 Mar 2020
    а что вы используете в качестве мониторинга?
  • https://t.me/clickhouse_ru
    @den_crane #145417 04:58 AM, 03 Mar 2020
    я в основном заббикс, привык, 17 лет пользуюсь
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145418 05:01 AM, 03 Mar 2020
    А заббикс поддерживает кликхаус? Я просто говорил с одним человеком и он сказал что нельзя поставить кликхаус на заббикс
  • https://t.me/clickhouse_ru
    @TrueCarry #145419 05:06 AM, 03 Mar 2020
    Можно мониторить просто сервер?
  • https://t.me/clickhouse_ru
    @den_crane #145420 05:08 AM, 03 Mar 2020
    заббикс умеет поддерживать вообще все, хоть кофеварки со стиралками.
  • в забиксе есть траперы, через них и скрипты можно что угодно мониторить
  • https://t.me/clickhouse_ru
    @den_crane #145422 05:09 AM, 03 Mar 2020
    кх память в агенте прямо мониторится, для любого процесса
  • https://t.me/clickhouse_ru
    если вопрос, использовать в качестве базы для самого заббикса, то ch не подойдет, а если про мониторинг базы ch, то без проблем
  • https://t.me/clickhouse_ru
    @Kanuas_1 #145424 05:21 AM, 03 Mar 2020
    окей, спасибо, тогда наверное пойду изучать структуру заббикса и как с ним работать
  • @971222148 #145425 05:39 AM, 03 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @vchef ↶ Reply to #145418 #145426 05:52 AM, 03 Mar 2020
    попробуйте glaber потестить
  • https://t.me/clickhouse_ru
    @Respektnick #145427 06:11 AM, 03 Mar 2020
    Коллеги добрый день, подскажите, не могу понять делаю запрос "optimaze table test1.test" получаю Found shard without any specified connection. Среда: 2 сервера клика 3 зукипера. На 2 клике запрос выполняется успешно
  • @shiruwadi #145428 06:27 AM, 03 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @forward32 #145429 06:32 AM, 03 Mar 2020
    Привет, а в FORMAT CSV нельзя использовать строки с символом ' ?
    Получаю DB::Exception: Expected end of line (речь о словарях, если это имеет значение).
  • https://t.me/clickhouse_ru
    Можно. Попробуйте либо \’ либо ‘’
  • https://t.me/clickhouse_ru
    @forward32 #145431 06:53 AM, 03 Mar 2020
    Да, я ступил и не обернул строки в кавычки. Это помогло.
  • https://t.me/clickhouse_ru
    https://github.com/Altinity/clickhouse-zabbix-template
    Вот этим шаблоном пользуюсь
    GitHub - Altinity/clickhouse-zabbix-template: Zabbix template for ClickHouse

    Zabbix template for ClickHouse. Contribute to Altinity/clickhouse-zabbix-template development by creating an account on GitHub.

  • @whetherharder #145433 07:41 AM, 03 Mar 2020
    Масяня. Эпизод 53. День сурком

    У меня одно время была параноидальная фиксация на фильме "День Сурка". На мне он сработал так, что я решил "а какого хрена вообще фильмы всякие разные смотреть? Мучиться выбирать? Все они одинаковые по большому счету. Буду смотреть один и тот же". В результате я посмотрел "День Сурка" примерно 235 раз. На разных языках, в разной озвучке в разных копиях и на разных устройствах. До сих пор знаю его ВЕСЬ наизусть во всех деталях. Я не смотрел "фильмы", я смотрел "фильм". Прошло примерно через года полтора.. :))) Хотя, должен признаться, что несмотря на параноидальность идеи, логический смысл в этом есть. Большинство фильмов стереотипны и их не запоминаешь, жаль только затраченного времени жизни. Если же смотришь все время один и тот же фильм- то начинаешь его внутренне интерпретировать и самостоятельно в голове выстраивать и находить все новые и новые сюжеты и нюансы.. Главное, чтоб фильм непротивный был, а "ДС" явно не противный. Мульт вовсе не по мотивам, а скорее паралелльно. В перенесении на реальную жизнь…

  • https://t.me/clickhouse_ru
    спасибо
  • @okarasev #145435 08:19 AM, 03 Mar 2020
    Подскажите, можно ли настроить SETTINGS передаваемые через remote? Мы обновили CH на одном из кластеров. На втором (не нашем )- не обновили. И теперь при запросе remote из нового кластера в старый пишет "DB::Exception: Unknown setting any_join_distinct_right_table_keys. (version 19.17.6.36 (official build))"
  • https://t.me/clickhouse_ru
    @327865368 #145436 08:27 AM, 03 Mar 2020
    Добрый день. Задача привести дату и время к началу определённого часового интервала. Следующий запрос выдаёт странное:

    WITH toDateTime('2016-07-09 10:31:12') AS dt
    SELECT
    dt,
    toStartOfInterval(dt, toIntervalHour(1)) AS hours1,
    toStartOfInterval(dt, toIntervalHour(2)) AS hours2,
    toStartOfInterval(dt, toIntervalHour(3)) AS hours3,
    toStartOfInterval(dt, toIntervalHour(4)) AS hours4,
    toStartOfInterval(dt, toIntervalHour(6)) AS hours6,
    toStartOfInterval(dt, toIntervalHour(12)) AS hours12

    ┌──────────────────dt─┬──────────────hours1─┬──────────────hours2─┬──────────────hours3─┬──────────────hours4─┬──────────────hours6─┬─────────────hours12─┐
    │ 2016-07-09 10:31:12 │ 2016-07-09 10:00:00 │ 2016-07-09 09:00:00 │ 2016-07-09 09:00:00 │ 2016-07-09 07:00:00 │ 2016-07-09 09:00:00 │ 2016-07-09 03:00:00 │
    └─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘

    Ожидаю в hours2 "10:00:00", hours4 "08:00:00", hours6 "06:00:00", hours12 "00:00:00". Что не так?
  • https://t.me/clickhouse_ru
    скинь ссылку человеку glaber.io
    Можно ;)

    вы там с человеком определитесь
    можно мониторить через zabbix состояние clickhouse
    можно данные для zabbix хранить в clickhouse (но это не официальный fork)
  • https://t.me/clickhouse_ru
    @floxard #145438 08:31 AM, 03 Mar 2020
    Вроде как собирались и в оф. версию добавить
  • https://t.me/clickhouse_ru
    в utc норм
    WITH toDateTime('2016-07-09 10:31:12', 'UTC') AS dt
  • https://t.me/clickhouse_ru
    @327865368 #145440 08:39 AM, 03 Mar 2020
    у меня сервер в Europe/Moscow, сейчас попробую
  • https://t.me/clickhouse_ru
    @GordeevIgor #145441 08:47 AM, 03 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @327865368 #145442 08:50 AM, 03 Mar 2020
    в UTC арифметика работает, а в Europe/Moscow нет. это баг?
  • https://t.me/clickhouse_ru
    @Mr_Gangster #145443 08:52 AM, 03 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @Mr_Gangster #145444 08:54 AM, 03 Mar 2020
    Привет! Подскажите, если необходимо сделать отказоустойчивость ClickHouse между нескольких ЦОД, на какие механизмы/реализации посмотреть? Distributed?
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #145444 #145445 09:06 AM, 03 Mar 2020
    replicated + distributed, вроде иного не дано
  • https://t.me/clickhouse_ru
    так понимаю реплицируются только таблицы и нужен будет зукипер, дистрибьютед тогда не нужен?
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #145446 #145447 09:08 AM, 03 Mar 2020
    Реплицируются таблицы на движке Replicated.
    distributed это про шардирование.
  • https://t.me/clickhouse_ru
    т.е. выделенного мастера нет, данные реплицируются на все сервера которые указаны в зукипере?
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #145448 #145449 09:10 AM, 03 Mar 2020
    Мастера нет, репликацию я бы назвал направленной. Т.е. не на все, а как настроите
  • @dosereda #145450 09:10 AM, 03 Mar 2020
    Поиск по "javascript date" ничего не выдает,
    поделитесь примером преобразования ( уже существующей. а не new date ) даты из
    формата javascript date в clickhouse date ( 0000-00-00 )
  • https://t.me/clickhouse_ru
    понял, спасибо!
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #145451 #145452 09:10 AM, 03 Mar 2020
    Вот тут много полезной инфы https://clickhouse.tech/docs/ru/operations/table_engines/replication/
  • https://t.me/clickhouse_ru
    @Mr_Gangster #145453 09:10 AM, 03 Mar 2020
    спасибо!
  • данный способ корректный. или есть лучше?
    .toISOString().slice(0,10)
  • @flacko_1 #145455 09:33 AM, 03 Mar 2020
    Joined.
  • @AS12389 #145456 09:42 AM, 03 Mar 2020
    Коллеги, где бы почитать про вертикальное масштабирование? У меня на ноде кончился SSD диск, но есть еще пара свободных. Как-то можно подключить его подключить без запуска еще одного инстанса?
  • https://t.me/clickhouse_ru
    @387452444 #145457 09:42 AM, 03 Mar 2020
    Amplifying ClickHouse Capacity with Multi-Volume Storage (Part 2)

    This article is a continuation of the series describing multi-volume storage, which greatly increases ClickHouse server capacity using tiered storage. In the previous article we introduced why tiered storage is important, described multi-volume organization in ClickHouse, and worked through a concrete example of setting up disk definitions. 

  • 🙏
  • https://t.me/clickhouse_ru
    @tsondinov #145459 09:47 AM, 03 Mar 2020
    Всем привет!

    Мы в Beresnev Games, независимый разработчик игр из Чехии, ищем Data Engineer на текущие и будущие проекты:
    - Построение новых и оптимизация существующих ETL-процессов. Проверка сбора, консистентности, обработки и агрегации данных;
    - Развивать инфраструктуру для решения задач продуктовой аналитики на базе OLAP Clickhouse;
    - Разработка и поддержка серверной части игр: лидерборды, турниры, спешл офферы и др;
    - Разработка систем детекции аномалий в данных;
    - Поддержка аналитиков в развертывании систем предсказания метрик (ML).

    Более подробная информация по вакансии по ссылке: https://beresnev.games/vacancies/list/data-engineer/

    Свои CV можете направлять сразу мне либо же на hr@beresnev.games

    Всем продуктивного дня.
  • https://t.me/clickhouse_ru
    @rheinx #145460 10:03 AM, 03 Mar 2020
    Всем привет. А кто знает, как понять чем в данный момент занимается мутация?
    Вижу что в system.mutations у нее пустые поля ошибок, а поле is_done = 0.
    В то же время system.merges пустая. Данные которые должны были быть удалены, все еще селектятся.
  • https://t.me/clickhouse_ru
    @baygeldin #145461 10:12 AM, 03 Mar 2020
    всем привет) поправьте, если не прав плиз. у меня сложилось такое понимание, что для вот таких запросов:
    SELECT * FROM audit_logs WHERE user_id = ... ORDER BY created_at LIMIT 100 OFFSET 10000;
    clickhouse не подходит и будет скорее всего даже медленнее реляционной базы, в которой стоят нужные индексы. так ли это?
  • @bannedusername #145462 10:13 AM, 03 Mar 2020
    Всем привет
    Подскажите пжл, kafka engine умеет работать с json-в-json?
  • https://t.me/clickhouse_ru
    нет, надо просто правильно настроить сортировку у таблицы
  • https://t.me/clickhouse_ru
    т.е. не по created_at, а по user_id? а он тогда не будет сортировать по created_at в памяти на каждый запрос?
  • https://t.me/clickhouse_ru
    по user_id и created_at
  • https://t.me/clickhouse_ru
    @nyoroon #145466 10:18 AM, 03 Mar 2020
    CREATE TABLE xxx () ENGINE=xxx ORDER BY (user_id, created_at)
  • https://t.me/clickhouse_ru
    @AlexMig #145467 10:23 AM, 03 Mar 2020
    всем привет
    можно как то "по человечески" записать эти union all
    .........
    from (
    select count(),
    dictGet('xxx', 'yyy', cod) as id
    from table1
    group by id) s
    any left join (
    select
    0 id, 'name_0' name
    union all
    select
    1, 'name_1'
    union all
    select
    2, 'name_2'
    union all
    select
    3, 'name_3' ) z on z.id = s.id
  • https://t.me/clickhouse_ru
    WITH [1, 2, 3, 4] AS v
    SELECT
    arrayJoin(v) AS number,
    concat('name_', toString(number)) AS name

    ┌─number─┬─name───┐
    │ 1 │ name_1 │
    │ 2 │ name_2 │
    │ 3 │ name_3 │
    │ 4 │ name_4 │
    └────────┴────────┘
  • https://t.me/clickhouse_ru
    @AlexMig #145469 10:28 AM, 03 Mar 2020
    спс щас попробую
  • https://t.me/clickhouse_ru
    @AlexMig #145470 10:32 AM, 03 Mar 2020
    а если все имена произвольные?
  • https://t.me/clickhouse_ru
    спасибо) а что если в запросе есть еще какое-нибудь WHERE event_type = ..., то он же просканит все записи для указанного user_id? или по event_type можно поддерживать какой-то индекс, чтобы читать выборочно?
  • https://t.me/clickhouse_ru
    если часто бывают такие запросы, то можно в сортировку добавить
  • https://t.me/clickhouse_ru
    просто сортировку можно только одну сделать, а параметры в запросах могут быть разные. а не для этого случаем materialized views используют?
  • https://t.me/clickhouse_ru
    @nyoroon #145474 10:40 AM, 03 Mar 2020
    MV больше для агрегации используют
  • https://t.me/clickhouse_ru
    @baygeldin #145475 10:41 AM, 03 Mar 2020
    окей, понял, спасибо еще раз)
  • https://t.me/clickhouse_ru
    @nyoroon #145476 10:42 AM, 03 Mar 2020
    но если летенси прям супер-критично, то можно и MV сделать, и гранулярность индекса побольше
  • https://t.me/clickhouse_ru
    спасибо, сам дошел
  • https://t.me/clickhouse_ru
    @855437500 #145478 10:49 AM, 03 Mar 2020
    Здравствуйте всем. Подскажите, есть ли функция которая сможет правильно вывести результат запроса SELECT '50.17' > '50.5'? Можно конечно версию разделить на части и все привести к числовому типу. Но хотелось бы знать, есть ли какие-нибудь встроенные функции для подобного рода решения задачи
  • https://t.me/clickhouse_ru
    @387452444 #145482 10:53 AM, 03 Mar 2020
    cast to FLoat? зачем делить?
  • https://t.me/clickhouse_ru
    @387452444 #145483 10:53 AM, 03 Mar 2020
    или у вас больше одной точки будет в версиях?
  • https://t.me/clickhouse_ru
    Нет
  • @bannedusername #145485 10:58 AM, 03 Mar 2020
    😢спасибо
  • @n1ght_f0x #145487 11:26 AM, 03 Mar 2020
    А планируется когда нибудь добавить какие нибудь endOf? toEndOfDay например
  • https://t.me/clickhouse_ru
    @unamedrus #145488 11:32 AM, 03 Mar 2020
    это сделать можно сделать через toStartOfDay, так что думаю если не написать что такая фича нужна в гитхабе, никто не сделает
  • @azryve #145490 11:50 AM, 03 Mar 2020
    Joined.
  • @dar3dvl #145491 11:57 AM, 03 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @241186216 #145492 12:14 PM, 03 Mar 2020
    any_join_distinct_right_table_key в каком файле надо прописывать ?
  • https://t.me/clickhouse_ru
    В версии больше одной точки
  • ну это понятно, что это можно сделать через toStartOfDay(toDate('2020-03-03') + 1) - 1 as endOfDay, хотелось бы конечно так не делать)
  • https://t.me/clickhouse_ru
    @forward32 #145495 12:36 PM, 03 Mar 2020
    Привет!

    Есть запрос с подзапросом. В подзапросе считается bookings и total_price.
    В вернеуровневом запросе делается:
    SELECT if(bookings != 0, total_price / bookings, total_price) as average_price ...

    И я ловлю DB::Exception: Division by zero
  • https://t.me/clickhouse_ru
    если хочешь, что бы появилась фича, то пиши ишью, она в сущности достаточно простая)
  • это не оттуда
    SELECT 1/0
    дает Inf а не division by zero
  • https://t.me/clickhouse_ru
    Оттуда. Если я уберу из верхнеуровневого селекта конкретно эту строку, то все работает как надо.
  • https://t.me/clickhouse_ru
    Вроде как кликхаус всегда выполняет все ветки ветвлений
  • https://t.me/clickhouse_ru
    В смысле? Это значило бы, что if бесполезен
  • https://t.me/clickhouse_ru
    @lnuynxa #145501 12:44 PM, 03 Mar 2020
    спекулятивное вычисление же
  • @maxixcom #145502 12:44 PM, 03 Mar 2020
    Ребята, подскажите что значит PARTITION BY tuple()? Вроде как это означает не партиционировать ... Означает ли это что данные не храняться на диске, а только лежат в оперативке? Или всетаки будет создана одна партиция?
  • https://t.me/clickhouse_ru
    будет только 1 партиция
  • @azryve #145505 12:45 PM, 03 Mar 2020
    Привет! А существует ли способ поменять ENGINE MergeTree -> ENGINE SummingMergeTree() не пересоздавая таблицы?
  • Спасибо!
  • https://t.me/clickhouse_ru
    Ну т.е. это ок и в данном случае я не могу воспользоваться таким ifом?
  • https://t.me/clickhouse_ru
    имхо, ты можешь его просто перенести
    total_price / if(bookings ! = 0, bookings, 1)
  • https://t.me/clickhouse_ru
    ну или в nullIf обернуть
  • нет
  • https://t.me/clickhouse_ru
    @rheinx #145511 01:30 PM, 03 Mar 2020
    Ребят, а where поддерживается только для mysql словарей? для odbc нет такой возможности?
  • https://t.me/clickhouse_ru
    @bralbral #145512 01:32 PM, 03 Mar 2020
    Подскажите. Тестирую bloom индексы . Делаю запрос в tabix/clickhouse-client к таблице , к которой их нет. На выходе стандартная статистика - сколько стро прочиталось/какой объем. Делаю запрос к таблице с индексами - ничего. Вопрос, действительно ли ничего 😁, или ещё не завезли корректное отображение ? Данные в таблицах идентичны , за исключением индексов . В запросе в качестве предиката используется поле, указанное в bloom индексе.
  • https://t.me/clickhouse_ru
    До такого не додумался, спасибо!
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #145511 #145514 01:44 PM, 03 Mar 2020
    Попробовал. Работает и для odbc
  • https://t.me/clickhouse_ru
    @387452444 #145515 01:50 PM, 03 Mar 2020
    а вот такой вопрос - как замена kdb+ кликхаус вообще годится или лучше не
  • https://t.me/clickhouse_ru
    Кому как. Плюсы kdb+ — скорость, расширяемость через UDFs. Минусы — язык запросов, цена. Кликхаус — быстрый, бесплатный и SQL. С UDF только плохо.
  • https://t.me/clickhouse_ru
    @387452444 #145517 02:11 PM, 03 Mar 2020
    а не подскажете, есть ли где бенчмарки посмотреть - даже если biased
  • https://t.me/clickhouse_ru
    https://clickhouse.tech/benchmark_hardware.html
    https://clickhouse.tech/benchmark.html
  • https://t.me/clickhouse_ru
    @387452444 #145519 02:17 PM, 03 Mar 2020
    я имел ввиду сравнение с kdb+ :)
  • https://t.me/clickhouse_ru
    How to Analyze Billions of Records per Second on a Single Desktop PC

    Introduction This article gives an overview of LocustDB [1], a new and extremely fast open-source analytics database built in Rust. Part 1 gives some background on analytical query systems and my g…

  • https://t.me/clickhouse_ru
    @387452444 #145521 02:21 PM, 03 Mar 2020
    Спасибо!
  • https://t.me/clickhouse_ru
    Есть сравнение с MemSQL и DolphinDB, которые примерно на уровне kdb+: https://medium.com/prooftrading/selecting-a-database-for-an-algorithmic-trading-system-2d25f9648d02
    Selecting a Database for an Algorithmic Trading System

    One of the key components of nearly any software system is the database used to persist, retrieve, and analyze data. In this technical…

  • https://t.me/clickhouse_ru
    @387452444 #145523 02:30 PM, 03 Mar 2020
    Ага спасибо большое Саша
  • https://t.me/clickhouse_ru
    @herohere #145524 02:30 PM, 03 Mar 2020
    подскажите плз, отправляю данные скриптом через requests.post для date,datetime 1583162310,1583162310(одинаковые значения). в таблице при этом datetime определяется корректно 2020-03-02 18:18:30 , а date 1995-01-28. Если query скопировать вручную и вставить, то date определяется корректно
  • https://t.me/clickhouse_ru
    date -- это кол-во дней после 1970, а вы кол-во сек. фигачите
  • https://t.me/clickhouse_ru
    @herohere #145526 02:47 PM, 03 Mar 2020
    так когда вбиваешь вручную через clickhouse client, то съедает
  • https://t.me/clickhouse_ru
    дада, это починили недавно
  • https://t.me/clickhouse_ru
    @den_crane #145528 02:52 PM, 03 Mar 2020
    проблема поди у вас в клиентском драйывере, он просто приводит к UInt16
  • https://t.me/clickhouse_ru
    @den_crane #145529 02:53 PM, 03 Mar 2020
    SELECT toUInt16(1583162310)

    ┌─toUInt16(1583162310)─┐
    │ 9158 │
    └──────────────────────┘

    SELECT toDate(9158)

    ┌─toDate(9158)─┐
    │ 1995-01-28 │
    └──────────────┘
  • @120600581 #145530 02:55 PM, 03 Mar 2020
    Всем привет! Как написать запрос, чтобы возвращались все столбцы, где значения NotNULL, на примере,
    Select * from table Where all fields != null
    ?
  • https://t.me/clickhouse_ru
    ifNull пробовали?

    Пардон, не так понял )
  • https://t.me/clickhouse_ru
    если допустим
    1 null 3
    null 1 2

    то что должно вернуть
  • https://t.me/clickhouse_ru
    @unamedrus #145534 02:58 PM, 03 Mar 2020
    только 3 столбец?
  • https://t.me/clickhouse_ru
    @den_crane #145535 02:58 PM, 03 Mar 2020
    а нет кстати
    insert into F format TSV 1583162310
    insert into F values(1583162310)
    SELECT *
    FROM F

    ┌──────────A─┐
    │ 0000-00-00 │
    └────────────┘
    ┌──────────A─┐
    │ 2020-03-02 │
    └────────────┘
  • должен строки и в каждой строке только те колонки где значения not null
  • https://t.me/clickhouse_ru
    никак, кол-во колонок в SQL базах известно до выполнения запроса
  • https://t.me/clickhouse_ru
    можно сделать так что бы возвращал все колонки, но там где null возвращал либо 0 либо пустую строку
  • https://t.me/clickhouse_ru
    @eltsin #145539 03:03 PM, 03 Mar 2020
    Joined.
  • @120600581 #145540 03:05 PM, 03 Mar 2020
    Наверно проще делать select * from а потом уже на клиенте фильтровать там где null. Спасибо
  • https://t.me/clickhouse_ru
    @eltsin #145542 03:08 PM, 03 Mar 2020
    привет! нужен совет: нужно создать процесс переноса данных из mysql в КХ. Если просто: есть тяжелый SQL запрос в mysql 5.7, хочу его результаты залить в КХ. Там штук 6 джойнов таблиц (около 30 млн строк).

    текущий вариант: mysql -> csv -> КХ кажется не самым оптимальным.

    погуглил, есть какие-то решения, но не очень красивые. Есть опция загрузить сырые таблицы в КХ, затем их уже джойнить в КХ. Но кажется, что будет работать дольше
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #145542 #145543 03:12 PM, 03 Mar 2020
    Realtime replication from MySQL to ClickHouse in practice

    July 2, 2018Vladislav Klimenko from Altinity and Valery Panov from Ivinco presented a talk at HighLoad Siberia 2018 conference recently. They described the real problem that Ivinco faced and how it has been solved with migration of analytics from MySQL into ClickHouse using MySQL to ClickHouse replication. A few months ago we introduced clickhouse-mysql tool in our blog, and Ivinco was the first company we know that tried it and used it in production.

  • https://t.me/clickhouse_ru
    @eltsin #145544 03:13 PM, 03 Mar 2020
    Читал
  • @goosecat #145545 03:17 PM, 03 Mar 2020
    Можешь на пентахо етл нарисовать
  • @goosecat #145546 03:18 PM, 03 Mar 2020
    Потом его намасштабировать
  • https://t.me/clickhouse_ru
    >mysql -> csv -> КХ кажется не самым оптимальным.
    это самый оптимальный со многих точек зрения путь
  • https://t.me/clickhouse_ru
    @den_crane #145548 03:20 PM, 03 Mar 2020
    и по перфомансу the best
  • @goosecat #145549 03:20 PM, 03 Mar 2020
    Это да
  • https://t.me/clickhouse_ru
    @den_crane #145550 03:20 PM, 03 Mar 2020
    и отлаживать и программировать легче всего
  • https://t.me/clickhouse_ru
    @rheinx #145551 03:24 PM, 03 Mar 2020
    А у кого нибудь даты через odbc() с Postgres нормально вытягиваются?
  • Нужно конвертить в timestamp в постгресе, либо делать toDate в клике
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #145552 #145553 03:26 PM, 03 Mar 2020
    А для словарей есть похожий хак?
    В PG Date, в словаре тоже хочется Date
  • @AntonVershinin #145554 03:40 PM, 03 Mar 2020
    Приводите в постгресе поле в стринг/timestamp, а в словаре обозначайте тип данных date
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #145554 #145555 03:41 PM, 03 Mar 2020
    Сработало, спасибо!
  • @AntonVershinin #145556 03:44 PM, 03 Mar 2020
    Пожалуйста. У нас мы для словарей из ПГ делаем вью для Клика, чтобы не менять саму таблицу
  • https://t.me/clickhouse_ru
    @qwblnp #145557 04:52 PM, 03 Mar 2020
    добрый вечер, столкнулись с такой проблемой
    есть несколько таблиц, которые постоянно дописываются свежими данными из PG
    мы хотели бы создать materialized view (MQT) сджойнив несколько таблиц. как мы поняли, рефреш MQT происходит автоматически, и это может приводить к тому, что свежие данные, залитые в 1 таблицу, не могут сджойнится с тем, что еще не записалось во вторую таблицу.
    надеюсь понятно описал о_О

    отсюда возникает вопрос, есть ли какой-то параметр, который позволяет назначить время для рефреша MQT или как-то разрешить порядок обработки джойна, что-то вроде - если есть все сопоставимые данные - джойнить и выводить, иначе ждать?
  • https://t.me/clickhouse_ru
    @qwblnp #145558 04:53 PM, 03 Mar 2020
    ну и да, джойн 2 таблиц с примерно 30-50кк записей выглядит вот так XD
  • https://t.me/clickhouse_ru
    @qwblnp #145559 04:56 PM, 03 Mar 2020
    и еще, заметили такую особенность, когда срабатывает тригер обновления MQT блочатся инсерты в таблицу, отсюда еще один резонный вопрос, можно ли как-то поменять приоритеты выполнения запросов?
  • https://t.me/clickhouse_ru
    похоже на джойн таблиц у которых ключ шардирования разный
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #145560 #145561 05:04 PM, 03 Mar 2020
    все на 1 физической машине без шардов и нод
  • https://t.me/clickhouse_ru
    грустно, кажется, что вам все таки нужен внешний скрипт для решения задачи
  • https://t.me/clickhouse_ru
    @Sablast #145563 05:13 PM, 03 Mar 2020
    а делать джойн на стороне PG вы не можете ? и уже его результат складывать)
  • https://t.me/clickhouse_ru
    mat view это просто триггер на вставку, по факту на каждую вставку у вас делается join
  • https://t.me/clickhouse_ru
    @unamedrus #145566 05:15 PM, 03 Mar 2020
    боюсь, других mat view в кликхаусе у меня для вас нет)
    но вообще все зависит от того, какой вам нужно join таблиц сделать
  • https://t.me/clickhouse_ru
    @unamedrus #145567 05:15 PM, 03 Mar 2020
    возможно получится обойтись малой кровью
  • https://t.me/clickhouse_ru
    @Sablast #145568 05:16 PM, 03 Mar 2020
    можно сделать 2 mat view которые пишут в одну Replacing таблицу
  • https://t.me/clickhouse_ru
    @unamedrus #145569 05:17 PM, 03 Mar 2020
    summing же?
    replacing заменит одной из двух
    summing сложит
  • https://t.me/clickhouse_ru
    @Sablast #145570 05:17 PM, 03 Mar 2020
    ну и пусть заменяет, правильной версией строки считать ту в которой случился JOIN
  • https://t.me/clickhouse_ru
    @unamedrus #145571 05:19 PM, 03 Mar 2020
    это вполне возможно будет дико тупить, если в каждом триггере прописать join
  • https://t.me/clickhouse_ru
    @Sablast #145572 05:20 PM, 03 Mar 2020
    возможно, надо тестить)
  • https://t.me/clickhouse_ru
    @dan1ru #145573 11:01 PM, 03 Mar 2020
    Joined.
  • 04 March 2020 (302 messages)
  • https://t.me/clickhouse_ru
    @rjs45 #145575 05:02 AM, 04 Mar 2020
    Доброго времени суток. Есть кто использует CH с Golang?
    Как замапить в go nested структуры из CH (используя db struct tag)?

    Пример. Есть таблица:
    create table users
    (
    id Int32,
    name String,
    items Nested(
    color Int32,
    weight Int32
    )
    )

    И есть структуры:
    package main

    type itemType struct {
    Color int32 `db:"items.color"` // ???
    Weight int32 `db:"items.weight"` // ???
    }

    type user struct {
    Id int32 `db:"id"`
    Name string `db:"name"`
    Items []itemType `db:"items"` // ???
    }
    Или надо как-то велосипедить?

    Ну или хотя бы вычитать значение items.color и items.weight их КХ в массивы (сам потом склею)
  • https://t.me/clickhouse_ru
    @igor_balyakin #145576 05:34 AM, 04 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @Sdmxx #145577 06:15 AM, 04 Mar 2020
    как можно функцию groupArray() оптимизировать?
  • https://t.me/clickhouse_ru
    @Sdmxx #145578 06:15 AM, 04 Mar 2020
    она занимает слишком много оперативки
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145577 #145579 06:15 AM, 04 Mar 2020
    вернее по другому записать
  • https://t.me/clickhouse_ru
    Попробуйте groupArray(10)(...). 10 это максимальное количество элементов
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145580 #145581 06:33 AM, 04 Mar 2020
    окей, спасибо)
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145580 #145582 07:07 AM, 04 Mar 2020
    а можно groupArray реализовать по другому?
  • https://t.me/clickhouse_ru
    На C++ можно всё. Что не так с groupArray?
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145583 #145584 07:14 AM, 04 Mar 2020
    Эта операция отжирает много оперативной памяти и кликхаус падает с ошибокй. Я выяснил что количество элементов достигает 20 поэтому менять это число нельзя
  • https://t.me/clickhouse_ru
    @Sdmxx #145585 07:15 AM, 04 Mar 2020
    и нужно что-то придумывать для оптимизации
  • https://t.me/clickhouse_ru
    Что за драйвер используется?
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #145586 #145587 07:28 AM, 04 Mar 2020
    mailru
  • https://t.me/clickhouse_ru
    @rjs45 #145588 07:29 AM, 04 Mar 2020
    Но можно еще сменить (только начали проект)
  • https://t.me/clickhouse_ru
    Поставьте 5. Или используйте groupArrayUniq
  • https://t.me/clickhouse_ru
    А что за ошибку выводит если как у вас в примере?
  • https://t.me/clickhouse_ru
    @dmitry_berezhnov #145591 07:31 AM, 04 Mar 2020
    Или может вам подойдёт topK. Пока нет деталей что и как делаете - гадать можно долго
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #145590 #145592 07:33 AM, 04 Mar 2020
    Без ошибок, возвращает пустую структуру. Как только из выборки убираю поле из нестеда, все работает.
    Запросы строю через dbr
  • https://t.me/clickhouse_ru
    @TrueCarry #145593 07:34 AM, 04 Mar 2020
    type itemType struct {
    Color int32 `db:"color"` // ???
    Weight int32 `db:"weight"` // ???
    }
    Может так надо просто дергать?
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #145593 #145594 07:36 AM, 04 Mar 2020
    Тоже не помогло. В дороге вычитал, что есть еще prefix в тегах. Доберусь до компа попробую
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #145566 #145595 07:40 AM, 04 Mar 2020
    мы хотели сделать стронг джойн нескольких таблиц с argMax() значениями, но, как я понимаю, это на данный момент не реализуемо.
  • https://t.me/clickhouse_ru
    @i_mayorov #145596 07:53 AM, 04 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145591 #145597 08:17 AM, 04 Mar 2020
    а что это за инструмент?
  • https://t.me/clickhouse_ru
    @387452444 #145598 08:19 AM, 04 Mar 2020
    Функция в кликхаус
  • https://t.me/clickhouse_ru
    @Sdmxx #145599 08:22 AM, 04 Mar 2020
    а чем она отличается от groupArray?
  • @vantik32 #145600 08:44 AM, 04 Mar 2020
    Всем привет! Такая ситуация: делаю
    select date, id, sum(val) from my_table where id = 22 and date '2020-02-29'
    получаю val=100. Затем следует:
    insert into my_table (date, id, val) values ('2020-02-29', 22, 20)
    КХ пишет ok, 1 rows in set. Делаю повторно select (выше) - результат val не меняется. Коллеги говорят, что тоже с таким сталкивались. С чем может быть связано? Как починить?
  • @vantik32 #145601 08:44 AM, 04 Mar 2020
    ENGINE = ReplicatedSummingMergeTree
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145602 #145603 08:48 AM, 04 Mar 2020
    Окей, я наверно ваше предыдущее сообщение неправильно понял.
  • https://t.me/clickhouse_ru
    Show create my_table покажите?
  • @xabaev #145605 08:58 AM, 04 Mar 2020
    Joined.
  • Да, пару минут. Нагуглил тут такое:
    Если база в ответ на INSERT мне ответила 200 OK, я спокойно переворачиваюсь на другой бок и сплю дальше. Если ClickHouse ответил мне 200 OK, хоть убейте, а сна нет. В общем случае я понятия не имею, сохранятся ли мои данные. Обычно сохраняются, но могут же и не.
    Это рядовая ситуация для КХ?
  • https://t.me/clickhouse_ru
    да и кстати group by date,id
  • интересная идея
  • @goosecat #145610 09:04 AM, 04 Mar 2020
    собери гринплам )
  • https://t.me/clickhouse_ru
    это какая такая база позволяет вам спать спокойно?
  • https://t.me/clickhouse_ru
    @Sdmxx #145612 09:04 AM, 04 Mar 2020
    Что может нагружать clickhouse если там сейчас не выполяются запросы? Сервер потребляет 128гб оперативы без единого запроса
  • @goosecat #145613 09:04 AM, 04 Mar 2020
    постгря - я сплю спокойно
  • Да, конечно, я перестарался сокращая запрос
  • @goosecat #145615 09:05 AM, 04 Mar 2020
    и гринплам )
  • https://t.me/clickhouse_ru
    @387452444 #145616 09:05 AM, 04 Mar 2020
    костя, у вас все волосы повыпадали с нее.. бегите )
  • @goosecat #145617 09:05 AM, 04 Mar 2020
    вопрос же не какая база а сколько денег можно потратить )
  • @goosecat #145618 09:06 AM, 04 Mar 2020
    у меня все работает )
  • @vantik32 #145619 09:06 AM, 04 Mar 2020
    CREATE TABLE sumstat (`date` Date, `cli_id` String, `id` Int64, `val` Int32) ENGINE = ReplicatedSummingMergeTree('/clickhouse_perftest/tables/{shard}/sumstat', '{replica}', date, (date, cli_id, id), 8192)
    Изначальный insert
    insert into sumstat (date, cli_id, id, val) values ('2020-02-29', '14', 21137640, 5454286)
    Изначальный select
    select date, cli_id, id, sum(val) from sumstat where cli_id='14' and date between '2020-02-01' and '2020-02-29' and id=21137640 group by date, cli_id, id order by date, id
  • @goosecat #145620 09:06 AM, 04 Mar 2020
    мне кликхаус начал нравиться )
  • https://t.me/clickhouse_ru
    @387452444 #145621 09:07 AM, 04 Mar 2020
    не ну так не честно Ваня, это ж SummingMergeTree
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145612 #145622 09:07 AM, 04 Mar 2020
    BackingProcTool, MerginAggregatd, ExterLtd потребляют по 49 гб каждый
  • https://t.me/clickhouse_ru
    @387452444 #145623 09:07 AM, 04 Mar 2020
    вы в обычную пишите и спите спокойно
  • https://t.me/clickhouse_ru
    @Sdmxx #145624 09:07 AM, 04 Mar 2020
    не пойму в чем причина
  • )) Я не гоню на КХ, Хочу разобраться. Когда лыжи не едут на ровном месте начинаешь сходить с ума
  • @goosecat #145626 09:09 AM, 04 Mar 2020
    мы все уже там )
  • @133452245 #145627 09:09 AM, 04 Mar 2020
    Товарищи, нужна помощь!

    Всем привет, MV будет в фоне производить SELECT ? или сразу при вставке?

    вопрсо к тому как много MV вы используете в своих проектах
  • @goosecat #145628 09:09 AM, 04 Mar 2020
    ладно )) туман сегодня
  • https://t.me/clickhouse_ru
    При вставке данных в таблицу они сохраняются как есть. Периодически ClickHouse выполняет слияние вставленных кусков данных и именно в этот момент производится суммирование и замена многих строк с одинаковым первичным ключом на одну для каждого результирующего куска данных.

    ClickHouse может слить куски данных таким образом, что не все строки с одинаковым первичным ключом окажутся в одном финальном куске, т.е. суммирование будет не полным. Поэтому, при выборке данных (SELECT) необходимо использовать агрегатную функцию sum() и секцию GROUP BY как описано в примере выше.
  • https://t.me/clickhouse_ru
    @387452444 #145630 09:12 AM, 04 Mar 2020
    ключевое слово периодически :)
  • https://t.me/clickhouse_ru
    @387452444 #145631 09:12 AM, 04 Mar 2020
    щас не помню но вроде как там слияние говорили каждые 8 минут происходит...
  • https://t.me/clickhouse_ru
    @387452444 #145632 09:13 AM, 04 Mar 2020
    там же в доках и написано что надо использовать в дополнение к обычному mergetree чтобы лучше спать ))
  • https://t.me/clickhouse_ru
    надо понимать что это периодически, может также означать никогда
  • @vantik32 #145634 09:14 AM, 04 Mar 2020
    Sum() есть, group by есть
  • https://t.me/clickhouse_ru
    Это же нормально работает? и что вставляете потом? Если вставите то же, то оно не вставится

    insert into sumstat (date, cli_id, id, val) values ('2020-02-29', '14', 21137640, 5454286)

    insert into sumstat (date, cli_id, id, val) values ('2020-02-29', '14', 21137640, 5454286)

    insert into sumstat (date, cli_id, id, val) values ('2020-02-29', '14', 21137640, 5454286)

    insert into sumstat (date, cli_id, id, val) values ('2020-02-29', '14', 21137640, 5454286)

    у вас вставится только первая. Остальные напишет ОК/200. но не вставятся строки

    Кликхаус сохранаяет у себя хеш последних 100 вставленных блоков, и если вставить то же самое ничего не прозайдет
  • Агааа, т.е. если изменить val хотя бы на 1, то это должно сработать, логика такая?
  • https://t.me/clickhouse_ru
    @beglaryanartur #145637 09:18 AM, 04 Mar 2020
    да, но есть флаг который эту проверку не делает
  • https://t.me/clickhouse_ru
    @beglaryanartur #145638 09:19 AM, 04 Mar 2020
    SELECT *
    FROM system.settings
    WHERE name = 'insert_deduplicate'

    ┌─name───────────────┬─value─┬─changed─┬─description───────────────────────────────────────────────────────────────────────────────────────────────────────┐
    │ insert_deduplicate │ 1 │ 0 │ For INSERT queries in the replicated table, specifies that deduplication of insertings blocks should be preformed │
    └────────────────────┴───────┴─────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
  • https://t.me/clickhouse_ru
    @beglaryanartur #145639 09:20 AM, 04 Mar 2020
    Попробуйте так
    clickhouse-client --insert_deduplicate=0

    ну или если вставляете через http передайте в аргумент
  • Сработало! Благодарю
  • https://t.me/clickhouse_ru
    @beglaryanartur #145641 09:21 AM, 04 Mar 2020
    Но это не рекомендуется, из-за того что нету транзакций, типо минимальная защита от дублирования данных, чтобы для Replicated не вставить на двух нодах одно и то же
  • https://t.me/clickhouse_ru
    Вам надо хайку писать Костя...
    поставил постргя
    сон мой не потревожить
    а главное сколько потратить можно теперь
    ладно, сегодня туман...
  • https://t.me/clickhouse_ru
    @beglaryanartur #145643 09:21 AM, 04 Mar 2020
    кстати если бы у вас не было Replicated, всё было бы ок
  • @goosecat #145644 09:23 AM, 04 Mar 2020
    Я люблю Японию , но говорю только по китайски
  • На ус мотаю
  • @goosecat #145646 09:23 AM, 04 Mar 2020
    Хайку на китайском не очень
  • https://t.me/clickhouse_ru
    @387452444 #145647 09:24 AM, 04 Mar 2020
    вы главное в японии на китайском не говорите :)
  • https://t.me/clickhouse_ru
    а что будет?
  • https://t.me/clickhouse_ru
    можно попробывать поизвращатся с summingmergetree или aggregatingmergetree
  • https://t.me/clickhouse_ru
    @387452444 #145650 09:25 AM, 04 Mar 2020
    недолюбливают друг друга )) чутьчуть
  • @goosecat #145651 09:27 AM, 04 Mar 2020
    мне нормально я в тае хорошо спасаюсь
  • @goosecat #145652 09:28 AM, 04 Mar 2020
    помогает на яварат за своего сойти )
  • https://t.me/clickhouse_ru
    сразу при вставке
  • спасибо
  • https://t.me/clickhouse_ru
    @lnuynxa #145655 09:29 AM, 04 Mar 2020
    а так у меня наверное вьюх 8
  • https://t.me/clickhouse_ru
    ага я сразу еще вас с китайцем перепутал, долго удивлялся что не он...
  • @goosecat #145657 09:34 AM, 04 Mar 2020
    😂
  • https://t.me/clickhouse_ru
    @Sdmxx #145658 09:37 AM, 04 Mar 2020
    Кто-нибудь знает почему clickhouse потребляет так много оперативы даже если нет запросов?
  • https://t.me/clickhouse_ru
    @EKbfh ↶ Reply to #145658 #145659 09:38 AM, 04 Mar 2020
    так много это сколько?
    посмотри чем занимается он
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145659 #145660 09:38 AM, 04 Mar 2020
    128 гб
  • это помимо словарей и кэша засечек?
  • https://t.me/clickhouse_ru
    @EKbfh #145662 09:39 AM, 04 Mar 2020
    уверен, что не тселектов и мерджей текущих?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145662 #145664 09:40 AM, 04 Mar 2020
    Да. на запрос system.processes не выдает запросов
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145661 #145665 09:41 AM, 04 Mar 2020
    словарей нет, а что такое кэш засечек?
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145666 #145667 09:44 AM, 04 Mar 2020
    Я только что его сбросил через SYSTEM DROP MARK CACHE
  • https://t.me/clickhouse_ru
    @Sdmxx #145668 09:44 AM, 04 Mar 2020
    не изменилось ничего
  • https://t.me/clickhouse_ru
    @Sdmxx #145669 09:44 AM, 04 Mar 2020
    по прежнему 127 гб забито ничем
  • https://t.me/clickhouse_ru
    @lnuynxa #145670 09:45 AM, 04 Mar 2020
    они забиты кешем
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145670 #145671 09:45 AM, 04 Mar 2020
    SYSTEM DROP MARK CACHE а эта команда не сбрасывает кэш?
  • Проверьте через free -h действительно ли память занята.
    Ну и помимо processes там есть ещё:
    select * from system.merges
  • https://t.me/clickhouse_ru
    @lnuynxa #145673 09:46 AM, 04 Mar 2020
    есть еще кеш данных
  • SELECT
    database
    table,
    count() AS cnt_parts,
    sum( rows ) AS rows_,
    sum( data_compressed_bytes ) AS data_compressed_bytes_,
    sum( data_uncompressed_bytes ) AS data_uncompressed_bytes_,
    toUInt64( data_compressed_bytes_ / data_uncompressed_bytes_ * 10000 ) / 100 AS compress_perc,
    sum( marks ) AS marks_,
    sum( marks_bytes ) AS marks_bytes_,
    sum( primary_key_bytes_in_memory_allocated ) AS primary_key_bytes_in_memory_allocated_
    FROM system.parts
    WHERE active = 1
    GROUP BY database, table
    ORDER BY database, table DESC;
  • https://t.me/clickhouse_ru
    @lnuynxa #145675 09:46 AM, 04 Mar 2020
    сжатый-несжатый
  • @728205186 #145676 09:47 AM, 04 Mar 2020
    primary_key_bytes_in_memory_allocated_ - этот постоянно в памяти
    marks_bytes_ - этот по ситуации подгружается
  • @728205186 #145677 09:47 AM, 04 Mar 2020
    если просуммировать эти два столбца - получается 127 Gb ?
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145672 #145678 09:48 AM, 04 Mar 2020
    проверил system.merges выдает нулевой результат, а память действительно забита
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145674 #145679 09:48 AM, 04 Mar 2020
    сейчас проверю, спасибо
  • вывод free -h?
  • если сумма будет примерно похожа - сделайте SYSTEM DROP MARK CACHE и посмотрите, бедут ли эффект? если нет, значит это не кэш засечек, а что то ещё
  • https://t.me/clickhouse_ru
  • вот тут ещё советовали:
    https://t.me/clickhouse_ru/90371
    Denny Crane (I don't work at Yandex (never did)) in ClickHouse не тормозит

    попробуйте SYSTEM DROP MARK CACHE; echo 1 > /proc/sys/vm/drop_caches может это только в озу

  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145677 #145684 09:52 AM, 04 Mar 2020
    там выходит всего 2,5 гб
  • значит см. ссылочку последнюю... это кэш ОС хулиганит
  • https://t.me/clickhouse_ru
    да это в любой линукс системе такое будет... выдыхайте все у вас хорошо с памятью
  • https://t.me/clickhouse_ru
    @387452444 #145687 09:55 AM, 04 Mar 2020
    вернее у вас не знаю, а у сервера - точно ))
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145687 #145688 09:55 AM, 04 Mar 2020
    а почему? просто раньше такого не было
  • @zhora9001 #145689 09:55 AM, 04 Mar 2020
    добрый день! подскажите, столкнулись со странным спецэффектом при подключении таблицы к кафке через MV. Сетап достаточно простой (как в доке):

    CREATE TABLE events {
    ...
    } ENGINE = MergeTree()

    CREATE TABLE events_queue AS events ENGINE = Kafka('kafka-1:9092,kafka-2:9092', 'Topic001', 'Group001', 'JSONEachRow');

    CREATE MATERIALIZED VIEW events_consumer TO events AS SELECT * FROM events_queue;

    При паблише в кафку события поялявются в таблице events, но периодически таблица самоочищается. Например, пишем в кафку 10k событий (по одному) раз в 15 сек и паралельно делаем SELECT count(*) FROM events и наблюдаем цифры типа 0, 0, 10000, 10000, 20000, 0, 10000

    Ощущение, что упускаем что-то очень банальное :)
  • https://t.me/clickhouse_ru
    Ну вы пользовались сервером запускали там кликхаус и проч - память бралась, поскольку она пока не нужна и свободной много то ОС очищать ее не торопится
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145690 #145691 09:58 AM, 04 Mar 2020
    а почему тогда при выполнении небольшого запроса ОС потребляет еще больше оперативы, а не использует из 127 гб забитых?
  • Ну это не кеши системы тогда.
    Проверяйте параметры КХ. Возможно баг
  • https://t.me/clickhouse_ru
    @387452444 #145693 09:59 AM, 04 Mar 2020
    потому что пока есть еще свободная память
  • https://t.me/clickhouse_ru
    @387452444 #145694 09:59 AM, 04 Mar 2020
    смысл ее туда сюда гонять
  • @iwizard7 #145695 10:00 AM, 04 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @387452444 #145696 10:00 AM, 04 Mar 2020
    начнет помирать от OOM тогда можно смотреть - но все линукс системы которые я видел всегда ютилизируют всю память независимо от нагрузки
  • https://t.me/clickhouse_ru
    @Respektnick #145697 10:01 AM, 04 Mar 2020
    Привет, подскажите должна ли работать функция optimaze при запросе к реплицируемой таблице на 2 серверах, у нас работает только на 1 серваке, на втором ошибка 'found shard without any specified connection' и это для таблицы с 1 строкой😱😱😱😱
  • https://t.me/clickhouse_ru
    @387452444 #145698 10:01 AM, 04 Mar 2020
    по крайней мере то что показывается через free
  • https://t.me/clickhouse_ru
    @Respektnick #145699 10:05 AM, 04 Mar 2020
    *optimaze никто не сталкивался?
  • select * from system.replication_queue
    select * from system.mutations
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145700 #145701 10:06 AM, 04 Mar 2020
    select * from system.mutations выдал 2 запроса
  • Ну и изучайте
    select * from system.metrics
    select * from system.asynchronous_metrics
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145702 #145703 10:09 AM, 04 Mar 2020
    спасибо, тяжело однако быть разработчиком
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145702 #145704 10:12 AM, 04 Mar 2020
    похоже Al был прав, я перезагрузил clickhouse и все ок
  • Возможно это что-то с мутациями, т.к. у меня free выглядит вот так на машинах
    total used free shared buff/cache available
    Mem: 377G 4.4G 35G 9.8M 337G 370G
    Swap: 0B 0B 0B
  • @SWx5YQ #145706 10:14 AM, 04 Mar 2020
    а кто-то настраивал SuperSet + Clickhouse >= 19.16? Я уже 2 драйвера clickouse sqlalchemy пробовал, один использует TabSeparatedWithNamesAndTypes, другой дефеолтный формат, но ни один из них из коробки не отображает данные нормально.
  • merge?
  • Всем привет! Наверное, имеется ввиду OPTIMIZE TABLE?
    Мы тоже столкнулись с похожей проблемой: 1 шард, 2 реплики Кликхауса. Таблица с движком ReplicatedMergeTree. На одном сервере OPTIMIZE TABLE работает, на втором выдаёт ошибку 'found shard without any specified connection'
    Кто-нибудь ещё сталкивался с такой проблемой?
  • https://t.me/clickhouse_ru
    Да все верно, я совсем недавно изучаю клик и данная ошибка не логична, пока решения не нашёл.
  • @IliaSevostianov #145710 11:19 AM, 04 Mar 2020
    Joined.
  • @261638839 #145711 12:04 PM, 04 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @patsevanton #145712 12:08 PM, 04 Mar 2020
    Подскажите, пожалуйста, Ничего страшного что Clickhouse подцепился только 1 ноде zookeer?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    Дедупликация реплицированной таблицы
  • Спасибо, разобрались
  • https://t.me/clickhouse_ru
    кх нода подключается только к одной зк ноде одновременно
  • https://t.me/clickhouse_ru
    @bass4x4 #145718 12:57 PM, 04 Mar 2020
    Привет. Как можно соединить массивы Array(String) в один при группировке по другому полю?
  • https://t.me/clickhouse_ru
    @qwblnp #145719 12:58 PM, 04 Mar 2020
    а куда можно написать, по поводу возможной доработки mat view?
    если мы правильно поняли суть ее работы, то можно было бы гипотетически ускорить выполнения обработки тригером данных.
  • https://t.me/clickhouse_ru
    @qwblnp #145720 12:58 PM, 04 Mar 2020
    смею предположить, что куда-то в гитхабе
  • https://t.me/clickhouse_ru
    Типа в mergetree таблице исчезают запси?
    В логе кх надо смотреть
  • https://t.me/clickhouse_ru
    groupArrayArray
  • только что заметил, моя вина: их удалял кх по ттл (тестировал с плохими данными)
  • https://t.me/clickhouse_ru
    А версия кх? Если плавно растет то утечка.
    Но вообще если постоянно долбить запросами то jemalloc кеширует и не возвращает память назад чтобы не тратить время на аллокацию
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145724 #145725 01:05 PM, 04 Mar 2020
    после перезагрузки кх все стабилизировалось, вероятно кэш ОС
  • https://t.me/clickhouse_ru
    Да вам бред пишут вы верите.
    RES это не кеш ос -- это памчть которую захавал кх.
    Кеш ос не очищается при рестарте приложения.
  • https://t.me/clickhouse_ru
    это что-то новое. А репликация работает нормально? Версия кх?
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145726 #145728 01:18 PM, 04 Mar 2020
    Хмм понял, спасибо за пояснение
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145724 #145729 01:19 PM, 04 Mar 2020
    где вы работаете? всегда интересно было
  • https://t.me/clickhouse_ru
    Дома.
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145730 #145731 01:19 PM, 04 Mar 2020
    а на кого?
  • https://t.me/clickhouse_ru
    ну в два клика находится мой линкедин профиль. Не хочу писать в чатике.
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145732 #145733 01:26 PM, 04 Mar 2020
    так если вы под псевдонимом вымышленного персонажа
  • зачем вообще работать :)
  • https://t.me/clickhouse_ru
    @SergeyLossev #145736 01:40 PM, 04 Mar 2020
    Ребят, а кто может подсказать по дискам/вольюмам? Есть такой расклад по хранилищу
    select * from system.disks
  • https://t.me/clickhouse_ru
    @SergeyLossev #145737 01:40 PM, 04 Mar 2020
    Эта папка находится на SSD
  • https://t.me/clickhouse_ru
    @SergeyLossev #145738 01:41 PM, 04 Mar 2020
    При этом, в файле config.xml раздела, отвечающего за диски и вольюмы нет вообще
  • https://t.me/clickhouse_ru
    @SergeyLossev #145739 01:42 PM, 04 Mar 2020
    Вопрос в следующем - будет ли корректно задать таким образом, чтобы можно было перекидывать данные на более медленный HDD?
    <storage_configuration>
    <disks>
    <disk_ssd>
    <path>/srv/clickhouse/</path>
    </disk_ssd>
    <disk_hdd>
    <path>/data/clickhouse/</path>
    </disk_hdd>
    </disks>
    </storage_configuration>
  • https://t.me/clickhouse_ru
    @SergeyLossev #145740 01:44 PM, 04 Mar 2020
    И нужно ли как-то отдельно описывать default?
  • https://t.me/clickhouse_ru
    @Sdmxx #145741 01:52 PM, 04 Mar 2020
    INSERT INTO default.tmp_user_categories_count SELECT user_id, count(*) as count, category_id
    FROM default.tmp_user_categories
    GROUP BY user_id, category_id

    8 млрд записей
    Как можно оптимизировать этот запрос ? не хватает 205 гб оперативы
  • https://t.me/clickhouse_ru
    если есть дата, можно по дате разбить на несколько запросов
  • @happy_code #145743 02:05 PM, 04 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @vbura #145744 02:10 PM, 04 Mar 2020
    Joined.
  • раз не хватает памяти, у вас скорее всего select не отрабатывает (у вас же запрос падает?)
    попробуйте с трейсом включенным, какое использование памяти
  • @dj_mixer #145746 02:12 PM, 04 Mar 2020
    external group by включен?
  • @997057859 #145747 02:13 PM, 04 Mar 2020
    Добрый день, подскажите пожалуйста (не могу найти в документации), на одной из конференций говорили что очень скоро появится кеширование запросов из коробки, не появилось еще?
  • select * from system.settings s where name like '%before_external%';

    что говорит
  • https://clickhouse.tech/docs/ru/extended_roadmap/

    написано что ПР уже есть если вы про результаты запросов
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #145748 #145750 02:15 PM, 04 Mar 2020
    Можно чуть поподробнее я всего-лишь джавист который вынужден работать с CH
  • https://t.me/clickhouse_ru
    @unamedrus Al @Shazo_Rus @den_crane
    чекните, плз
  • https://t.me/clickhouse_ru
    @Alexander_Zhv #145752 02:24 PM, 04 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    default это то диск, который отвечает переменной path в конфиге
  • https://t.me/clickhouse_ru
    Amplifying ClickHouse Capacity with Multi-Volume Storage (Part 2)

    This article is a continuation of the series describing multi-volume storage, which greatly increases ClickHouse server capacity using tiered storage. In the previous article we introduced why tiered storage is important, described multi-volume organization in ClickHouse, and worked through a concrete example of setting up disk definitions. 

  • https://t.me/clickhouse_ru
    т.е., видимо, это
  • https://t.me/clickhouse_ru
    нужно еще будет создать policies в которой можно указать необходимые ограничения
  • https://t.me/clickhouse_ru
    д
  • https://t.me/clickhouse_ru
    Меня тут как раз раздел default и смущает...
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @SergeyLossev #145760 02:32 PM, 04 Mar 2020
    Есть опасения, что впишу пути на несуществующие папки, перезапущу КХ, файлов он по тем путям не найдёт, перепишет какие-нибудь конфиги, что я потом вообще ничего обратно не соберу
  • https://t.me/clickhouse_ru
    а вам зачем? Это странная фича, у вас бывают запросы которые повторяются один в один?
    кстати, в mysql выпилили как вредную
  • @toolen_rus #145762 02:48 PM, 04 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @druzhoksapozhok #145763 02:53 PM, 04 Mar 2020
    Всем привет. Я столкнулся со странной проблемой - у меня копир при копировании таблицы как я ни кручу-верчу переносит только 2 недели (данных в копируемой таблице - месяц), никто такое не встречал?
  • хм, запустите запрос в базу и пришлите результат
  • бывают запросы один в один которые выполняются по 20 секунд (группировка по большой строке на 500кк данных)
  • У меня бывает: Select lc_col from T group by lc_col :)
  • согласен, иногда в dashboardах такое бывает, можно каким нибудь keyword сделать типа (cache). обычно в оракле по sqlid есть result cache
  • https://t.me/clickhouse_ru
    @floxard #145768 03:04 PM, 04 Mar 2020
    можно жинкс сверху повесить, если по http ходите в кх
  • https://t.me/clickhouse_ru
    @floxard #145769 03:04 PM, 04 Mar 2020
    NGINX Content Caching

    Cache both static and dynamic content from your proxied web and application servers, to speed delivery to clients and reduce the load on the servers.

  • кэш-то любой можно прикрутить да, просто ищу самый простой вариант решения
  • можно, но это довольно тривиальная и базовая фича для БД
  • еще рассматриваю вариант с мат вью и AggregatingMergeTree, но не уверен что это хорошая идея
  • https://t.me/clickhouse_ru
    There are only two hard things in Computer Science: cache invalidation and naming things.
  • это да
  • https://t.me/clickhouse_ru
    @den_crane #145775 03:11 PM, 04 Mar 2020
    я не понял как там (в PR) будет с инвалидацией, особенно в свете distributed, тупо через 10 минут, может
  • @645869214 #145776 03:14 PM, 04 Mar 2020
    Ronny:
    I just added a index idx_some_id some_id type bloom_filter(0.1) granularity 8192

    But doing queries with prewhere some_id=123 still seems to do full column scan
  • https://t.me/clickhouse_ru
    А если policy не задать, а указать только диски - не заведётся?
  • https://t.me/clickhouse_ru
    есть неплохой кеш из коробки в chproxy
  • https://t.me/clickhouse_ru
    Т.е., по идее, должно быть достаточно такого простого конфига
    <storage_configuration>
    <disks>
    <disk_hdd>
    <path>/data/clickhouse/</path>
    </disk_hdd>
    </disks>
    </storage_configuration>

    А дефолтный будет подразумеваться из общих настроек
  • https://t.me/clickhouse_ru
    1) skip indexes work VERY rare

    2) granularity should be 1 to 5, 8192 -- complete BS
  • https://t.me/clickhouse_ru
    при создании таблицы, ты указываешь storage_policy, про указывать отдельные диски я не видел
  • I read the default value was 8192..
  • Seems that when setting granulatity to 1, I managed to skip like 1% of the data...
  • @645869214 #145784 03:27 PM, 04 Mar 2020
    So not really working
  • https://t.me/clickhouse_ru
    EN chat
  • https://t.me/clickhouse_ru
    Тэкс... с таким конфигом не прокатило...

    Я вот только не понял, в system.disks диски после рестарта КХ должны появиться или после того, как на них что-то будет записано?
  • https://t.me/clickhouse_ru
    @SergeyLossev #145787 03:30 PM, 04 Mar 2020
    как проверить-то, блин...
  • https://t.me/clickhouse_ru
    после рестарта
  • цитатки подъехали ))) и тем не менее наворачивают кеши на всех уровнях мама не горюй )
  • https://t.me/clickhouse_ru
    @dmks6 ↶ Reply to #145773 #145790 04:03 PM, 04 Mar 2020
    and off-by-1 errors :3
  • @dosereda #145791 04:21 PM, 04 Mar 2020
    Вопрос:
    я правильно понимаю, что для того, чтобы получить следующую структуру:
    [
    {
    "id": "japan",
    "color": "hsl(79, 70%, 50%)",
    "data": [
    {
    "x": "plane",
    "y": 233
    },
    {
    "x": "helicopter",
    "y": 135
    },
    {
    "x": "boat",
    "y": 131
    }
    ]
    }
    ]
    нужно получить плоский результат вида:

    "id": "japan", "color": "hsl(79, 70%, 50%)", "x": "plane", "y": 233
    "id": "japan", "color": "hsl(79, 70%, 50%)", "x": "helicopter", "y": 135
    "id": "japan", "color": "hsl(79, 70%, 50%)", "x": "boat", "y": 131

    и после этого делать сортировку на каком-либо языке программирования?
    Я пытаюсь построить график через nivo.rocks на javascript и собственно плоскую структуру уже получил.
    есть ли иной способ - через SQL?
  • https://t.me/clickhouse_ru
    Расскажите плз чем закончилось
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #145792 #145793 04:25 PM, 04 Mar 2020
    Пока ничем. Ищем решение
  • https://t.me/clickhouse_ru
    @rjs45 #145794 04:25 PM, 04 Mar 2020
    Но расскажу, как к к чему то придем
  • https://t.me/clickhouse_ru
    о чем вы вообще ? nested это сахар для команды CREATE TABLE only, это два обычных массива на самом деле

    items.color Array(Int32),
    items.weight Array(Int32)
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #145795 #145796 04:28 PM, 04 Mar 2020
    Ну вот испытываю трудности с чтением таких полей в golang
  • https://t.me/clickhouse_ru
    ClickHouse/clickhouse-go

    Golang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.

  • @zhora9001 #145798 04:34 PM, 04 Mar 2020
    после более пристального тестирования кафки с кх появилось два вопроса, быть может кто-то сталкивался:
    1) если уронить брокер, к которому подключен кх, он даже не пытается подключится к другому. справедливости ради, как только брокер возвращается - данные исправно попадают в кх, но неясно, почему он даже не пытается подключится к другим, которые ему переданы?
    2) после восстановления подключения к брокеру вставки доезжают, но иногда появляются дубликаты (единицы на десятки тысяч) даже с 1 консьюмером. помнится, раньше была такая беда - это все отголоски или же подобного быть не должно?
  • https://t.me/clickhouse_ru
    @den_crane #145799 04:34 PM, 04 Mar 2020
    а тьфу это запись, короче func Array(v interface{}) interface{}
  • https://t.me/clickhouse_ru
    @den_crane #145800 04:41 PM, 04 Mar 2020
    вообще дубликатов в кафке тяжело избежать в КХ без транзакций.

    сделали poll из кафка
    сделали insert в заполлленого в КХ
    делаем commit в кафка, упс брокера нет, оффсет не подвинулся
    подключаемся назад к боркеру, ребаланс тыры пыры, снова читаем оффсет который уже читали, потому что он не подвинулся
  • ясно, это в принципе похоже на наблюдаемые эффекты. Быть может знаете что-то по поводу неподключения к другим брокерам?
  • https://t.me/clickhouse_ru
    в логе КХ что? он пытается вообще?
  • @zhora9001 #145803 04:45 PM, 04 Mar 2020
    Да
  • @zhora9001 #145804 04:45 PM, 04 Mar 2020
    Постукивается пару раз в мертвый и все
  • @zhora9001 #145805 04:46 PM, 04 Mar 2020
    В другие даже не пытается похоже
  • https://t.me/clickhouse_ru
    @den_crane #145806 04:47 PM, 04 Mar 2020
    а как задан у таблицы kafka_broker_list = 'host:port',
  • @zhora9001 #145807 04:47 PM, 04 Mar 2020
    Да, три пару хост-порт через запятую
  • @zhora9001 #145808 04:47 PM, 04 Mar 2020
    В последнем тесте он выбрал вторую пару, что интересно
  • @zhora9001 #145809 04:47 PM, 04 Mar 2020
    То есть вариант «не распарсил дальше первого» отпадает
  • https://t.me/clickhouse_ru
    @den_crane #145810 04:50 PM, 04 Mar 2020
    заводите тикет, может вообще никогда не тестили этот сценарий
  • Принято, спасибо!
  • Нашел, что в MSSQL для формирования nested json имеются функции:
    FOR JSON AUTO / PATH
    В документации к clickhouse такого не упоминается, я правильно понимаю, что этих функций в clickhouse нет?
  • https://t.me/clickhouse_ru
    в КХ такого нет, добавляли темплейты, теперь можно даже html выплюнуть , но я не уверен что можно то что вы хотите
  • Получается, никакая nested структура на выходе не возможна?
    Я это к тому, что сконвертировать что-то подготовленое в json проще, нежели парсить построчно.
  • К сожалению, вложенные объекты в json не поддерживаются
  • @dosereda #145816 05:17 PM, 04 Mar 2020
    Ясно, спасибо за ответы.
  • @AlexanderMillin #145817 05:17 PM, 04 Mar 2020
    У меня есть идея, как это реализовать, но руки пока не дошли. Может кто-то сделает раньше меня - https://github.com/ClickHouse/ClickHouse/issues/7787
    JSON serialization/deserialization for named tuples · Issue #7787 · ClickHouse/ClickHouse

    Use case Allow JSON-objects inside of JSON-bases formats. Describe the solution you'd like Currently, names are lost when named tuple serialized to JSON. SELECT CAST((1, 'Test&#...

  • @1008029612 #145818 06:15 PM, 04 Mar 2020
    Joined.
  • @dj_mixer #145819 06:27 PM, 04 Mar 2020
    вопрос на great-fucking-design-advice. как у КХ с East-West траффиком? Плюс варианта Б с использованием большего числа ядер ясен. есть другие вопросы:

    1. если сделать дистинкт с высоким кардиналити в варианте А на втором шарде по первому региону - сначала данные сначала придут на хост на котором запущен запрос или придет только итоговый state аггрегации?

    2. есть ли компрессия данных пересылаемых между хостами?

    3. есть ли подводные камни, что при некоторых запросах КХ будет слать прямо сырые данные со всех шардов в один?
  • https://t.me/clickhouse_ru
    @den_crane #145820 06:29 PM, 04 Mar 2020
    Option B
  • https://t.me/clickhouse_ru
    @den_crane #145821 06:29 PM, 04 Mar 2020
    придет только итоговый state аггрегации
  • https://t.me/clickhouse_ru
    @den_crane #145822 06:29 PM, 04 Mar 2020
    2 есть компрессия
  • @dj_mixer #145823 06:30 PM, 04 Mar 2020
    т.е. камней и багов в этом плане у вас не было? )
  • https://t.me/clickhouse_ru
    @den_crane #145824 06:30 PM, 04 Mar 2020
    ну запрос локально обрабатывается в регионе, если ума хватит настроить load_balancing
  • https://t.me/clickhouse_ru
    @den_crane #145825 06:31 PM, 04 Mar 2020
    репликация тоже работает на 150мс
  • @dj_mixer #145826 06:31 PM, 04 Mar 2020
    я склоняюсь к Б, просто есть предыдущий опыт на других системах когда были баги
  • https://t.me/clickhouse_ru
    @den_crane #145827 06:31 PM, 04 Mar 2020
    Данные где генерятся? в самих регионах?
  • @dj_mixer #145828 06:31 PM, 04 Mar 2020
    все базы рядом
  • @dj_mixer #145829 06:31 PM, 04 Mar 2020
    регион - регион данных
  • просто А проще "траблшутить"
  • @dj_mixer #145831 06:33 PM, 04 Mar 2020
    поэтому сверяюсь с опытными коллегами, были ли проблемы
  • @dj_mixer #145832 06:33 PM, 04 Mar 2020
    судя по всему в этом плане проблем нет
  • @dj_mixer #145833 06:33 PM, 04 Mar 2020
    спасибо
  • https://t.me/clickhouse_ru
    @den_crane #145834 06:36 PM, 04 Mar 2020
    Сложности будут конечно с зукипером, летенси у вставляющих высокая будет высокая
  • https://t.me/clickhouse_ru
    @den_crane #145835 06:37 PM, 04 Mar 2020
    С другой стороны option B, с зукипером тоже самое.
    Возможно я бы лил через какой-то стриминг и вставлят в КХ в одном регионе, где зукипер
  • да, из-за того что вставка одновременно во все шарды?
  • @dj_mixer #145837 06:40 PM, 04 Mar 2020
    спасибо, мы это протестим, в крайнем случае всегда можно залипнуть в вариант А
  • https://t.me/clickhouse_ru
    @den_crane #145838 06:40 PM, 04 Mar 2020
    из-за того что зукипер будет в одном регионе и далеко от остальных 3
  • физически все в одном регионе, простите, вместо слова регион имелось ввиду регионданных, грубо говоря данные запрашиваемые "вместе"
  • @dj_mixer #145840 06:42 PM, 04 Mar 2020
    т.е. все вместе, рядом, в одном датацентре
  • https://t.me/clickhouse_ru
    @den_crane #145841 06:44 PM, 04 Mar 2020
    ну блин, естественно что если сложить все данные пользователя А только в shard 1 (шардировать по ключу а не rand), то и компрессия выше и быстрые запросы можно делать с distributed_group_by_no_merge
  • @dj_mixer #145842 06:47 PM, 04 Mar 2020
    да, но ручная балансировка, неравный объем данных, вот этот весь геморрой, поэтому собственно вопрос об эффективности распределенных запросов. данных много в компрессии и прочем особо выигрыша нет
  • https://t.me/clickhouse_ru
    @den_crane #145843 06:48 PM, 04 Mar 2020
    некоторые запросы с distributed_group_by_no_merge (distinct uniq) начнут вычисляться прямо на шардах и ускорятся в N раз
  • @dj_mixer #145844 06:48 PM, 04 Mar 2020
    distributed_group_by_no_merge - можно подробней, что он делает?
  • @dj_mixer #145845 06:48 PM, 04 Mar 2020
    ок, не успел спросить _)
  • https://t.me/clickhouse_ru
    @den_crane #145846 06:50 PM, 04 Mar 2020
    ну если шард уже посчитал все, то не нужно сами поля/значения передавать на инициатор, надо просто сложить результаты
  • https://t.me/clickhouse_ru
    @den_crane #145847 06:51 PM, 04 Mar 2020
    "Do not merge aggregation states from different servers for distributed query processing - in case it is for certain that there are different keys on different shards."
  • @dj_mixer #145848 06:52 PM, 04 Mar 2020
    а как ведет себя на дубликатах? две строки?
  • https://t.me/clickhouse_ru
    @den_crane #145849 06:57 PM, 04 Mar 2020
    ? откуда дубликаты?

    одинаковые строки на шардах

    мы шардировали по user_id

    select uniq(user_id), ......
    group by .....

    distributed_group_by_no_merge с шардов будут переданы значения uniq, но не сами user_id
  • select user_id, sum(quality)
    group by user_id

    при дубликатах (условно случайно), при включенном параметре distributed_group_by_no_merge
  • https://t.me/clickhouse_ru
    @den_crane #145851 07:05 PM, 04 Mar 2020
    ну пользователь А живет только в первом шарде
    1шард посчитал sum 20
    инициатор

    выдаст A, 20
    если прилетит А с шарда 2 , то будет 2 строчки с А
  • @dj_mixer #145852 07:06 PM, 04 Mar 2020
    ок, жить можно, интересный функционал ) спасибо за ликбез
  • https://t.me/clickhouse_ru
    @nyoroon #145853 07:10 PM, 04 Mar 2020
    на сколько плохая идея через мат вью вставлять в distributed таблицу для перешардирования по ключу?
  • @181568392 #145854 07:16 PM, 04 Mar 2020
    Скажите, пожалуйста, есть id заказа, у него 3 типа цены, нужно для каждого заказа выводить только самую высокую цену, argMax не подходит для этой цели, как можно решить эту задачу в кх?
  • https://t.me/clickhouse_ru
    вообще это работает. Но в моем специфическом кейсе почему-то инсерт разбивался на сотни инсертов (при 7 шардах и версии CH 1.394), мне нужно было не очень, поэтому я забил и не разбирался.
  • /help
  • https://t.me/clickhouse_ru
    в смысле надо еще что-то кроме цены выводить иначе это просто max

    select заказ, max(price)
    group by заказ

    и можно

    select заказ, argMax( tuple(*) , price)
    group by заказ
  • Дело в том,что argmax возратит Макс цену из всего набора цен а не конкретного заказа, то есть тут нужно окно +argMax возвращает первый аргумент то есть не Макс цену а id заказа с максимальной ценой
  • https://t.me/clickhouse_ru
    >возратит Макс цену из всего набора цен а не конкретного заказа
    нет

    все будет работать как вы хотите

    select заказ, argMax( tuple(*) , price)
    group by заказ
  • @dj_mixer #145860 07:28 PM, 04 Mar 2020
    tuple(*)... а я блин пишу tuple(col1, col2, col3) 🙈
  • Не работал с кортежами, вы написали select заказ, argMax(tuple (*), price) group by заказ, tuple так и указывать с *?
  • @181568392 #145862 07:28 PM, 04 Mar 2020
    Или что в его загонять
  • https://t.me/clickhouse_ru
    @den_crane #145863 07:30 PM, 04 Mar 2020
    как хотите, можете нужные поля перечислить, можете *

    на самом деле разница небольшая если сделать без tuple

    select заказ,
    max(price)
    argMax( col1 , price),
    argMax( col2 , price),
    .....
    argMax( coln , price),
    group by заказ
  • А если у меня таких цен 500 тысяч , посл запрос подойдёт ?
  • https://t.me/clickhouse_ru
    да
  • интересно стало, а есть ли какая-нибудь вероятность того, что значения в последнем варианте попадут из разных строк при одинаковой цене ввиду отдельных вызовов функции? или всегда в обработке порядок строк между колонок одинаковый?
    ———-
    Calculates the 'arg' value for a maximum 'val' value. If there are several different values of 'arg' for maximum values of 'val', the first of these values encountered is output.
  • https://t.me/clickhouse_ru
    нет такой вероятности
  • https://t.me/clickhouse_ru
    вот и смущает что дофигища инсертов превратятся в ещё большее количество
  • спасибо🙂
  • @githubreleases_bot #145870 b o t 08:00 PM, 04 Mar 2020
    yandex/ClickHouse tagged: v20.1.5.26-stable
    Link: https://github.com/ClickHouse/ClickHouse/releases/tag/v20.1.5.26-stable
    Release notes:
    v20.1.5.26-stable
  • https://t.me/clickhouse_ru
    @387452444 #145871 08:01 PM, 04 Mar 2020
    Свежачок подвезли
  • @goosecat #145872 08:10 PM, 04 Mar 2020
    👍
  • @goosecat #145873 08:10 PM, 04 Mar 2020
    Нифтяк
  • https://t.me/clickhouse_ru
    @rheinx #145874 08:12 PM, 04 Mar 2020
    Друзья, а где сохраняется метадата словаря при создании его через DDL?
  • https://t.me/clickhouse_ru
    Там же, где метадата таблиц. По дефолту /var/lib/clickhouse/metadata/db_name/dict_name.sql
  • https://t.me/clickhouse_ru
    @alekssaff #145876 08:14 PM, 04 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #145875 #145877 08:14 PM, 04 Mar 2020
    Ага, нашлась родимая. Спасибо!
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #145792 #145878 09:07 PM, 04 Mar 2020
    Не мог считать значения Array(X) потому что либа не может обработать Array(Nullable(X))
    Если убрать в труктуре Nullable, читает отлично
  • 05 March 2020 (286 messages)
  • https://t.me/clickhouse_ru
    @prizmo_49 #145879 07:02 AM, 05 Mar 2020
    Joined.
  • @toolen_rus #145880 07:41 AM, 05 Mar 2020
    Коллеги, подскажите пожалуйста, есть ли возможность писать данные в ClickHouse по UDP?
  • https://t.me/clickhouse_ru
    Посмотрите на kittyhouse, там есть udp
  • KittenHouse)
  • https://t.me/clickhouse_ru
    Так точно, спасибо
  • @toolen_rus #145884 08:07 AM, 05 Mar 2020
    Спасибо, посмотрю 👀
  • https://t.me/clickhouse_ru
    @prizmo_49 #145885 08:19 AM, 05 Mar 2020
    ребята, привет. можете помочь - есть очень много битых данных, которые надо восстановить. Соответственно надо сделать много Alter table name update .... Вчера пробовала сделать это на тестовом сервере, в результате clickhouse-server упал и подниматься не хотел - постоянно была ошибка Can't receive Netlink response: error -2 - все заработало после того, как я почистила директорию `/var/lib/clickhouse/data/default/.../mutation_***.txt`никто не знает после достижения какого количества mutation_***.txt сервер падает? (но в итоге данные поменялись успешно)
  • https://t.me/clickhouse_ru
    @anywayhowisyourslife #145886 08:30 AM, 05 Mar 2020
    с чем может быть связано?
    обновил колонку через alter table ... update column = 123 where ...
    в system.mutations в колонке is_done лежит 1 для это мутации. но по факту измеений нет
  • https://t.me/clickhouse_ru
    @karazbaev #145887 08:35 AM, 05 Mar 2020
    добрый день., небольшой нубский вопрос по оптимальности хранения метрик в кликхаус: как лучше хранить метрики, каждую в виде отдельной таблицы с названием метрики и двумя колонками: (clock, value) или все метрики в одной таблице (clock, metricid, value)? Количество метрик динамическое от 1000 до 5000+ за один батч инсерт, количество значений в каждой метрике от 86400 до 604000, но в рамках одного инсерта у всех метрик одинаковое количество строк
  • https://t.me/clickhouse_ru
    @TrueCarry #145888 08:37 AM, 05 Mar 2020
    5000 таблиц ничем хорошим не кончатся
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #145887 #145889 08:48 AM, 05 Mar 2020
    я бы лил в 1 таблицу, но ввел еще 1 поле, по которому можно было бы партиционировать таблицу
  • @lucifron31 #145890 08:50 AM, 05 Mar 2020
    Добрый день коллеги! Есть небольшая проблемка при загрузке файла csv в базу.Файл 300 колонок размер файла 1.5 гигабайта. При попытке загрузить на сервер падает ошибка что не хватает памяти, если убрать ограничение по памяти то потребляет 15 гигабайт памяти. Можно как то ограничить у запроса объем памяти на загрузку файла до 10 гигабайт?
    Если грузить файл таким же объемом но скажем 15 колонок такого потребления памяти нет и потребляем всего 3 гигабайта.

    ClickHouse exception, code: 241, host: localhost, port: 8123; Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 9.33 GiB (attempt to allocate chunk of 16777280 bytes), maximum: 9.31 GiB (version 19.15.2.2 (official build))
  • https://t.me/clickhouse_ru
    toDate(clock) - может быть ключом партиционирования. Какие запросы предполагается делать к этим данным?
  • https://t.me/clickhouse_ru
    Разбейте файл на части и грузите по частям
  • https://t.me/clickhouse_ru
    только выборка определенных метрик по диапазону clock, для отрисовки в графане
  • а другого способа нет?
  • https://t.me/clickhouse_ru
    @dmitry_berezhnov #145895 08:55 AM, 05 Mar 2020
    Увеличте лимит памяти для КХ. Или создайте таблицу в движком File и попробуйте сделать INSERT INTO ... SELECT из неё
  • https://t.me/clickhouse_ru
    @callaby #145896 08:57 AM, 05 Mar 2020
    Похоже на телеметрию физических приборов. Можно или партиционирования по toDate(clock) или можно наверное сделать отдельное поле Date. И я бы тоже лил в одну таблицу
  • в таблицу и так льется через INSERT INTO.
    Примерно как тут https://clickhouse.tech/docs/ru/interfaces/cli/#cli_usage
  • @381695103 #145898 09:06 AM, 05 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    Может вам поможет поиграться с настройкой input_format_parallel_parsing. Включить/выключить
  • @381695103 #145900 09:12 AM, 05 Mar 2020
    Господа, насколько сложны операции апдейта для кликхауса при достаточно высокой cardinality и 300кк+ записей, раз в 10-15 сек объемом 10-20к записей?
  • https://t.me/clickhouse_ru
    я бы сказал практически нереальны, если только не использовать Replacing
  • https://t.me/clickhouse_ru
    У вас сервер ляжет минут через 20. Не делайте так, такой профиль КХ не вывозит
  • https://t.me/clickhouse_ru
    @dmitry_berezhnov #145903 09:23 AM, 05 Mar 2020
    Храните изменяемые данные например в монге. Апдейте там же. А в КХ переливайте раз в час или день. Например храните в Replacing и после заливки дублей с обновлениями - делайте OPTIMIZE TABLE для изменненых партиций
  • https://t.me/clickhouse_ru
    @alarin #145904 09:33 AM, 05 Mar 2020
    подскажите какой index_granularity принято выбирать? стоит 8192 не знаю насколько это эффективно
  • Спасибо, попробую
  • https://t.me/clickhouse_ru
    как вы думаете почему стоит такая цифра?
  • https://t.me/clickhouse_ru
    @alarin #145907 09:34 AM, 05 Mar 2020
    стандартное значение, кажется
  • https://t.me/clickhouse_ru
    а почему оно стандартно?
  • https://t.me/clickhouse_ru
    @dmitry_berezhnov #145909 09:35 AM, 05 Mar 2020
    Стандартное, если не знаете что это - пишете как есть
  • https://t.me/clickhouse_ru
    @alarin #145910 09:35 AM, 05 Mar 2020
    The value 8192 is appropriate for most tasks.
  • https://t.me/clickhouse_ru
    @alarin #145911 09:35 AM, 05 Mar 2020
    понял, спасибо )
  • https://t.me/clickhouse_ru
    ага ) вот и ответ
  • https://t.me/clickhouse_ru
    @387452444 #145913 09:42 AM, 05 Mar 2020
    не умеет в быстрые апдейты
  • не получится так потому что у приложения нет доступа к файловой системе сервера БД
  • загрузить файл на прямую нельзя никак
  • такой опции нет в версии 19.15 к сожалению
  • https://t.me/clickhouse_ru
    вообще в современных версиях кликхауса необязательно указывать
  • https://t.me/clickhouse_ru
    Эту настройку стоит менять, если вы уверены, что вам это нужно) Плюс с версии 19.14 оно ещё дополнительно ограничивается в 10мб на гранулу.
  • https://t.me/clickhouse_ru
    @niasar1305 #145920 10:47 AM, 05 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @tehcpu #145921 10:54 AM, 05 Mar 2020
    Joined.
  • @250676413 #145922 11:30 AM, 05 Mar 2020
    Создал image clickhouse с базой данных, но без пароля
    как сконфигурировать docker-compose так, чтобы в контейнере(clickhouse)
    можно было обратиться к клиенту
    clickhouse-client --user=root --password=r00t
    А мы можем зайти clickhouse-client
    смотрели такую и другие ссылки, все равно не до конца понятно
    https://stackoverflow.com/questions/52198099/creating-db-and-tables-in-a-dockerized-clickhouse-instance-from-docker-compose-f

    version: '3'
    services:
    clickhousedb:
    image: clickhouse_with_upload_data
    container_name: clickhouse_db
    ports:
    - "8124:8125"
    - "9000:9000"
    environment:
    # CLICKHOUSE_DATABASE: 'boxplatv2'
    # CLICKHOUSE_USER: 'root'
    # CLICKHOUSE_PASSWORD: 'r00t'
    # CLICKHOUSE_ROOT_USER: 'root'
    # CLICKHOUSE_ROOT_PASSWORD: 'r00t'
    restart: always
    grafana:
    image: grafana/grafana:latest
    container_name: grafana_clickhouse
    ports:
    - "3007:3000"
    - "25:25"
    env_file:
    - 'env.grafana'
    creating db and tables in a dockerized Clickhouse instance from docker-compose file

    My requirement is to create DB and Tables in Clickhouse when I'm bringing it up using docker-compose. If it is mysql, I do it as below : mysql_1: image: mysql:5.7.16 environment:

  • @120600581 #145923 11:38 AM, 05 Mar 2020
    Всем привет. Скажите, при создании таблицы
    CREATE TABLE table() ENGINE = MergeTree() PARTITION BY toYYYYMMDD(msgtime) ORDER BY (msgtime, device_ip) SAMPLE BY device_ip SETTINGS index_granularity = 4096

    У нас стоит ORDER BY msgtime, тоесть по времени в секундах. Насколько знаю, то кликхаусу требуется некоторое время в фоне, чтобы раскидать строки в порядок и сделать слияние.

    Вопрос Сколько времени времени на это уходит?

    P.s. Суть такая, что нам надо почти моментально после вставки данных делать по ним запрос
  • https://t.me/clickhouse_ru
    @unamedrus #145924 11:48 AM, 05 Mar 2020
    кликхаус сначала пишет в tmp парты, а потом их сливает.
    почти моментально это сколько?
  • https://t.me/clickhouse_ru
    Парты пишутся в tmp, пока не закончен запрос. Как только запрос закончен - они перемещаются к основному датасету. Если под "сливанием" подразумевается процедура перемещения, то "сразу после окончания вставки". Если подразумевается процедура merge, то это не детерминировано, т.к. зависит от множества факторов и ряда настрек.
  • https://t.me/clickhouse_ru
    @unamedrus #145926 11:51 AM, 05 Mar 2020
    имеется в виду перемещения, да
    вопрос идет ли SELECT и по tmp партам в том числе?
    допустим buffer table engine позволяет учитывать в запросе те данные что находятся в буфере, емнип
  • @eugenie_r #145927 11:56 AM, 05 Mar 2020
    Всем привет!Подскажите, плиз, с помощью какой функции можно преобразовать тип TimeStamp в намерик формат? Читаю документацию и не нахожу
  • https://t.me/clickhouse_ru
    @yanda_andrey #145928 12:02 PM, 05 Mar 2020
    Если речь идет за тип DateTime, то toUnixTimestamp или toUInt32
  • https://t.me/clickhouse_ru
    @ekolesnikova #145929 12:02 PM, 05 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @ekolesnikova #145931 12:04 PM, 05 Mar 2020
    всем привет! Я использую truncate чтобы очистить таблицу TRUNCATE TABLE IF EXISTS reporting.selenium_reports у меня ругается Expected identifier что не так?
  • можете ошибку с клиента показать?
  • @dj_mixer #145933 12:07 PM, 05 Mar 2020
    не должно падать
  • https://t.me/clickhouse_ru
    @ekolesnikova #145934 12:07 PM, 05 Mar 2020
    [ERROR] PreparedStatementCallback; uncategorized SQLException for SQL [TRUNCATE TABLE IF EXISTS ?]; SQL state [null]; error code [62]; ClickHouse exception, code: 62, host: localhost, port: 8123; Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 26: 'reporting.ci_selenium_reports'. Expected identifier (version 19.15.7.30 (official build))
    ; nested exception is ru.yandex.clickhouse.except.ClickHouseException: ClickHouse exception, code: 62, host: localhost, port: 8123; Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 26: 'reporting.ci_selenium_reports'. Expected identifier (version 19.15.7.30 (official build))
  • @dj_mixer #145935 12:07 PM, 05 Mar 2020
    CREATE TABLE MNP.DJTEST (
    a DateTime, b Int32, c Int32
    )
    ENGINE = MergeTree()
    ORDER BY a;

    truncate table if exists MNP.DJTEST;
    —-
    все работает
  • https://t.me/clickhouse_ru
    @ekolesnikova #145937 12:09 PM, 05 Mar 2020
    кажется я поняла, у меня наверное '' подставляются
  • спасибо
  • https://t.me/clickhouse_ru
    Insert льет в tmp именно для того чтобы эти данные не были видны в select. Это фантомные строки. Инсерт в этот момент еще не закончен успешно и может упасть с ошибкой и отмениться полностью. Как только инсерт закончится успешно, причем не целиком (part успешно сформирован -- инсерт не атомарен -- парт атомарен), tmp будет переименован и появится в списке активных партов -- станет доступен селектам.
  • https://t.me/clickhouse_ru
    @lepage_d #145940 12:26 PM, 05 Mar 2020
    Я счас наверное странный вопрос спрошу - пытаемся посмотреть нагрузку на жесткий диск clickhouse-server с помощью pidstat. А там r/w сплошные нули. Более того, netdata тоже показывает что записей\чтения нет. Почему так?
  • https://t.me/clickhouse_ru
    @lepage_d #145941 12:26 PM, 05 Mar 2020
    Я предполагаю, что есть встроенный в кликхаус способ смотреть нагрузку - но пока я его не нашел
  • https://t.me/clickhouse_ru
    sample by device_ip -- айпиадреса не занимают все пространство числа, например не используется 0.*.*.*
    логично семплировать по хешфункции иначе результаты будут косые.
  • https://t.me/clickhouse_ru
    Htop умеет столбики diskread diskwrite там тоже 0?
  • @261638839 #145944 12:33 PM, 05 Mar 2020
    Подскажите, пожалуйста. Пробую DDL (CREATE DICTIONARY db.name ...) для создания словарей в 20.1. Всё работает, но словарь почему-то показывается в show tables :/. И запросы из него можно делать. Это фича или баг? Раньше ведь нельзя было так, и движок Dictionary для такой задачи до сих пор есть.
  • https://t.me/clickhouse_ru
    Это фича, просто автоматически создается табличное отображение для таких словарей.
  • @133452245 #145946 12:36 PM, 05 Mar 2020
    А в CH уже появились secondary index?
  • @133452245 #145947 12:36 PM, 05 Mar 2020
    вроде в доке смотрю что то такое есть
  • https://t.me/clickhouse_ru
    @den_crane #145948 12:37 PM, 05 Mar 2020
    Инверсных индексов нет и не ожидается
  • Зачем?? Мусор в show tables. Да и это не engine dictionary даже, когда просишь у него show create table - показывает "CREATE DICTIONARY ...".
    Т.е. даже не убрать его оттуда.
  • пнтн, спасибо
  • https://t.me/clickhouse_ru
    ну автор так сделал, яндексу так удобнее.
    создавайте в другой базе
  • мусор в show databases :)
    ну я понял, спасибо. Неожиданно прост.
  • @anna_matiushina #145953 12:47 PM, 05 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @327865368 #145954 12:49 PM, 05 Mar 2020
    create table data(
    id String,
    date_time DateTime,
    user_id UUID
    -- ...
    ) engine = ReplacingMergeTree()
    order by id;

    Хочу сделать агрегацию данных из этой таблицы по дням. Попробовал так:

    create materialized view agg_data_day
    engine = AggregatingMergeTree()
    order by(date, user_id) as
    select
    toDate(date_time) as date,
    user_id as user_id,
    sumState(1) as total
    from data
    group by date_time, user_id;

    В таблицу data данные вставляются блоками. После повторной вставки добавленного ранее блока происходит дедупликация в data, но в agg_data_date данные агрегируются повторно.

    Как настроить agg_data_day чтобы данные не агрегировались повторно? Или может есть другой способ построить такую агрегацию?
  • @ShiawasenaHoshi #145955 01:00 PM, 05 Mar 2020
    Joined.
  • MV = insert trigger
  • https://t.me/clickhouse_ru
    @327865368 #145957 01:04 PM, 05 Mar 2020
    понятно. как тогда по другому победить дубликаты?
  • https://t.me/clickhouse_ru
    Д.б. group by date

    Кол-во строк в aggregating за день и будет тем числом?
    Строки схлопнунтся в агррегейтин когда-нибудь. Сам sumstate не нужен
  • @dj_mixer #145959 01:07 PM, 05 Mar 2020
    если вам за "сегодня" не надо, можно просто заскеджюлить раз в день?
  • https://t.me/clickhouse_ru
    group by date - согласен

    да, число строк за день по user_id — то что нужно. т.е. агрегационная функция не нужна?
  • https://t.me/clickhouse_ru
    раз в день полностью перестраивать agg_data_day? старые записи в таблице data зачищаются, нужно хранить сагрегацированное.
  • почему полностью? за прошедший день только.
  • https://t.me/clickhouse_ru
    есть вероятность того, что завтра заедут данные за позавчера
  • @dj_mixer #145964 01:18 PM, 05 Mar 2020
    ну переделывать последние Х дня... в общем если Aggregating тоже схлопывает, проблем нет
  • https://t.me/clickhouse_ru
    @327865368 #145965 01:23 PM, 05 Mar 2020
    сейчас проверил — вставил повторно блок в data, увидел дубликаты в agg_data_day. сделал optimize table agg_data_day дубликаты пропали, но сумма в поле total конечно же увеличилась.
    не могу сообразить, что мне подойдёт вместо sumState(1) as total?
  • @LeOnId_VoLoShIn #145966 01:24 PM, 05 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @OlegTimofeev #145969 01:27 PM, 05 Mar 2020
    Подскажите, кто сталкивался, при запуске с 1воркером clickhouse-copier, генерятся тысячи одноименных процессов clickhouse-copier --config=... [AsyncBlockInput], которые поедают весь сервак. В чем может быть дело?
  • https://t.me/clickhouse_ru
    @Bartimeus33nt10 #145970 01:29 PM, 05 Mar 2020
    Joined.
  • можно поиграться "uniq(Id)" - вам же он нужен? по идее повторно вставленный Id не будет считаться
  • @dj_mixer #145972 01:35 PM, 05 Mar 2020
    я к сожалению слабо представляю как AggregatingMT вообще может схлопывать на основании результатов merge основной таблицы. Поэтому мне кажется что в итоге - ваш вариант скеджюлить без использования aggregating...
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @lepage_d #145974 01:37 PM, 05 Mar 2020
    По нулям
  • https://t.me/clickhouse_ru
    @unamedrus #145975 01:38 PM, 05 Mar 2020
    если на сервере ток кликхаус то я пользовался iotop -t 10 емнип
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    Тут еще такая вещь - смотрю внутри докер контейнера. Снаружи вроде как показывает норм стату
  • https://t.me/clickhouse_ru
    @unamedrus #145978 01:39 PM, 05 Mar 2020
    аа, возможно тут особенности докера
  • https://t.me/clickhouse_ru
    @SergeyLossev #145979 01:42 PM, 05 Mar 2020
    Есть такой расклад по полисям
    select * from system.storage_policies
  • https://t.me/clickhouse_ru
    в агрегированной таблице не важен id. важно количество записей в день для user_id. если поставить uniq(id) то в итоге в agg_data_day будет столько же записей что и в data, только полей будет меньше. придётся потом опять агрегировать в запросе :)
  • https://t.me/clickhouse_ru
    Создаю таблицу из примера
    CREATE TABLE example_table
    (
    d Date,
    s String
    )
    ENGINE = MergeTree
    PARTITION BY toYYYYMM(d)
    ORDER BY d
    TTL d + INTERVAL 1 MONTH DELETE,
    d + INTERVAL 2 WEEK TO DISK 'hdd_disk'
  • https://t.me/clickhouse_ru
    В ответ пишет такое
    DB::Exception: No such disk `hdd_disk` for given storage policy. (version 20.1.4.14 (official build))

    Что я делаю не так?
  • https://t.me/clickhouse_ru
    Конфиг по хранилищам такой
    <yandex>
    <storage_configuration>
    <disks>
    <default>
    <keep_free_space_bytes>1073741824</keep_free_space_bytes>
    </default>
    <hdd_disk>
    <path>/data/clickhouse/</path>
    <keep_free_space_bytes>1073741824</keep_free_space_bytes>
    </hdd_disk>
    </disks>

    <policies>
    <hdd_policy>
    <volumes>
    <hdd_volume>
    <disk>hdd_disk</disk>
    </hdd_volume>
    </volumes>
    </hdd_policy>
    </policies>

    </storage_configuration>
    </yandex>
  • да, но в запросе можно сканировать меньше данных... в общем делайте раз в день переподсчёт )
  • https://t.me/clickhouse_ru
    @327865368 #145985 01:55 PM, 05 Mar 2020
    спасибо
  • https://t.me/clickhouse_ru
    @rooftop #145986 01:59 PM, 05 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @tehcpu #145987 02:01 PM, 05 Mar 2020
    Добрый день, коллеги! Столкнулись с проблемой следующего характера.

    Имеется 2 таблицы, одна содержит ~31 миллион записей:

    create table CH_NP
    (
    np_id Int64,
    partition_date Date,
    port_req_id Nullable(FixedString(50)),
    user_id Int32,
    process_id Int32,
    process_type FixedString(50),
    donor_operator_id Nullable(Int32),
    donor_service_provider_id Nullable(Int32),
    donor_id FixedString(20),
    recipient_operator_id Nullable(Int32),
    recipient_service_provider_id Nullable(Int32),
    recipient_id Nullable(FixedString(20)),
    due_date Nullable(DateTime),
    submit_date Nullable(DateTime),
    new_route Nullable(FixedString(50)),
    connection_type Nullable(FixedString(50)),
    sub_is_company Nullable(UInt8),
    sub_name Nullable(FixedString(200)),
    sub_id Nullable(FixedString(50)),
    request_date DateTime,
    port_date Nullable(DateTime),
    status Int32,
    status_code_id Nullable(Int32),
    last_message_code FixedString(50),
    last_message_originator_id Int32,
    last_message_date DateTime,
    last_message_is_gui Nullable(UInt8),
    number_count Int32,
    number Nullable(Int64),
    region_id Nullable(Int16)
    )
    engine = ReplacingMergeTree() PARTITION BY partition_date;

    Вторая -- < 1к:

    create table CH__organization
    (
    id Int32,
    partition_date Date,
    org_parent_id Nullable(Int32),
    name FixedString(200),
    org_code Nullable(FixedString(50)),
    email Nullable(FixedString(100)),
    country FixedString(100),
    city Nullable(FixedString(50)),
    street Nullable(FixedString(100)),
    phone Nullable(FixedString(20)),
    fax Nullable(FixedString(20)),
    ip Nullable(FixedString(200)),
    is_end_point_enabled UInt8,
    end_point_url Nullable(FixedString(500)),
    end_point_username Nullable(FixedString(20)),
    end_point_password Nullable(FixedString(20)),
    is_deleted UInt8,
    type Nullable(Int32),
    end_point_concurrency_limit Nullable(Int16),
    code Nullable(FixedString(50)),
    mnc Nullable(FixedString(3)),
    legal_name Nullable(FixedString(200)),
    contract_number Nullable(FixedString(100))
    )
    engine = ReplacingMergeTree() PARTITION BY partition_date;

    Делаем вот такой запрос:

    SELECT org.name as donor_operator_name, two.recipient_operator_name, two.count, two.dt as date, org.org_code as donor_operator_code, two.recipient_operator_code, two.status
    FROM
    (SELECT one.recipient_operator_id, one.donor_operator_id, one.count, org.org_code as recipient_operator_code, org.name as recipient_operator_name, one.dt, one.status
    FROM
    (SELECT recipient_operator_id, donor_operator_id, sum(number_count) as count, toDate(port_date) as dt, status
    FROM default.CH_NP
    WHERE status in (0, 1, 2, 3) and port_date >= '2012-01-01 00:00:00' and port_date < '2100-01-01 00:00:00'
    GROUP BY recipient_operator_id, donor_operator_id, status, dt) as one
    JOIN default.CH__organization as org
    ON one.recipient_operator_id=org.id
    ) as two JOIN default.CH__organization as org
    ON two.donor_operator_id=org.id

    Который застывает на

    2020.03.05 09:54:07.132316 [ 45 ] {} <Trace> Aggregator: Merging aggregated data

    до отвала по таймауту.

    Используется этот драйвер (последней актуальной версии 1.0.3):
    https://github.com/mymarilyn/clickhouse-driver

    И сервер 19.9.2.4 (official build)

    На машине имеется 32 гб памяти + подкачка, кликхаус может забирать всю.
    Подскажите, пожалуйста, почему такое может быть и куда вообще копать?
    GitHub - mymarilyn/clickhouse-driver: ClickHouse Python Driver with native interface support

    ClickHouse Python Driver with native interface support - GitHub - mymarilyn/clickhouse-driver: ClickHouse Python Driver with native interface support

  • https://t.me/clickhouse_ru
    @lazuka23 #145988 02:01 PM, 05 Mar 2020
    Привет
    Подскажите, если я сделаю запрос вида INSERT INTO ... SELECT * FROM ..., а ог отвалится по таймауту, то его выполнение продолжится в фоне или прекратится?
  • попробуйте через clickhouse-client s Format Null, может он просто медленно работает
  • @dj_mixer #145990 02:04 PM, 05 Mar 2020
    своп выключен?
  • https://t.me/clickhouse_ru
    @tehcpu #145991 02:08 PM, 05 Mar 2020
    Своп включен, на 2гб
  • s format null - это что?
  • чтобы результат не возвращался по сети/в консоль итд, нам он не нужен же
  • может у вас память кончается и все начинает тормозить, хотя на этих объемах сложно этого добиться, но можете копнуть туда
  • Это странно, но и такое было при работе с этим запросом
  • @ShiawasenaHoshi #145996 02:12 PM, 05 Mar 2020
    Когда контейнер с кликом падал потому что он хотел сожрать 43 Гб,а есть только 32 (в логах видно)
  • https://t.me/clickhouse_ru
    @tehcpu #145997 02:14 PM, 05 Mar 2020
    Да, логи такие были:
    2020.03.05 09:49:17.855723 [ 9 ] {} <Debug> default.CH_NP: Removing part from filesystem 20200305_686954_686954_0
    2020.03.05 09:49:19.970091 [ 48 ] {} <Debug> MemoryTracker: Current memory usage: 7.87 GiB.
    2020.03.05 09:49:23.682695 [ 48 ] {} <Debug> MemoryTracker: Current memory usage: 8.88 GiB.
    2020.03.05 09:49:23.690777 [ 48 ] {} <Debug> MemoryTracker: Current memory usage: 12.88 GiB.
    2020.03.05 09:49:31.433436 [ 48 ] {} <Debug> MemoryTracker: Current memory usage: 20.92 GiB.
    2020.03.05 09:49:31.496883 [ 48 ] {} <Debug> MemoryTracker: Current memory usage: 22.92 GiB.
    2020.03.05 09:49:37.767663 [ 48 ] {} <Debug> MemoryTracker: Current memory usage: 23.17 GiB.
    2020.03.05 09:49:38.638787 [ 48 ] {} <Debug> MemoryTracker: Current memory usage: 27.67 GiB.
    2020.03.05 09:49:42.374790 [ 48 ] {} <Debug> MemoryTracker: Current memory usage: 43.22 GiB.
    2020.03.05 09:49:43.959367 [ 42 ] {db54bf5c-53d8-4a04-b894-1cce77a22102} <Error> executeQuery: Code: 173, e.displayText() = DB::ErrnoException: Allocator: Cannot mmap 16.00 GiB., errno: 12, strerror: Cannot allocate memory (version 19.9.2.4 (official build)) (from 172.16.241.1:57376) (in query: запрос
  • https://t.me/clickhouse_ru
    Ребят, я вас ещё побеспокою

    @unamedrus Al @Shazo_Rus @den_crane
  • https://t.me/clickhouse_ru
    кмк, ты сначала применяешь storage_policy а потом из нее выбираешь необходимые диски
  • https://t.me/clickhouse_ru
    @unamedrus #146000 02:17 PM, 05 Mar 2020
    но тогда тебе кмк, придется в сторадж полиси указать оба диска, один быстрый второй медленный
  • какой результат?
    select * from system.settings where name like '%threads%';
  • https://t.me/clickhouse_ru
    в CREATE TABLE?
  • https://t.me/clickhouse_ru
    @unamedrus #146003 02:18 PM, 05 Mar 2020
    +
  • и сколько дистинкт recipient_operator_id,donor_operator_id
  • @dj_mixer #146005 02:20 PM, 05 Mar 2020
    если можно - пропишите max_memory_usage << 30GB, запросы должны падать, а не "тормозить"
  • бывает они падают при max_mem == 0. Ставлю 8 или 16гб - падают всегда
  • @dj_mixer #146008 02:22 PM, 05 Mar 2020
    ограничьте память на 24ГБ и проверьте упадет ли этот запрос
  • @dj_mixer #146009 02:23 PM, 05 Mar 2020
    GROUP BY recipient_operator_id, donor_operator_id, status, dt - сколько строк?
  • @ShiawasenaHoshi #146010 02:23 PM, 05 Mar 2020
    лады
  • @dj_mixer #146011 02:24 PM, 05 Mar 2020
    попробуйте взять count... если у вас так много строк, что оно все в память не влезает, вам можно ещё попробовать
    max_bytes_before_external_group_by=7GB
  • @dj_mixer #146012 02:25 PM, 05 Mar 2020
    ещё можно убрать вложенные селекты, они вам не нужны (если руками написан запрос)
  • @dj_mixer #146013 02:25 PM, 05 Mar 2020
    SELECT cols
    FROM default.CH_NP
    join default.CH__organization
    join default.CH__organization
    ...
  • @dj_mixer #146014 02:26 PM, 05 Mar 2020
    или ещё лучше - dictionary - без join (т.е. CH__organization в словарь кладете и используете dictGet*)
  • так, это я намотаю на ус изучить
  • @dj_mixer #146016 02:27 PM, 05 Mar 2020
    в общем все рекомендации от самой простой (играть с параметром) к сложной выше
  • @ShiawasenaHoshi #146017 02:29 PM, 05 Mar 2020
    так, память выставили в 24гб. Попробуем остальные рекомендации и отпишемся.
  • >так, память увеличили
    а что так можно было? )))
  • это была приятная оговорка, к сожалению )
  • кажись 509к строк

    ща вот это еще выставлю max_bytes_before_external_group_by=7GB
  • https://t.me/clickhouse_ru
    @vadimsuhanov #146021 02:42 PM, 05 Mar 2020
    Всем привет, а кто-нибудь коннектил клик к табло серверному? Кто как это делал?
  • https://t.me/clickhouse_ru
    т.е. недоступна эта информация в текущем энве, естественно в докере по умолчанию это недоступно, гуглить docker CAP_NET_ADMIN
    недоступно потому эта фича позволяет из контейнера менять сеть на хосте
  • https://t.me/clickhouse_ru
    @Encetera #146024 02:59 PM, 05 Mar 2020
    Всем привет, а не поскажите в чем косяк, при старте сервера, раньше работало на 19 версии и мы обновлил до 20
    Include not found: networks
    2020.03.05 14:58:31.584754 [ 1 ] {} <Error> Application: DB::Exception: Cannot parse input: expected eof before:?
  • 509к - это очень мало на самом деле, думаю если уберете ненужные подзапросы, все будет хорошо
  • https://t.me/clickhouse_ru
    Выставлял. Не помогает
  • звучит оптимистично) Спасибо )
  • https://t.me/clickhouse_ru
    продолжится
  • https://t.me/clickhouse_ru
    Спасибо
  • https://t.me/clickhouse_ru
    @tehcpu #146030 03:00 PM, 05 Mar 2020
    Да, спасибо большое!
  • https://t.me/clickhouse_ru
    @tehcpu #146031 03:00 PM, 05 Mar 2020
    509к - это очень мало на самом деле, думаю если уберете ненужные подзапросы, все будет хорошо
  • https://t.me/clickhouse_ru
    --max_insert_block_size=100000 --min_insert_block_size_rows=100000 --max_compress_block_size=268435456 --min_compress_block_size=268435456
  • https://t.me/clickhouse_ru
    от рута htop запущен?
  • https://t.me/clickhouse_ru
    @lepage_d #146034 03:10 PM, 05 Mar 2020
    Да
  • https://t.me/clickhouse_ru
    а КХ при старте пишет
    Application: It looks like the process has no CAP_NET_ADMIN capability, 'taskstats' performance statistics will be disabled.

    погуглил, нет это не из-за этого. Должна быть статистика по диску по процессам, это не связано с cap_net_admin
  • @133452245 #146036 03:25 PM, 05 Mar 2020
    Товарищи, необходима помощь!
    Вот по поводу движка таблиц Join

    Данные таблиц Join всегда находятся в RAM. При вставке строк в таблицу ClickHouse записывает блоки данных в каталог на диске, чтобы их можно было восстановить при перезапуске сервера.

    я не совсем понял, данные на hdd у меня будут хранится а при запуске сервера помещатсья в RAM или же они всегда в рам и удаляются при перезапуске или чем то еще
  • при запросе все правые таблицы считаются в память
  • https://t.me/clickhouse_ru
    @rheinx #146038 03:31 PM, 05 Mar 2020
    Всем привет.

    Имеет ли смысл увеличивать гранулярность при создании индекса типа set(), если на ~1.5млрд записей, всего ~400 разных значений индексного значения?
  • я про движок
  • @dj_mixer #146040 03:32 PM, 05 Mar 2020
    а сорри, не пробовали но тут написано так:
    https://clickhouse.tech/docs/ru/operations/table_engines/join/
    Хранение данных¶
    Данные таблиц Join всегда находятся в RAM. При вставке строк в таблицу ClickHouse записывает блоки данных в каталог на диске, чтобы их можно было восстановить при перезапуске сервера.

    При аварийном перезапуске сервера блок данных на диске может быть потерян или повреждён. В последнем случае, может потребоваться вручную удалить файл с повреждёнными данными.
  • @dj_mixer #146041 03:33 PM, 05 Mar 2020
    данные и на HDD и в памяти
  • @dj_mixer #146042 03:33 PM, 05 Mar 2020
    lazy load или нет - не знаю
  • ну это я читал как раз таки :) вообщем то это я и хотел узнать, но пока что решил заюзать Log вроде как меньше проблем с ним
  • @7699150 #146044 03:47 PM, 05 Mar 2020
    Ребят, возможно этот вопрос задавали ранее, но можешь кто подскажет.

    Возможно ли в КХ переименовать матвью?
  • https://t.me/clickhouse_ru
    Если кому интересно, решение оказалось таким
    CREATE TABLE example_table
    (
    d Date,
    s String
    )
    ENGINE = MergeTree
    PARTITION BY toYYYYMM(d)
    ORDER BY d
    TTL d + INTERVAL 1 MONTH DELETE,
    d + INTERVAL 2 WEEK TO DISK 'hdd_disk'
    SETTINGS
    index_granularity = 8192,
    storage_policy = 'hdd_policy'
  • https://t.me/clickhouse_ru
    @vadvmkn #146046 04:16 PM, 05 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    None
  • @s_panfilova #146050 05:58 PM, 05 Mar 2020
    Max query size кто-нибудь знает дефолт?
  • https://t.me/clickhouse_ru
    Да. Версия кх?
  • https://t.me/clickhouse_ru
    256кб
  • 19.7.3
  • https://t.me/clickhouse_ru
    detach table MVName;
    rename table `.inner.MVName` to `.inner.MVNameNEW`;
    правим на диске и переименовываем /var/lib/clickhouse/metadata/database/MVName.sql
    attach table MVNameNEW
  • блин, точняк!
    спасибо
    буду завтра пробовать
  • https://t.me/clickhouse_ru
    @xicmiah #146056 06:12 PM, 05 Mar 2020
    Поясните пожалуйста, что происходит с кастами и округлением в этом запросе:
    select 0.00745 f64,
    toDecimal64(f64, 5) dec,
    round(f64, 4) a,
    round(dec, 4) b

    0.00745 0.00745 0.0074 0.00750
  • https://t.me/clickhouse_ru
    ну 5 знаков в decimal после запятой
    и округление до 4?

    float-ы округляются банковским, децималы нет
  • https://t.me/clickhouse_ru
    @den_crane #146058 06:15 PM, 05 Mar 2020
    DESCRIBE TABLE
    (
    SELECT
    0.00745 AS f64,
    toDecimal64(f64, 5) AS dec,
    round(f64, 4) AS a,
    round(dec, 4) AS b
    )

    ─name─┬─type───────────┬
    f64 │ Float64 │
    dec │ Decimal(18, 5) │
    a │ Float64 │
    b │ Decimal(18, 5) │
    ──────┴────────────────┴

    тип децимал сохраняется после round
  • https://t.me/clickhouse_ru
    @xicmiah #146059 06:23 PM, 05 Mar 2020
    Хм, консистентненько. Школького округления для float-ов нет?
  • можно вроде только комбинацией if + floor/ceil
  • https://t.me/clickhouse_ru
    шохарактерно, в отличие от клиэйта, отмодифаить таблицу с указанным полиси не получается (((
    ALTER TABLE test.v2_sessions_and_goals
    MODIFY
    TTL simple_date + INTERVAL 4 MONTH TO DISK 'hdd_disk'
    SETTINGS
    index_granularity = 8192,
    storage_policy = 'hdd_policy'

    Пишет такую же ошибку
    DB::Exception: No such disk `hdd_disk` for given storage policy. (version 20.1.4.14 (official build))
  • @nnniknn #146062 06:53 PM, 05 Mar 2020
    Привет!
    Подскажите, пжл, м.б. кто-то видел или есть
    Нужен докер
    - с Постгресом (желат. 12, но можно и 11)
    - и собранным clickhouse_fdw
    Спасибо!
  • https://t.me/clickhouse_ru
    специфичная вещь, сомневаюсь что есть подобное, но несложно сделать самому
  • @dj_mixer #146064 07:09 PM, 05 Mar 2020
    не знал, что бывает clickhouse_fdw...
  • @dj_mixer #146065 07:10 PM, 05 Mar 2020
    будем знать )
  • @nnniknn #146066 07:12 PM, 05 Mar 2020
    к сожаелению не собирается clickhouse_fdw ни на реальнм сервере, ни в докере на разных версиях PostgreSQL
    Пробовал
    https://github.com/adjust/clickhouse_fdw
    https://github.com/Percona-Lab/clickhousedb_fdw
    Заранее спасибо, если у кого-нибудь все же есть докер или ссылка на проверенную сборку
    GitHub - adjust/clickhouse_fdw: ClickHouse FDW for PostgreSQL

    ClickHouse FDW for PostgreSQL. Contribute to adjust/clickhouse_fdw development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    а что за ошибка?
  • https://t.me/clickhouse_ru
    там их штуки 3-4 разных
  • и какой из них билдится? )))
  • @nnniknn #146071 07:18 PM, 05 Mar 2020
    и работает? )))
  • https://t.me/clickhouse_ru
    @lnuynxa #146072 07:19 PM, 05 Mar 2020
    я не помню) я помню что один из них пробовал использовать
  • https://t.me/clickhouse_ru
    @lnuynxa #146073 07:19 PM, 05 Mar 2020
    но мне не понравилось
  • https://t.me/clickhouse_ru
    вроде этот даже
  • https://t.me/clickhouse_ru
    libcurl and uuid libraries should be installed in the system.
  • https://t.me/clickhouse_ru
    @lnuynxa #146077 07:23 PM, 05 Mar 2020
    эти зависимости точно установлены?
  • https://t.me/clickhouse_ru
    @Encetera #146078 07:28 PM, 05 Mar 2020
    а как clickhouse с S3 сейчас работает в плане select * from s3('...') и где можно про это почитать? (если что я пытаюсь к s3 minio подключиться)
  • https://t.me/clickhouse_ru
    в твоем случае, это примерный аналог чтения из файла емнип? с помощью file()
  • https://t.me/clickhouse_ru
    @lnuynxa #146080 07:30 PM, 05 Mar 2020
    импортнуть-экспортнуть данные ок
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @Encetera #146082 07:30 PM, 05 Mar 2020
    емнип это?
  • https://t.me/clickhouse_ru
    его еще не допилили
  • https://t.me/clickhouse_ru
    если мне не изменяет память)
  • https://t.me/clickhouse_ru
    это вроде реализация для тейбл фанкшн
  • https://t.me/clickhouse_ru
    да, я перепутал с DiskS3
  • если их не установить, то др. ошибка выдается - поэтому, да, установлены
    удаленная ссылка на докер - это просто докер с Постгрес,
    а хотелось бы Постгрес с clickhouse_fdw )))
  • https://t.me/clickhouse_ru
    @lnuynxa #146089 07:38 PM, 05 Mar 2020
    щас попробывал в WSL бубунте, у меня собирается
  • https://t.me/clickhouse_ru
  • если не трудно, плз, в докер )))
  • https://t.me/clickhouse_ru
    select * from s3('http://host/bucket/test.csv', 'access_key_id', 'secret_access_key', 'CSV', 'column1 UInt32, column2 UInt32, column3 UInt32')
  • https://t.me/clickhouse_ru
    я вроде так и делаю, но DB::Exception: The specified key does not exist. хотя файл точно есть (я его схему через pyspark по тому же пути только что получал)
  • https://t.me/clickhouse_ru
    фаайл?
  • https://t.me/clickhouse_ru
    попробуй через админку минио запросы смотреть
  • https://t.me/clickhouse_ru
    кажеться вот тут собака зарыта
  • https://t.me/clickhouse_ru
    @Encetera #146097 07:55 PM, 05 Mar 2020
    ибо я то привык что датасет по папке
  • https://t.me/clickhouse_ru
    но нет
  • https://t.me/clickhouse_ru
    там так можно?
  • https://t.me/clickhouse_ru
    @den_crane #146100 07:57 PM, 05 Mar 2020
    я ничего не понял, но glob-ы пытались запилить в КХ (в s3)
  • https://t.me/clickhouse_ru
    ./mc admin trace -v -a minio | grep -n20 "{имя юзера кто обращается к minio, или бакет или еще что засвечивается в запросах}"
    наше все)
  • https://t.me/clickhouse_ru
    @lnuynxa #146102 07:59 PM, 05 Mar 2020
    и сравнивай с запросами pyspark, если они у тебя работают
  • https://t.me/clickhouse_ru
    для минио возможно еще нужно регион указывать
  • https://t.me/clickhouse_ru
    я изначально указывал не на конкрентый файл, а на папку с DataSet(много файлов)
  • https://t.me/clickhouse_ru
    @den_crane #146105 08:01 PM, 05 Mar 2020
    >DB::Exception: The specified key does not exist.
    это ошибка minio, access_key_id неверный?
  • https://t.me/clickhouse_ru
    с s3() нужно указывать конкретный файл, это аналог file и url engine
  • https://t.me/clickhouse_ru
    а так?

    s3('http://host/bucket/*.csv
  • https://t.me/clickhouse_ru
    @den_crane #146108 08:03 PM, 05 Mar 2020
    * -- glob-ы пытались сделать
  • https://t.me/clickhouse_ru
    @den_crane #146109 08:04 PM, 05 Mar 2020
    Added globs/wildcards for s3 by excitoon · Pull Request #8851 · ClickHouse/ClickHouse

    I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the cha...

  • https://t.me/clickhouse_ru
    @lnuynxa #146110 08:04 PM, 05 Mar 2020
    а, тогда ок
  • https://t.me/clickhouse_ru
    круто
  • https://t.me/clickhouse_ru
    точно верный, сейчас проверил
  • https://t.me/clickhouse_ru
    я уже погуглил, да это про объект запрашиваемый
  • https://t.me/clickhouse_ru
    я был почти на 99% уверен что про это но решил перепроверить
  • https://t.me/clickhouse_ru
    @den_crane #146115 08:06 PM, 05 Mar 2020
    я думаю в проследнем стейбле, который вышел вчера работает

    select * from s3('http://host/bucket/*', 'access_key_id', 'secret_access_key', 'CSV', 'column1 UInt32, column2 UInt32, column3 UInt32')
  • @githubreleases_bot #146118 b o t 08:50 PM, 05 Mar 2020
    yandex/ClickHouse tagged: v20.1.6.30-stable
    Link: https://github.com/ClickHouse/ClickHouse/releases/tag/v20.1.6.30-stable
    Release notes:
    v20.1.6.30-stable
  • https://t.me/clickhouse_ru
    @paveltyavin #146119 09:02 PM, 05 Mar 2020
    Здравствуйте. Есть планы по превращению lowcardinality из типа в какую-то более неявную абстракцию ?
  • https://t.me/clickhouse_ru
    @paveltyavin #146120 09:02 PM, 05 Mar 2020
    чтобы пользователь не задумывался о хранении, а CH за него делал это эффективно
  • https://t.me/clickhouse_ru
    @lnuynxa #146121 09:03 PM, 05 Mar 2020
    Вообще собирались подобное делать, да
  • https://t.me/clickhouse_ru
    @paveltyavin #146122 09:03 PM, 05 Mar 2020
    А в roadmap это где-то есть?
  • https://t.me/clickhouse_ru
    всеравно нужно кодеки/шифрование порядок сортировки продумывать
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    так а не везде оно подходит.

    Я вот сделаю country_code String и буду там RU / US хранить и автоматический LowCardinality уронит перфоманс в два раза
  • https://t.me/clickhouse_ru
    @den_crane #146127 09:21 PM, 05 Mar 2020
    для остальных типов вообще всегда плохо
  • https://t.me/clickhouse_ru
    Вот пусть CH и разберется, где нужно, а где не нужно
  • https://t.me/clickhouse_ru
    это где то на уровне идеального планировщика запросов)
  • https://t.me/clickhouse_ru
    @paveltyavin #146130 09:22 PM, 05 Mar 2020
    Я думаю чуть проще. Тут эвристику можно придумать
  • https://t.me/clickhouse_ru
    @den_crane #146131 09:23 PM, 05 Mar 2020
    ну это надо вообще все переделывать
  • https://t.me/clickhouse_ru
    прям так плохо будет?
  • https://t.me/clickhouse_ru
    @paveltyavin #146133 09:23 PM, 05 Mar 2020
    Денис написал про определенный кейс, когда ему кажется, что перфоманс просядет. Можно взять просто оптимизацию места для хранения как задачу для lowcardinality
  • https://t.me/clickhouse_ru
    @den_crane #146134 09:23 PM, 05 Mar 2020
    прямо в парте определять там LC или нет, но это не сработает, потому что в памяти оно должно быть все LC
  • https://t.me/clickhouse_ru
    Да. Я про место на диске
  • https://t.me/clickhouse_ru
    оптимальность по месту строго говоря не равно оптимальность по производительности
  • https://t.me/clickhouse_ru
    @den_crane #146137 09:24 PM, 05 Mar 2020
    короче без данных, при create table угадать незльзя
  • https://t.me/clickhouse_ru
    @lnuynxa #146138 09:24 PM, 05 Mar 2020
    кто то скажет, пусть занимает сколько хочет но быстро
  • https://t.me/clickhouse_ru
    @den_crane #146139 09:24 PM, 05 Mar 2020
    когда данные есть, уже поздно
  • https://t.me/clickhouse_ru
    Строго говоря да. Поэтому и существует lowcardinality и существует Enum
  • https://t.me/clickhouse_ru
    @paveltyavin #146141 09:24 PM, 05 Mar 2020
    Хочешь производительность - пиши enum
  • https://t.me/clickhouse_ru
    ну вообще собирались вводить фишку, что для разных партов могут быть разные настройки сжатия
  • https://t.me/clickhouse_ru
    @den_crane #146143 09:26 PM, 05 Mar 2020
    LC не для экономии места на диске, и это не codec, поэтому не ждите
  • https://t.me/clickhouse_ru
    это-то не сложно
  • https://t.me/clickhouse_ru
    @den_crane #146145 09:26 PM, 05 Mar 2020
    codec и сейчас поменять можно
  • https://t.me/clickhouse_ru
    @den_crane #146146 09:27 PM, 05 Mar 2020
    LC совсем другое
  • https://t.me/clickhouse_ru
    @lnuynxa #146147 09:27 PM, 05 Mar 2020
    ну кстати, разве
    2.4. Перевод LowCardinality из DataType в Column. Добавление ColumnSparse.¶
    как раз не про то что бы сделать LC ближе к кодекам?
  • https://t.me/clickhouse_ru
    @paveltyavin #146148 09:27 PM, 05 Mar 2020
    да ладно, по-моему это можно кодеком назвать
  • https://t.me/clickhouse_ru
    @den_crane #146149 09:28 PM, 05 Mar 2020
    тогда нельзя сделать оптимизацию select group by LC
  • https://t.me/clickhouse_ru
    назвать != как это реализовано, пока это реализовано в другом месте
  • https://t.me/clickhouse_ru
    она сейчас есть?
  • https://t.me/clickhouse_ru
    можешь развернуть мысль? Почему нельзя такую оптимизацию сделать?
  • https://t.me/clickhouse_ru
    да, и в общем в памяти LC хранится в LC
  • https://t.me/clickhouse_ru
    @den_crane #146154 09:29 PM, 05 Mar 2020
    а кодеки разжимаются в памяти
  • https://t.me/clickhouse_ru
    кмк, они бы не стали добавлять такую вещь в роадмап если бы это означало что они потеряют часть функционала
  • https://t.me/clickhouse_ru
    @den_crane #146156 09:30 PM, 05 Mar 2020
    ну я сомневаюсь что LC станет автоматическим в этом году
  • https://t.me/clickhouse_ru
    @den_crane #146157 09:31 PM, 05 Mar 2020
    да и вообще все это чушь. Где Window functions ?
  • https://t.me/clickhouse_ru
    @paveltyavin #146158 09:31 PM, 05 Mar 2020
    ненужно.
  • https://t.me/clickhouse_ru
    @paveltyavin #146159 09:32 PM, 05 Mar 2020
    дальше хотелось бы, чтобы вставлять в lc можно было бы не строки, а эти самые числа из таблицы lc.
  • https://t.me/clickhouse_ru
    @den_crane #146160 09:32 PM, 05 Mar 2020
    половина вопросов и проблем про window functions
  • https://t.me/clickhouse_ru
    @lnuynxa #146161 09:32 PM, 05 Mar 2020
    кстати мне было интересно, допустим у нас есть таблица с колонкой x c типом enum, можно ли в дистрибьютет тейбл написать тип для колонки x допустим тип string, и какие будут последствия,(больше данных по сети? больше памяти для запросов?)
  • https://t.me/clickhouse_ru
    а еще, задавать таблицу lc при create_table, как с енумами
  • https://t.me/clickhouse_ru
    работать не будет и все, скажет тип не тот у колонки
  • https://t.me/clickhouse_ru
    чуда не случится понятно,
    для дистрибьютет таблиц указание кодеков же не несет никакого смысла?
  • https://t.me/clickhouse_ru
    не несет, более того если сделать в таблице String а в дистрибьютид LC(String) будет кх крашится (крашился)
  • https://t.me/clickhouse_ru
    @lnuynxa #146166 09:41 PM, 05 Mar 2020
    видел кстати товарища, который делал CREATE TABLE * ORDER BY (toLowCardinality(column)) говорил, что у него как быстрее запросы (он в них правда тоже писал WHERE toLowCardinality(column) )
  • https://t.me/clickhouse_ru
    если дистрибьютед таблицы не позволяют? никаких изменений по сравнению с базовыми. то вообще было бы круто что бы ненужно было указывать все столбцы и прописывать все enum
  • https://t.me/clickhouse_ru
    @lnuynxa #146168 09:42 PM, 05 Mar 2020
    и емнип все эти особенности всплывают при запросах, а не создании. что тоже не очень удобно
  • https://t.me/clickhouse_ru
    но большинство более сложных вроде успешно решаются через массивы, а менее сложные через уже готовые функции
  • https://t.me/clickhouse_ru
    @fjewo #146170 10:07 PM, 05 Mar 2020
    подскажите, почему в данном случае у prewhere количество записей меньше получается?
    :) select count(1) from distributed_transactions FINAL PREWHERE (record_datetime >= '2020-03-04 00:00:00') AND (record_datetime <= '2020-03-04 23:59:59')

    SELECT count(1)
    FROM distributed_transactions
    FINAL
    PREWHERE (record_datetime >= '2020-03-04 00:00:00') AND (record_datetime <= '2020-03-04 23:59:59')

    ┌─count(1)─┐
    │ 15010398 │
    └──────────┘

    1 rows in set. Elapsed: 3.632 sec. Processed 16.69 million rows, 550.82 MB (4.60 million rows/s., 151.67 MB/s.)

    :) select count(1) from distributed_transactions WHERE (record_datetime >= '2020-03-04 00:00:00') AND (record_datetime <= '2020-03-04 23:59:59')

    SELECT count(1)
    FROM distributed_transactions
    WHERE (record_datetime >= '2020-03-04 00:00:00') AND (record_datetime <= '2020-03-04 23:59:59')

    ┌─count(1)─┐
    │ 16691571 │
    └──────────┘

    1 rows in set. Elapsed: 0.038 sec. Processed 16.69 million rows, 66.77 MB (438.20 million rows/s., 1.75 GB/s.)
  • https://t.me/clickhouse_ru
    Потому что у WHERE не используется FINAL?
  • https://t.me/clickhouse_ru
    @fjewo #146173 10:38 PM, 05 Mar 2020
    да, точно, осталось понять, что он в данном случае делает
  • https://t.me/clickhouse_ru
    @nyoroon #146174 10:40 PM, 05 Mar 2020
    When FINAL is specified, ClickHouse fully merges the data before returning the result and thus performs all data transformations that happen during merges for the given table engine.
  • 06 March 2020 (218 messages)
  • https://t.me/clickhouse_ru
    @fjewo ↶ Reply to #146174 #146175 12:09 AM, 06 Mar 2020
    да это я читал, интересно, что он там мержит
  • https://t.me/clickhouse_ru
    @nyoroon #146176 12:09 AM, 06 Mar 2020
    Покажи create table
  • https://t.me/clickhouse_ru
    строки в replacing, summing,aggregating mergetable
  • https://t.me/clickhouse_ru
    @unamedrus #146178 12:10 AM, 06 Mar 2020
    допустим в первом случае дубликаты
  • https://t.me/clickhouse_ru
    @Radaram101 #146180 03:11 AM, 06 Mar 2020
    Скажите, как работает кафка с CH, можно ли использовать эту связку с ENGINE = Kafka на проде?
  • https://t.me/clickhouse_ru
    Почему бы не использовать стандартный формат Graphite(5 колонок) и, скажем
    https://github.com/lomik/carbon-clickhouse
    https://github.com/lomik/graphite-clickhouse
    мы так сохраняем почти 1М метрик в секунду
    GitHub - lomik/carbon-clickhouse: Graphite metrics receiver with ClickHouse as storage

    Graphite metrics receiver with ClickHouse as storage - GitHub - lomik/carbon-clickhouse: Graphite metrics receiver with ClickHouse as storage

  • https://t.me/clickhouse_ru
    @dan1ru #146182 05:17 AM, 06 Mar 2020
    Всем привет!

    Подскажите, пожалуйста, как можно из одной таблицы с интервалами найти наличие пересечение с интервалами в другой?
    Пример. Для id из первой таблицы определить наличие пересечения start и end таблиц 1 и 2.

    Table 1:
    ┌──────────────id─┬──────start─┬────────end─┐
    │ 171849015679912 │ 1583236777 │ 1583237443 │
    │ 1740802532668 │ 1583236857 │ 1583237475 │
    │ 51408793288363 │ 1583237001 │ 1583237319 │
    └─────────────────┴────────────┴────────────┘

    Table 2:
    ┌──────start─┬────────end─┐
    │ 1583236777 │ 1583237443 │
    │ 1583236857 │ 1583237475 │
    │ 1583237001 │ 1583237319 │
    └────────────┴────────────┘
    Сейчас я пытаюсь делать несколько ASOF JOIN для определения границ, а далее проверяю эти границы на пересечение. Такой подход съедает всю оперативку.
    Пытался делать группировку и объединение по дате и через функцию arrayExists искать первое пересечение, но тот же результат.
    Нашел недокументированную функцию maxIntersections(leftColumn, rightColumn), она решает похожую задачу, но не могу понять, как её применить к текущей задачи и стоит ли её использовать, если её нет в документации.

    Как вы подходите к задаче поиска пересечений в time series таблицах?
  • https://t.me/clickhouse_ru
    @forward32 #146184 07:06 AM, 06 Mar 2020
    Привет!

    А что значит вот такая ошибка:
    Query 'd1dcbe90-b99c-40a6-a861-06dad3016975' is killed in pending state

    Как понять, что стало причиной перевода query в pending state?
  • https://t.me/clickhouse_ru
    Есть планы на cross join без сжирания памяти (стримить результат мелкими блоками). Можно будет на нем :)
  • https://t.me/clickhouse_ru
    @dan1ru ↶ Reply to #146185 #146186 07:15 AM, 06 Mar 2020
    Хорошо, буду ждать) Но пока что-то все равно надо придумать)
  • @SWx5YQ #146187 07:26 AM, 06 Mar 2020
    Может быть кто-то сталктвался с подобным? (Apache SuperSet + sqlalchemy-clickhouse)
  • https://t.me/clickhouse_ru
    @patsevanton #146188 07:37 AM, 06 Mar 2020
    https://habr.com/ru/post/491308/

    возможно будет интересно
    поставьте кто может плюс
    ClickHouse – визуально быстрый и наглядный анализ данных в Tabix. Игорь Стрыхарь

    Предлагаю ознакомиться с расшифровкой доклада 2017 года Игорь Стрыхарь «ClickHouse – визуально быстрый и наглядный анализ данных в Tabix». Веб-интерфейс для ClickHouse в проекте Tabix. Основные...

  • https://t.me/clickhouse_ru
    @Bartimeus33nt10 #146189 07:58 AM, 06 Mar 2020
    Всем привет!
    Правильно ли я понимаю что
    optimize table name deduplicate только свернет дубли по всем колонкам, не только по ПК?
  • https://t.me/clickhouse_ru
    @Bartimeus33nt10 #146190 07:59 AM, 06 Mar 2020
    Речь про merge tree
  • https://t.me/clickhouse_ru
    @Bartimeus33nt10 #146191 07:59 AM, 06 Mar 2020
    Точнее collapsing merge tree
  • https://t.me/clickhouse_ru
    @Bartimeus33nt10 #146192 08:02 AM, 06 Mar 2020
    Вот непонятно будет ли оно схлопывать записи с 1 и - 1
  • @1046304250 #146193 08:31 AM, 06 Mar 2020
    Joined.
  • Этому докладу вроде как уже пара лет, нет?
  • https://t.me/clickhouse_ru
    да, там в начале это и написано
  • https://t.me/clickhouse_ru
    @skylites #146196 08:39 AM, 06 Mar 2020
    Joined.
  • Можно например в одну таблицу всё слить (Union)
  • Ну насколько мне известно - оно есть в планах, так что ждать можно (правда пока совсем не понятно когда, ибо приоритеты и т.п.)
  • Поясни. Если хранить это как строки - будет 2 байта строки, плюс один байт с размером строки (хранится отдельно).
    Итого для миллиона строк будет записаны две колонки - одна с данными строе (2 миллиона байт) и одна с длинами строк (1 млн байт).
    В случае LC - это будет 1 млн байт данных (зажмет в UInt8) плюс типа 10 байт словаря. Почему это может быть хуже?
  • @qhang #146200 08:55 AM, 06 Mar 2020
    А почему uint8? В lc может быть больше 256 значений
  • @ligich #146201 08:58 AM, 06 Mar 2020
    Joined.
  • @Xackm #146202 09:05 AM, 06 Mar 2020
    Joined.
  • @408298841 #146203 09:05 AM, 06 Mar 2020
    Рябята, подскажите плиз как решить следующую проблему.
    Суть - в таблице содержаться идентификаторы пользователя и его действия.
    Мне нужно выбрать для отчетов только самые последние данные по юзеру.
    Собираюсь использовать ReplacingMergeTree, но этот движок подходит только для уменьшения места на дисках и не гарантирует отсутствие дубликатов.
    Нужно в запросе делать выборку только последних данных по юзеру, но при попытке сделать следующий запрос получаю ошибку
    "SELECT
    UserID as Usr,
    SUM(PageViews) as Views,
    SUM(Duration) as Duration
    FROM hist_test.UAct AS tst
    WHERE LastUpdate = (SELECT MAX(LastUpdate) FROM hist_test.UAct WHERE UserID = tst.UserID)
    GROUP BY Usr"

    "Received exception from server (version 20.1.4):
    Code: 47. DB::Exception: Received from localhost:9000. DB::Exception: Missing columns: 'tst.UserID' while processing query: 'SELECT MAX(LastUpdate) FROM hist_test.UAct WHERE UserID = tst.UserID', required columns: 'UserID' 'tst.UserID' 'LastUpdate', source columns: 'LastUpdate' 'Duration' 'PageViews' 'UserID'."

    Такое ощущение, что из секции WHERE не видны алиасы внешние

    Тестовая таблица:
    "CREATE TABLE hist_test.UAct (
    UserID UInt64,
    PageViews UInt8,
    Duration UInt8,
    LastUpdate DateTime )
    ENGINE = MergeTree()
    ORDER BY UserID;"

    Также вопрос в эффективности использования подзапроса в секции WHERE на больших таблицах (около миллиарда записей), возможно можно более эффективно сделать?
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #146203 #146205 09:08 AM, 06 Mar 2020
    select userId, argMax(PageViews, LastUpdate) as lastPageViews from hist_test.UAct
  • о Спасибо Большое!
  • @itsevgeny #146207 09:24 AM, 06 Mar 2020
    Всем привет! Есть здесь эксперты по Materialized View? Я вижу что данные во вьюшке обновляются, но по прошествии некоторого времени значения начинают отставать от аналогичного SELECT запроса (на порядок). Вьюшка трекает таблицу с CollapsingMergeTree engine.

    CREATE MATERIALIZED VIEW daily_mv
    ENGINE = SummingMergeTree()
    PARTITION BY toYYYYMM(created_at_date)
    ORDER BY (created_at_date, customer_id)
    POPULATE
    AS
    SELECT
    created_at_date,
    customer_id,
    sum(sign) AS total_messages
    FROM messages
    GROUP BY created_at_date, customer_id
    ORDER BY created_at_date, customer_id;
  • @ravalia #146210 10:04 AM, 06 Mar 2020
    Joined.
  • @orlan_sar #146211 10:08 AM, 06 Mar 2020
    Привет всем! Помогите ,плиз! Есть набор символов, среди них есть эмоджи. Как эти эмоджи достать и положить в отдельную колонку?
  • https://t.me/clickhouse_ru
    @XClickHere #146212 10:10 AM, 06 Mar 2020
    Приветствую, вопрос по clickhouse-client и импорту CSV файлов в таблицы с движками *MergeTree.
    Можно ли каким нибудь образом исключить колонку version из импорта? В CSV нет колонки version.
  • https://t.me/clickhouse_ru
    @vadvmkn #146213 10:13 AM, 06 Mar 2020
    привет, есть продукт: https://github.com/housepower/clickhouse_sinker
    хочется получить из него timestamp который есть в kafka record, как это сделать?
    GitHub - housepower/clickhouse_sinker: Easily load data from kafka to ClickHouse

    Easily load data from kafka to ClickHouse. Contribute to housepower/clickhouse_sinker development by creating an account on GitHub.

  • если есть default, должно работать с включенным параметром
    https://clickhouse.tech/docs/en/operations/settings/settings/#settings-input_format_with_names_use_header
  • @dj_mixer #146215 10:37 AM, 06 Mar 2020
    cat ./input.csv | clickhouse-client --query "insert into default.test_import format CSVWithNames" --input_format_with_names_use_header 1
  • Можно попробовать начать с этого SELECT replaceRegexpAll('@#$🐷#%dfg#$ 6456🚽 %^ABC& %^&💩 ', '[^\\p{So}]', '')
  • Круто, спасибо )
  • @612200930 #146218 11:06 AM, 06 Mar 2020
    Здравствуйте!

    1) В селекте такое выражение:

    WITH
    mccmnc_home = 12345
    SELECT
    IF( toUInt32OrNull( LEFT( replaceOne( CELL, '-', '' ), 5 ) ) = mccmnc_home, 1, 0 ) AS is_mccmnc_home,
    GROUP BY is_mccmnc_home

    при этом группировка работает странно

    is_mccmnc_home|
    --------------|
    1|
    1|
    а если сделать
    GROUP BY CELL
    , то как надо одна строчка
    is_mccmnc_home|
    --------------|
    1|
    что не так?

    2) И еще попутно вопрос что дешевле сравнивать строковые значения или приведенные строковые к целым, или всё равно?

    Зарание спасибо
  • https://t.me/clickhouse_ru
    У вас в итоге родилось какое-то решение? Могли бы примером заделиться?
    Спасибо.
  • @orlan_sar #146220 11:22 AM, 06 Mar 2020
    Как массив превратить в строку? Например: массив [`qwerty`,`xyz`,`1234`] превращаем в строку qwertyxyz1234
  • https://t.me/clickhouse_ru
    select arrayStringConcat(['qwerty', 'xyz', '1234'])
  • спасибо
  • https://t.me/clickhouse_ru
    @855437500 #146223 12:32 PM, 06 Mar 2020
    Здравствуйте. Кто сталкивался с такой проблемой и как ее починить
    Alter is not finished because timeout when waiting for some replicas: <ip_address> (replication_alter_columns_timeout = 60). Alter will be done asynchronously.
  • https://t.me/clickhouse_ru
    @makrylov #146224 12:37 PM, 06 Mar 2020
    Привет, как сделать календарь в кликхаус?
  • https://t.me/clickhouse_ru
    ? через словарь?
  • https://t.me/clickhouse_ru
    @iolebedev #146226 12:46 PM, 06 Mar 2020
    Коллеги, нужен совет.

    Есть таблица payment. Необходимо выбрать payment_id, которые являются строго вторыми по каждому user_id.

    Как?

    - Кореллированный подзапрос с лимитом - нельзя
    - Оконных функций нет

    Что делать?

    На ум пока приходит только изотерическое решение, вида:
    - отобрать все payment_id, являющиеся первыми через group by и argmin
    - наложить их как фильтр not in и ещё раз отобрать payment_id, являющиеся первыми через group by и argmin
    - тогда отберутся первые за вычетом первых из первой волны (простите за тавтологию)

    Но это как-то совсем уж... А если надо отобрать не 2-е, а строго 3-е?
  • https://t.me/clickhouse_ru
    Select user_id , groupArray(payment_id)[2]
    From (select user_id, payment_id from payment order by ...)
    group by user_id
  • https://t.me/clickhouse_ru
    хм а если сделать в 1 запросе GROUP BY user_id ORDER BY user_id, ts то порядок в groupArray не детерменирован?
  • https://t.me/clickhouse_ru
    @dikovalex #146229 12:57 PM, 06 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    нет

    но можно отсортировать arraySort я просто не понял по какому полю надо вторым
  • https://t.me/clickhouse_ru
    а вот и спонсор вопроса :)
  • https://t.me/clickhouse_ru
    По времени принятия payment)
  • https://t.me/clickhouse_ru
    @iolebedev #146233 12:59 PM, 06 Mar 2020
    SELECT PM.Account, argMin(PM.PaymentID,PM.DatePayment) as PaymentID
    FROM payment PM
    WHERE PM.PaymentID NOT IN (
    -- Тут мы выбираем первые платежи, тогда в головном запросе первые отобраться уже не смогут и будут вторые
    SELECT argMin(PaymentID, DatePayment) as PaymentID
    FROM payment
    WHERE 1=1
    GROUP BY Account
    )
    GROUP BY PM.Account;
  • https://t.me/clickhouse_ru
    ну такой вариант это прям на любителя)
  • https://t.me/clickhouse_ru
    @dikovalex #146235 01:00 PM, 06 Mar 2020
    Да, если мы захотим посмотреть тех, кто сделал 100 депозитов за 100 дней то умрем)
  • https://t.me/clickhouse_ru
    зачем все это, groupArray[2] проще и быстрее
  • https://t.me/clickhouse_ru
    @dikovalex #146237 01:01 PM, 06 Mar 2020
    Хотя не, не умрем)
  • https://t.me/clickhouse_ru
    Сейчас гляну что это такое, спасибо
  • https://t.me/clickhouse_ru
    @SergeyLossev #146239 01:01 PM, 06 Mar 2020
    Я опять со своими полисями =)

    Удалось засунуть в кастомную политику два диска. Но как добавить второй диск в дефолтную политику?

    <yandex>
    <storage_configuration>
    <disks>
    <default>
    <keep_free_space_bytes>1073741824</keep_free_space_bytes>
    </default>
    <hdd_disk>
    <path>/data/clickhouse/</path>
    <keep_free_space_bytes>1073741824</keep_free_space_bytes>
    </hdd_disk>
    </disks>


    <policies>
    <hdd_policy>
    <volumes>
    <hdd_volume>
    <disk>default</disk>
    <disk>hdd_disk</disk>
    </hdd_volume>
    </volumes>
    </hdd_policy>
    </policies>

    </storage_configuration>
    </yandex>

    Так работает
  • https://t.me/clickhouse_ru
    чисто в теории будет какая то польза от groupArray(2)(payment_id)[2]?
  • https://t.me/clickhouse_ru
    @SergeyLossev #146241 01:02 PM, 06 Mar 2020
    А так не работает (((

    <yandex>
    <storage_configuration>

    <disks>
    <default>
    <!-- 1Gb Free for vsyakij pozharnyj and pod jupyter -->
    <keep_free_space_bytes>1073741824</keep_free_space_bytes>
    </default>
    <hdd_disk>
    <path>/data/clickhouse/</path>
    <keep_free_space_bytes>1073741824</keep_free_space_bytes>
    </hdd_disk>
    </disks>

    <policies>
    <default>
    <volumes>
    <default>
    <disk>default</disk>
    <disk>hdd_disk</disk>
    </default>
    </volumes>
    </default>
    </policies>

    </storage_configuration>
    </yandex>
  • https://t.me/clickhouse_ru
    Кстати да, будет. Я забыл про это
  • https://t.me/clickhouse_ru
    а какая ошибка?
  • https://t.me/clickhouse_ru
    А никакая - просто не запускается сервис
  • https://t.me/clickhouse_ru
    @lnuynxa #146245 01:04 PM, 06 Mar 2020
    в логах должно написат
  • https://t.me/clickhouse_ru
    я не знал про этот способ, почитаю, спасибо!
  • https://t.me/clickhouse_ru
    @lnuynxa #146247 01:04 PM, 06 Mar 2020
    что за ошибка
  • https://t.me/clickhouse_ru
    @lnuynxa #146248 01:04 PM, 06 Mar 2020
    при запсуске
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @lnuynxa #146250 01:06 PM, 06 Mar 2020
    попробуй для дефолтной полиси указать два разных тома
  • https://t.me/clickhouse_ru
    @SergeyLossev #146251 01:06 PM, 06 Mar 2020
    Пробовал
  • https://t.me/clickhouse_ru
    @lnuynxa #146252 01:06 PM, 06 Mar 2020
    один с дефолтным диском, другой с дополнительным
  • https://t.me/clickhouse_ru
    @SergeyLossev #146253 01:07 PM, 06 Mar 2020
    И два диска в одном томе, и два тома с диском в каждом
  • https://t.me/clickhouse_ru
    @lnuynxa #146254 01:11 PM, 06 Mar 2020
    возможно дефолтную политику нельзя изменить?
  • https://t.me/clickhouse_ru
    @lnuynxa #146255 01:11 PM, 06 Mar 2020
    но я с политиками не занимался пркт
  • https://t.me/clickhouse_ru
    чудесно работает
  • https://t.me/clickhouse_ru
    @iolebedev #146257 01:12 PM, 06 Mar 2020
  • https://t.me/clickhouse_ru
    Похоже, ругается на то, что не может работать с таблицей, созданной при предыдущей конфигурации...
  • https://t.me/clickhouse_ru
    так создай еще полиси hdd_policy c старыми настройками
  • неужели никто не сталкивался с этим? 🤔
    получается вьюшка не правильно считает sum(sign) из таблицы с CollapsingMergeTree
  • https://t.me/clickhouse_ru
    Ну да, похоже, так и надо
  • https://t.me/clickhouse_ru
    вьюха это триггер на инсерт, скорее всего sum в таком виде групбай и ордербай может не иметь смысла
    хотя для изначальной вставки смысл будет, да
  • https://t.me/clickhouse_ru
    @lnuynxa #146263 01:19 PM, 06 Mar 2020
    Не рекомендуется использовать POPULATE, так как вставляемые в таблицу данные во время создания представления, не попадут в него.

    вообще POPULATE оно такое себе
  • да спасибо, я в курсе про POPULATE
    я тестировал 2 типа вьюшек: populate и to table …. Конечный результат одинаковый, счетчики на порядок меньше
  • https://t.me/clickhouse_ru
    а какой запрос к основной таблице с которой сравниваешь?
  • @itsevgeny #146266 01:30 PM, 06 Mar 2020
    да в общем почти такой же как и вью (только с HAVING total_messages >= 0) 😛
    SELECT
    created_at_date,
    customer_id,
    sum(sign) AS total_messages
    FROM messages
    GROUP BY created_at_date, customer_id
    HAVING total_messages >= 0
    ORDER BY total_messages desc
  • @dserdiuk #146267 01:31 PM, 06 Mar 2020
    Joined.
  • @dserdiuk #146268 01:32 PM, 06 Mar 2020
    Всем привет. Есть задача отсечь аномальные значения времени в выборке, что-то вроде https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D0%B1%D1%80%D0%BE%D1%81_(%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0)
    Попробовал использовать quantil, но это не совсем то что нужно. Может кто сталкивался с похожей задачей и может натолкнуть в какую сторону копать?
    Выброс (статистика)

    Выброс (англ. outlier), промах — в статистике результат измерения, выделяющийся из общей выборки.

  • https://t.me/clickhouse_ru
    @orantius #146269 01:33 PM, 06 Mar 2020
    посчитать квантили, потом отфильтровать?
  • @dserdiuk #146270 01:35 PM, 06 Mar 2020
    Так и делал, но квантиль как я понял отсекает значения в процентном соотношении. Т.е. если я выберу SELECT quantiles(0.1, 0.9) то он откинет 10 процентов от минимального, 10 процентов от максимального.
  • @dserdiuk #146271 01:38 PM, 06 Mar 2020
    У меня стоит такая задача. Есть список тикетов, у каждого тикета есть время его закрытия. Агент поддержки в среднем закрывает тикет за 10 минут, но в выборке из 50 объектов могут быть штук 5 у которых будет аномальное время закрытия, например неделю по разным причинам и их нужно как-то отсечь.
  • https://t.me/clickhouse_ru
    @iolebedev #146272 01:42 PM, 06 Mar 2020
    Прошу еще один совет.

    Делаю импорт в кликхаус из внешней БД (постгре) через ODBC.
    На очередной итерации имею массив айдюков источника, которые изменились или добавились (по last_update).
    Не хватает операции типа UPSERT/MERGE, чтобы только лить изменения - приходится сначала удалять старые записи, так как дубли (старые и новые) не допустимы по бизнес логике.

    Как лучше всего сделать эффект UPSERT/MERGE?

    Видел ReplacingMergeTree - но там прямо пишут, что не расчитывайте, оно будет чистить в фоне, существование дублей возможно какое-то время.
    Тоже самое с CollapsingMergeTree - это асинхронно, кроме того, это менее удобно, так как надо писать по две записи (одна из которыз сторнирующая).
  • https://t.me/clickhouse_ru
    @AppKiv ↶ Reply to #146270 #146273 01:43 PM, 06 Mar 2020
    в статье википедии что вы скидывали выше есть пример формулы расчета граничных значений
  • А есть ли возможность произвести эти вычисления в процессе выборки? Или только в конечных результатах средствами ЯП?
  • https://t.me/clickhouse_ru
    сколько записей?
    с ReplacingMergeTree можно жить, но нужно учитывать возможность дублей(либо составлять так что бы дубли не мешали, либо писать FINAL но это дольше будет, возможно сильно дольше)
  • https://t.me/clickhouse_ru
    самая большая таблица - 20 миллионов строк, несколько гигабайт (с перспективой роста в разы)
    инкремент в час - в пике до 50-100 тыс
    дубли не допустимы при чтении из таблицы
  • https://t.me/clickhouse_ru
    ну либо составлять запросы так(argMax(column,ts) в помощь), что бы дубли не мешали, либо FINAL
    для словаря все же многовато выходит
  • https://t.me/clickhouse_ru
    @iolebedev #146278 01:51 PM, 06 Mar 2020
    это не словарь, это основная таблица продакшен OLTP системы...
  • https://t.me/clickhouse_ru
    @iolebedev #146279 01:53 PM, 06 Mar 2020
    ага, то есть FINAL гарантирует что все будет “схлопнуто”, но это может быть сколь угодно долго, так?
  • https://t.me/clickhouse_ru
    @iolebedev #146280 01:55 PM, 06 Mar 2020
    а, даже не так, FINAL не приведет к MERGE таблицы (это будет по расписанию как обычно), он просто на уровне выборки данные смержит
  • https://t.me/clickhouse_ru
    да
  • https://t.me/clickhouse_ru
    @unamedrus #146282 01:59 PM, 06 Mar 2020
    есть еще OPTIMIZE FINAL он все домержит до конца
  • https://t.me/clickhouse_ru
    @iolebedev #146283 02:03 PM, 06 Mar 2020
    ага
  • https://t.me/clickhouse_ru
    @iolebedev #146284 02:03 PM, 06 Mar 2020
    а во время его работы - можно таблицей пользоваться?
  • https://t.me/clickhouse_ru
    @iolebedev #146285 02:03 PM, 06 Mar 2020
    читать и писать
  • https://t.me/clickhouse_ru
    да, но это так, нельзя рассчитывать на постоянное переливание полного объема данныз
  • https://t.me/clickhouse_ru
    @iolebedev #146287 02:06 PM, 06 Mar 2020
    а если я допустим попробую сделать два слоя, как в хранилищах
  • https://t.me/clickhouse_ru
    @iolebedev #146288 02:07 PM, 06 Mar 2020
    на слое RAW - таблицы с ReplacingMergeTree, куда буду лить данные периодически
    на слое ODS - таблицы уже очищенные от дублей
  • https://t.me/clickhouse_ru
    @iolebedev #146289 02:08 PM, 06 Mar 2020
    допустим места навалом и мощности IO и CPU - имеются
  • https://t.me/clickhouse_ru
    @iolebedev #146290 02:08 PM, 06 Mar 2020
    (все ограничения - только на источнике данных)
  • https://t.me/clickhouse_ru
    @iolebedev #146291 02:09 PM, 06 Mar 2020
    как лучше организовать, чтобы одна таблица обновлялась в зависимости от второй таблицы?
  • https://t.me/clickhouse_ru
    @TrueCarry #146292 02:09 PM, 06 Mar 2020
    Может вам проще писать в кликхаус изменения данных, чтобы их не надо было обновлять?
  • https://t.me/clickhouse_ru
    поясните
  • https://t.me/clickhouse_ru
    @TrueCarry #146294 02:11 PM, 06 Mar 2020
    Если например у вас в пг у юзера метрика скачет туда сюда 5-10-5, в кликхаусе пишите +5, +5, -5.
  • https://t.me/clickhouse_ru
    @iolebedev #146295 02:15 PM, 06 Mar 2020
    Идею понял, так не получится. Иточник - OLTP база, отдает данные крайне медленно. Даже просто ее вычитывать для загрузки - уже медленно и нудно.
    Делаем хранилище, на текущем этапе стоит задача просто все выкачать как есть - максимально производительно.
  • https://t.me/clickhouse_ru
    @iolebedev #146296 02:15 PM, 06 Mar 2020
    То есть решаемая задача - получить полную копию данных в локальном кликхаусе и обновлять ее инкрементально.
  • https://t.me/clickhouse_ru
    @TrueCarry #146297 02:17 PM, 06 Mar 2020
    кликхаус + обновлять это уже плохая стратегия
  • https://t.me/clickhouse_ru
    @iolebedev #146298 02:18 PM, 06 Mar 2020
    Ну, кликхаус предназначен для хранилищ данных? Кажется, весьма да.
    Тут не то, чтобы обновлять прям хочется, задача - получать копию данных.
    ETL короче.
  • https://t.me/clickhouse_ru
    @iolebedev #146299 02:19 PM, 06 Mar 2020
    как наиболее кошерно готовить ETL между OLTP (именно транзакционными базами, не БД логов) и кликхаусом?
  • https://t.me/clickhouse_ru
    @iolebedev #146300 02:20 PM, 06 Mar 2020
    Вообще, если что, все работает и загрузка данных уже налажена, просто я думаю как ее оптимизировать.
  • https://t.me/clickhouse_ru
    @iolebedev #146301 02:21 PM, 06 Mar 2020
    Сейчас я делаю выборку по ID из источника - получаю список новых или изменившихся ID
    потом их удаляю из кликхауса
    потом делаю INSERT AS SELECT
  • https://t.me/clickhouse_ru
    @iolebedev #146302 02:22 PM, 06 Mar 2020
    и в этой истории не удобно только то, что приходится делать 2 запроса к источнику на 1 итерацию
    - получить список айдюков для работы (чтобы их удалить из кликхауса)
    - второй раз дернуть источник - уже чтобы загрузить данные в кликхаус по этим айдюкам
  • https://t.me/clickhouse_ru
    @iolebedev #146303 02:22 PM, 06 Mar 2020
    просто в этом есть нечто порочное (чувствую)
  • https://t.me/clickhouse_ru
    @nyoroon #146304 02:24 PM, 06 Mar 2020
    мб попробовать versionedcollapsingmergetree?
  • https://t.me/clickhouse_ru
    @iolebedev #146305 02:27 PM, 06 Mar 2020
    думаю об этом, механика понятна, но кажется там те же издержки что и у ReplacingMergeTree
  • https://t.me/clickhouse_ru
    @nyoroon #146306 02:28 PM, 06 Mar 2020
    мутации гораздо затратнее
  • https://t.me/clickhouse_ru
    Соглашусь, вероятно это так. Встроенная механика merge tree - оптимизирована под это, а ALTER TABLE DELETE - нет.

    Но, чисто практически, как оно есть на сегодня, у меня работает через DELETE и в текущих условиях оно отрабатывает практически мгновенно.
    Я осознаю, что это концептуально не верно и против шерсти, но на практике это очень эффективно.
    Сейчас процесс загрузки одного пакета данных может занимать несколько минут - все это время мы ждем запроса в источнике, а удаление из кликхауса через мутацию - менее секунды. То есть доля времени на не эффективную мутацию в КХ - на уровне погрешности.

    С мутацией я получаю
    - предсказуемый результат сейчас - нет дублей
    - не надо учитывать это в запросах - данные получаются чистые
    - не надо учитывать это в структуре данных (держать дополнительные поля под версию, работать с ними) - это конечно мелочи, я не против

    Переход на replicating или collapsing версии движка merged tree на сегодня смущает
    - неизвестностью
    - отсутствие гарантий целостности (на момент чтения могут по факту быть дубли)
    - … или необходимостью учитывать в запросах физику табличного движка
  • @ayugov #146308 02:49 PM, 06 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @rozumniuk #146309 02:53 PM, 06 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @rozumniuk #146310 02:54 PM, 06 Mar 2020
    Всем привет! Как правильно проверить, что Clickhouse жив, по http? Отправить SELECT 1 и дождаться ответа с 1 норм?
  • https://t.me/clickhouse_ru
    да
  • Ну раз ты сам говоришь, что сейчас проблем нет - и не парься тогда.
    Если найдешь источники побольше, то или с бизнесом договариваться о более грязных данных, или платную базу под etl покупать
  • https://t.me/clickhouse_ru
    @iolebedev #146313 03:09 PM, 06 Mar 2020
    В текущих условиях хочется оптимизировать запросы к источнику.
    Сейчас приходится делать 2 запроса на 1 пакет - потому, что
    - мне надо сначала получить айдюки, которые буду загружать, чтобы их сначала удалить
    - а уже после удаления их загружать

    Ищу способ дергать источник один раз - сразу на INSERT-AS-SELECT BY RANGE.

    Но спасибо за советы, я наверное буду копать в сторону collapsing версии движка и делать над ним вьюху с FINAL.
    Наверное туда надо стремиться.
  • @YaroslavMakarov #146314 03:10 PM, 06 Mar 2020
    Коллеги, можно ли выставить какой-то параметр при запросе, чтобы в случае ошибки не выдавалось текстовое описание?
  • Что за база в oltp?
  • https://t.me/clickhouse_ru
    @prizmo_49 #146316 03:15 PM, 06 Mar 2020
    всем привет. Кто знает почему сервер падает после Alter table ... update .... Это при апдейте нескольких тысяч записей
  • https://t.me/clickhouse_ru
    Postgre
  • В логах что?
  • Ну возьми Кафку, дебезиум и читай изменения из топика без запросов к базе вообще
  • https://t.me/clickhouse_ru
    Code: 412 Can't receive Netlink response
  • https://t.me/clickhouse_ru
    Проблема в том, что БД-источник находится на удаленном хосте, в другом административном юните и там НИЧЕГО нельзя ни установить, ни доработать, ни предприняти.

    Есть только доступ к СУБД Postgre удаленно, с так себе скоростью. Доступно только читать БД.

    Я так понимаю в этих условиях мне кафка мало поможет?
  • Ну прям таки ничего нельзя? Там надо то просто wal replication врубить один, или как он там называется.
    Мне кажется это в интересах самого источника будет, что ты перестаешь их ресурсы своими запросами забивать
  • https://t.me/clickhouse_ru
    @sixdays #146323 03:21 PM, 06 Mar 2020
    привет!
    а подскажите, вот есть у меня файлик sql с INSERT запросами. как бы мне его выполнить через clickhouse-client? иными словами импортнуть
  • https://t.me/clickhouse_ru
    @sixdays #146324 03:22 PM, 06 Mar 2020
    https://clickhouse.tech/docs/en/interfaces/formats/ а то тут все кроме SQL перечислено )
  • https://t.me/clickhouse_ru
    Организации доступа к БД ждали несколько месяцев, добавления поля lastUpdateDateTime - больше месяца. Все очень сложно.
  • https://t.me/clickhouse_ru
    так, почитал про дебизиум. А что мне потребуется от источника, говорите? Просто разрешить репликацию?
  • https://t.me/clickhouse_ru
    @iolebedev #146327 03:23 PM, 06 Mar 2020
    звучит очень перспективно
  • Ага
  • https://t.me/clickhouse_ru
    @iolebedev #146329 03:25 PM, 06 Mar 2020
    вот это тема, спасибо!
  • да, типа такого (если есть другие колонки, то использовать tuple):
    select arrtpl2.1 as grp, grp2, arrtpl2.3 as aggValGrp1, aggValGrp2 from
    (
    select arrtpl.1 as grp2
    , groupArray(tuple(grp, arrtpl.2, aggValGrp1)) as arrtpl2
    , arrayReduce('max', arrtpl2.2) aggValGrp2
    from
    (
    select grp, groupArray(tuple(grp2, val)) arrtpl,
    arrayReduce('avg', arrtpl.2) aggValGrp1
    from (
    select number%13 grp, (number+6) %15 grp2, round(rand64()/1e18,2) val from numbers(100)
    ) group by grp
    ) array join arrtpl
    group by grp2
    ) array join arrtpl2
    order by grp2
    ;
  • https://t.me/clickhouse_ru
    так лейте в новую таблицу и переименовывайте ее, старуй удаляйте
  • https://t.me/clickhouse_ru
    @iolebedev #146332 03:49 PM, 06 Mar 2020
    я за раз тяну только инкремент
  • https://t.me/clickhouse_ru
    @iolebedev #146333 03:49 PM, 06 Mar 2020
    думал о том, чтобы инкремент приземлять в новую (временную таблицу)
    потом по ней анализировать новоприбывших
    удалять их в основной таблице
    и переносить в основную из временной
  • https://t.me/clickhouse_ru
    почему -- в логе КХ написано,
    или в сообщениях ядра sudo dmesg|tail -100 имскать oom
  • https://t.me/clickhouse_ru
    @iolebedev #146335 03:50 PM, 06 Mar 2020
    тогда будет действительно только один запрос к источнику на круг
  • https://t.me/clickhouse_ru
    cat ffff.sql|clickhouse-client -mn
  • https://t.me/clickhouse_ru
    перечислить поля которые есть в csv insert into mytalbe(col1,col2,....)
    или использовать input()
  • https://t.me/clickhouse_ru
    похоже на баг, нужен семпл данных на котором видно багу.

    целые дешевле сравнивать чем строки
  • https://t.me/clickhouse_ru
    сreate table calendar ...
  • https://t.me/clickhouse_ru
    так это нормальное поведение
  • https://t.me/clickhouse_ru
    а insert при этом должен работать?
    а то мне выдало:

    Expected one of: SELECT query, possibly with UNION, SELECT query, subquery, possibly with UNION, SELECT, WITH, SELECT subquery, list of elements, SELECT query
  • https://t.me/clickhouse_ru
    $ cat iii.sql
    insert into XXXX(t) values(1);
    insert into XXXX(t) values(1);
    insert into XXXX(t) values(1);
    insert into XXXX(t) values(1);

    clickhouse-client -mn <iii.sql
  • https://t.me/clickhouse_ru
    Благодарю.
  • https://t.me/clickhouse_ru
    Спасибо, но это немного не то
  • https://t.me/clickhouse_ru
    @alexeychernykh #146345 04:05 PM, 06 Mar 2020
    Привет! Подскажите, как в collapsingMergeTree доагрегировать дубликаты, строки или даты по признаку Sign? С int понятно можно sum(int * Sign) использовать, а как со строками быть
  • https://t.me/clickhouse_ru
    @den_crane #146346 04:05 PM, 06 Mar 2020
    input() -- хорошая штука, можно входящий поток перемесить select-м и вставить результат select-а
    https://clickhouse.tech/docs/ru/query_language/table_functions/input/
  • https://t.me/clickhouse_ru
    что то та же самая ошибка :(
  • https://t.me/clickhouse_ru
    values в той же строке?
  • https://t.me/clickhouse_ru
    @den_crane #146349 04:10 PM, 06 Mar 2020
    что там может вообще не работать? Я это использую 8888 раз в день
  • https://t.me/clickhouse_ru
    @sixdays #146350 04:10 PM, 06 Mar 2020
    там insert into xxx (c,c,...) values ()
    ()
    ()
    ()
  • https://t.me/clickhouse_ru
    @sixdays #146351 04:10 PM, 06 Mar 2020
    вот такой запрос
  • https://t.me/clickhouse_ru
    @sixdays #146352 04:10 PM, 06 Mar 2020
    с мульти вэльюс
  • https://t.me/clickhouse_ru
    @sixdays #146353 04:11 PM, 06 Mar 2020
    -n не нужно похоже в этом случае
  • https://t.me/clickhouse_ru
    @den_crane #146354 04:11 PM, 06 Mar 2020
    clickhouse-client -m <iii.sql
  • https://t.me/clickhouse_ru
    @sixdays #146355 04:13 PM, 06 Mar 2020
    да, так сработало
  • https://t.me/clickhouse_ru
    @sixdays #146356 04:13 PM, 06 Mar 2020
    спасибо
  • https://t.me/clickhouse_ru
    @GO0DV1N #146357 04:15 PM, 06 Mar 2020
    Вечер добрый. Вопрос на выходные самообразованием заняться так сказать, не совсем по ckickhouse, но по базам. Гугл не забанен, но не нашёл с ходу. Вопрос постраничного поиска, сортировок в одинаковых данных, но разных базах, как один из вариантов, в шардах, в микросеовисах с паттерном Base per services. Скиньте если у кого есть мат часть почитать, можно в личку.
  • https://t.me/clickhouse_ru
    /// Query was killed before execution

    он просто ждал чего-то, был блокирован например alter-м
  • https://t.me/clickhouse_ru
    @dikovalex #146359 04:47 PM, 06 Mar 2020
    А есть какие-то обучалки, кроме документации Яндекса?)

    Очень хотелось бы не тупить в каждом запросе, до этого писал на постгрес и МС скл
  • https://t.me/clickhouse_ru
    deduplicate работает только с MergeTree.

    collapsingMergeTree мержит по ключу
  • https://t.me/clickhouse_ru
    У альтини есть несколько неплохих статей про кодеки сжатия, есть видео на ютубе от яндекса, где объясняется структура кликхауса
  • https://t.me/clickhouse_ru
    @unamedrus #146362 04:55 PM, 06 Mar 2020
    New Encodings to Improve ClickHouse Efficiency

    July 10, 2019Modern analytical databases would not exist without efficient data compression. Storage gets cheaper and more performant, but data sizes typically grow even faster. Moore’s Law for big data outperforms its analogy in hardware. In our blog we already wrote about ClickHouse compression (https://altinity.com/blog/2017/11/21/compression-in-clickhouse) and Low Cardinality data type wrapper (https://altinity.com/blog/2019/3/27/low-cardinality). In this article we will describe and test the most advanced ClickHouse encodings, which especially shine for time series data. We are proud that some of those encodings have been contributed to ClickHouse by Altinity.This article presents an early preview of new encoding functionality for ClickHouse release 19.11. As of the time of writing, release 19.11 is not yet available. In order to test new encodings ClickHouse can be built from source, or a testing build can be installed. We expect that ClickHouse release 19.11 should be available in public releases in a…

  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @dikovalex #146364 05:18 PM, 06 Mar 2020
    Спасибо за ресурсы, с ними сталкивался. Они по факту ознокамливающие, а не обучающие
  • @GrouthHacker #146365 05:30 PM, 06 Mar 2020
    Есть сервер с ярдом запросов в сутки. RPS в пике 10к. Логи пишуться в отдельный файл (формат может быть любой). Вопрос, как наиболее эффективно инсертить такой объем в КХ ?
  • https://t.me/clickhouse_ru
    группировать запросы так что бы вставлялись раз в пару секунд, в общем то все
  • https://t.me/clickhouse_ru
    @unamedrus #146367 05:37 PM, 06 Mar 2020
    лярд в сутки не так много
  • спасибо, это понятно. но вопрос в каком формате (csv|json_row?) через http интерфейс, или clickhouse-client ? может ещё какие-то нюансы есть чтобы ускорить инсерт и снизить потребление ресурсов?
  • https://t.me/clickhouse_ru
    @den_crane #146369 05:43 PM, 06 Mar 2020
    csv / tsv в разы быстрее чем jsoneachrow
  • https://t.me/clickhouse_ru
    ну я вставляют по http plain SQL INSERT VALUES
  • https://t.me/clickhouse_ru
    @den_crane #146371 05:45 PM, 06 Mar 2020
    clickhouse-client / http не принципиально ,
    по http поток прилетает в сервер и парсится,
    clickhouse-client отпарсится на клиенте, и в сервер прилетит native, несколько уносит нагрузку на тачку на которой работает clietn
  • https://t.me/clickhouse_ru
    @unamedrus #146372 05:46 PM, 06 Mar 2020
    если вам проще вставлять пофайлово, то csv/ tsv ваш выбор в таком случае
  • @dj_mixer #146373 07:08 PM, 06 Mar 2020
    И все таки Parquet )
  • https://t.me/clickhouse_ru
    :) ну я не знаю, вот есть у меня текстовый файл, AAA.tsv как его превратить в Parquet? мне проще взять бинарь c названием clickhouse и сконвертировать AAA.tsv в AAA.native. Но смысл? Этот же бинарь зашлет AAA.tsv прямо в clickhouse
  • @408298841 #146375 08:16 PM, 06 Mar 2020
    Ребята, вопрос про неактуальные дубли. Планируется перенести аналитику а CH. Всего планируется порядка миллиарда записей о звонках. Все метрики вызова плюс стоимость. Метрики неизменяемые, но стоимость редко но может пересчитаться по некоторым звонкам. Порядка 500 тыс.-1 миллиона записей за один два захода в месяц-два. Подойдёт ли а таком случае ALTER UPDATE? Пересчет можно делать по ночам но к утру информация должна быть уже актуальна. Или может использовать ReplacingMergeTreee и вызывать принудительно Optimize после вставки всей пачки... Какой подход оптимальнее?
  • Да, зависит от исходного формата. Условно при перегонке базы в базу паркет был лучше как промежуточный формат. При стриме конечно не так
  • Редко - это насколько редко?
  • @dj_mixer #146378 08:37 PM, 06 Mar 2020
    Некоторым раз в секунду редко )
  • @408298841 #146379 08:43 PM, 06 Mar 2020
    Не чаще чем пару раз в месяц. Но сразу пачкой каждый пересчет.
  • @408298841 #146380 08:43 PM, 06 Mar 2020
    Пачка в среднем не более миллиона
  • @dj_mixer #146381 08:45 PM, 06 Mar 2020
    Делайте update, просто будет в бэкграунде делаться
  • https://t.me/clickhouse_ru
    я бы использовал ReplacingMergeTreee и вызывать принудительно Optimize после вставки всей пачки

    с update проблема в том что неизвестно что он вообще успешно завершится, и в куче случаев понадобится ручное вмешательство, прямо сейчас открыто с 10к тикетов, то КХ падает, то результат неверный, то куча апдейтов объединились в один суперапдейт и висят две недели и непонятно работают или нет и т.д.
  • https://t.me/clickhouse_ru
    @den_crane #146383 08:50 PM, 06 Mar 2020
    я каждую мутацию буквально пинаю ногами (но у меня 18.14) (и делаю раз в году)
    то права на файлы не те, то размер результирующего парта больше максимального, то еще что-нибьдь
  • @dj_mixer #146384 08:50 PM, 06 Mar 2020
    У нас обновляли одну колонку в партишне на миллиард, в19 (уже не помню минор) потом 20 предпоследняя
  • @dj_mixer #146385 08:51 PM, 06 Mar 2020
    Наверно зависит от числа обновляемых колонок тоже
  • https://t.me/clickhouse_ru
    @den_crane #146386 08:52 PM, 06 Mar 2020
    я и в 400 млрд. таблице обновлял / удалял, но это жесть просто, как по минному полю
  • @408298841 #146387 08:52 PM, 06 Mar 2020
    Ребят, спасибо за ответы
  • @EvgeneyP #146389 08:53 PM, 06 Mar 2020
    Отправил ошибочно
  • https://t.me/clickhouse_ru
    @den_crane #146390 08:58 PM, 06 Mar 2020
    осторожнее надо, я уже потянулся за банилкой
  • @dj_mixer #146391 09:02 PM, 06 Mar 2020
    Так можно же было, недавно постили толпой )
  • https://t.me/clickhouse_ru
    @den_crane #146392 09:02 PM, 06 Mar 2020
    Можно про кликхауз
  • @dj_mixer #146393 09:02 PM, 06 Mar 2020
    А, это не увидел, сорри
  • https://t.me/clickhouse_ru
    @den_crane #146394 11:31 PM, 06 Mar 2020
    написал в доку про force_deduplicate_childrens. Кто-нибудь понимает с кем я разговариваю? Или сильно запутано и надо переписать?

    force_deduplicate_childrens

    По умолчанию проверка дедупликации у материализованных представлений не производится, а наследуюется от Replicated* (основной) таблицы, за которой "следит" материализованное представление.

    Т.е. если INSERT в основную таблицу д.б. пропущен (сдедуплирован), то автоматически не будет вставки и в материализованные представления. Это имплементировано для того, чтобы работали материализованные представления, которые сильно группируют данные основных INSERT, до такой степени что блоки вставляемые в материализованные представления получаются одинаковыми для разных INSERT в основную таблицу.

    Одновременно это "ломает" идемпотентность вставки в материализованные представления. Т.е. если INSERT был успешен в основную таблицу и неуспешен в таблицу материализованного представления (напр. из-за сетевого сбоя при коммуникации с Zookeeper), клиент получит ошибку и попытается повторить INSERT. Но вставки в материализованные представления произведено не будет, потому что дедупликация сработает на основной таблице. Настройка force_deduplicate_childrens позволяет это изменить. Т.е. при повторном INSERT будет произведена дедупликация на таблице материализованного представления, и повторный инсерт вставит данные в таблицу материализованного представления, которые не удалось вставить из-за сбоя первого INSERT.
  • https://t.me/clickhouse_ru
    @unamedrus #146395 11:37 PM, 06 Mar 2020
    не уверен, что т.е. хорошо выглядит в доке.
    впринципе понятно, но наверное можно сделать лучше
  • https://t.me/clickhouse_ru
    @unamedrus #146397 11:57 PM, 06 Mar 2020
    force_deduplicate_childrens

    Изменяет поведение дедупликации для наследуемых от Replicated* материализованных представлений.

    Условия применения:

    * Материализованное представление зависит от Replicated* таблицы
    * Произошла успешная вставка на уровне таблицы и ошибка на уровне мат представления
    * Клиент повторяет вставку которая завершилась ошибкой в основную таблицу

    Возможные значения

    0 — проверка дедубликации производится для основной таблицы.
    1 — проверка дедубликации производится для конкретного материального представления.

    Если force_deduplicate_childrens = 0 при повторном INSERT будет произведена дедупликация на таблице основной таблицы, и автоматически не будет вставки данных в материализованные представления.

    Если force_deduplicate_childrens = 1 при повторном INSERT будет произведена дедупликация на таблице материализованного представления, и произойдет вставка данных в материализованные представления.
  • https://t.me/clickhouse_ru
    @unamedrus #146398 11:58 PM, 06 Mar 2020
    и уже внизу расписать что и почему было сделано
  • https://t.me/clickhouse_ru
    @unamedrus #146399 11:58 PM, 06 Mar 2020
    но это исключительно Имхо
  • 07 March 2020 (74 messages)
  • https://t.me/clickhouse_ru
    @bralbral #146400 05:18 AM, 07 Mar 2020
    Помню кто-то писал, что приведение к LowCardinality , наоборот , что странно , ухудшило перформанс. Не напомните , в каких случаях это будет ? если в колонка может применять только 3 различных значения выигрыш же должен быть ?
  • https://t.me/clickhouse_ru
    @apnmrv #146401 09:42 AM, 07 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @Radaram101 #146402 09:43 AM, 07 Mar 2020
    Я тут создал таблицу с engine = Kafka
    clickhouse и kafka запущены в docker контейнерах

    в логах CH:
    DB::StorageKafka::threadFunc(): std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out0.

    Подскажите как это победить?

    Сами сообщения в типики попадают если через python либу отправлять
    producer = KafkaProducer(bootstrap_servers='localhost:9092', value_serializer=lambda v: json.dumps(v).encode('utf-8'))

    producer.send('topic', value={"timestamp": 10, "level": "test", "message": "msg test"})
  • https://t.me/clickhouse_ru
    @Radaram101 #146403 09:45 AM, 07 Mar 2020
    docker-compose такой
    version: '3'

    networks:
    app-tier:
    driver: bridge

    services:

    clickhouse-server:
    image: yandex/clickhouse-server
    restart: always
    ports:
    - 8123:8123
    - 9000:9000
    ulimits:
    nproc: 65535
    nofile:
    soft: 262144
    hard: 262144
    networks:
    - app-tier

    kafka:
    image: 'bitnami/kafka:latest'
    ports:
    - "9092:9092"
    environment:
    - ALLOW_PLAINTEXT_LISTENER=yes
    - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
    - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
    - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,PLAINTEXT_HOST://:29092
    - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
    depends_on:
    - zookeeper
    networks:
    - app-tier

    zookeeper:
    image: 'bitnami/zookeeper:latest'
    ports:
    - '2181:2181'
    environment:
    - ALLOW_ANONYMOUS_LOGIN=yes
    networks:
    - app-tier
  • https://t.me/clickhouse_ru
    @Radaram101 #146404 09:52 AM, 07 Mar 2020
    плюс в логах
    clickhouse-server_1 | Include not found: networks
    clickhouse-server_1 | %3|1583572792.903|FAIL|ClickHouse 20.1.4.14#consumer-1| [thrd:localhost:9092/bootstrap]: localhost:9092/bootstrap: Connect to ipv4#127.0.0.1:9092 failed: Connection refused (after 0ms in state CONNECT)
    clickhouse-server_1 | %3|1583572792.903|ERROR|ClickHouse 20.1.4.14#consumer-1| [thrd:localhost:9092/bootstrap]: localhost:9092/bootstrap: Connect to ipv4#127.0.0.1:9092 failed: Connection refused (after 0ms in state CONNECT)
    clickhouse-server_1 | %3|1583572792.903|ERROR|ClickHouse 20.1.4.14#consumer-1| [thrd:localhost:9092/bootstrap]: 1/1 brokers are down
    clickhouse-server_1 | Include not found: clickhouse_remote_servers
    clickhouse-server_1 | Include not found: clickhouse_compression
  • https://t.me/clickhouse_ru
    @TrueCarry #146405 09:55 AM, 07 Mar 2020
    У вас же кликхаус к локалхосту подключается, а должен к Kafka:9092
  • https://t.me/clickhouse_ru
    @Radaram101 #146406 10:00 AM, 07 Mar 2020
    Если так producer = KafkaProducer(bootstrap_servers='kafka:9092', value_serializer=lambda v: json.dumps(v).encode('utf-8'))
    то получаю ошибку
    NoBrokersAvailable: NoBrokersAvailable
  • @yumaev #146407 10:16 AM, 07 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @andrey_romanov #146408 10:25 AM, 07 Mar 2020
    у вас в конфиге таблицы с engine = kafka в поле хоста кафки должно быть название контейнера с кафкой
  • Там запаблишен порт, поэтому будет торчать и на локалхосте тоже. Но лучше имя хоста указать, во избежание.

    Насчет проблемы - вероятно напутали с Advertised Listeners, у вас там локалхост:29092, попробуйте поменять на имя сервиса и пересоздать стек
  • https://t.me/clickhouse_ru
    Порт на локалхосте открыт, но кликхаус поднят в другом контейнере у которого свой отдельный локалхост. После сммены хоста у человека к кафке подключилось, но появилась проблема с топиками
  • @zhora9001 #146411 11:10 AM, 07 Mar 2020
    Да, но я про вызов продьюсера - кстати, он из контейнера запускается или просто с машины?

    Если с машины - то про kafka она значит ничего не будет, нужно оставить локалхост.

    И вдобавок: у битнами раньше были креды пользователя выставлены по умолчанию, стоит проверить, выставлены/сброшены ли
  • https://t.me/clickhouse_ru
    с машины запускал, сообщения доходят до топиков
    насчет кред, судя по доке такие по дефолту
    KAFKA_BROKER_USER: Kafka client user. Default: user
    KAFKA_BROKER_PASSWORD: Kafka client user password. Default: bitnami
  • @stopost0 #146414 01:17 PM, 07 Mar 2020
    Может ктото сталкивался с проблемой хранения первых входов в систему (install приложения, новый пользователь и подобное).
    На протяжении суток происходит порядка 500-700 млн входов с разных устройств, новыми из которых являются всего несколько миллионов. Необходимо хранить всех новых пользователей в отдельной таблице (или мат view), поскольку пользователи сервиса как всегда хотят видеть рост количества новых устройств\пользователей он-лайн.
    Первым решением был ReplacingMergeTree с ver toDateTime(‘2100-01-01’)-now(). От такого решения отказались ввиду очень медленным SELECT с FINAL. А без FINAL данные за посление часы отображались криво что не устраивает пользователей системы.
    Сейчас решение такое, ежеминутно запускается скрипт который новые входы за последнюю минуту инсертит в отдельную таблицу
    INSERT INTO db.firstaccess
    SELECT deviceID, accessdatetime FROM db.allaccess
    WHERE accessdatetime between lastupdated and now()
    AND deviceID GLOBAL NOT IN
    (
    SELECT distinct deviceID
    FROM db.firstaccess
    )
    понятно что это костыль и с ростом таблицы db.firstaccess все становится медленнее и медленнее.
    Возможно у вас есть какие то идеи для решения таких задач без костылей? Спасибо
  • Судя по вашим логам, кх пытается подключится к брокеру на локалхосте, а должен идти на kafka. Можете показать, как создавали таблицу с кафка энджином?
  • https://t.me/clickhouse_ru
    сейчас так:
    query = """
    CREATE TABLE queue (
    timestamp UInt64,
    level String,
    message String
    ) ENGINE = Kafka SETTINGS kafka_broker_list = 'kafka:9092',
    kafka_topic_list = 'topic',
    kafka_group_name = 'group1',
    kafka_format = 'JSONEachRow',
    kafka_num_consumers = 1;"""
    print(client.execute(query))

    до этого localhost:9092 был указан
  • И с таким сетапом что в логах кх? Можно поскейлить кафку в 0-1, если кх таки подключился - будут видны сообщения о дисконектах
  • https://t.me/clickhouse_ru
    @Radaram101 #146421 02:19 PM, 07 Mar 2020
    docker-compose logs clickhouse-server
    Attaching to dev-deployment_clickhouse-server_1
    clickhouse-server_1 | Include not found: clickhouse_remote_servers
    clickhouse-server_1 | Include not found: clickhouse_compression
    clickhouse-server_1 | Logging trace to /var/log/clickhouse-server/clickhouse-server.log
    clickhouse-server_1 | Logging errors to /var/log/clickhouse-server/clickhouse-server.err.log
    clickhouse-server_1 | Include not found: networks
    clickhouse-server_1 | Include not found: clickhouse_remote_servers
    clickhouse-server_1 | Include not found: clickhouse_compression
  • https://t.me/clickhouse_ru
    docker-compose exec clickhouse-server cat /var/log/clickhouse-server/clickhouse-server.err.log
    2020.03.07 13:54:43.716055 [ 1 ] {} <Error> Application: Listen [::]:8123 failed: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = DNS error: EAI: -9 (version 20.1.4.14 (official build)). If it is an IPv6 or IPv4 address and your host has disabled IPv6 or IPv4, then consider to specify not disabled IPv4 or IPv6 address to listen in <listen_host> element of configuration file. Example for disabled IPv6: <listen_host>0.0.0.0</listen_host> . Example for disabled IPv4: <listen_host>::</listen_host>
    2020.03.07 13:54:43.716689 [ 1 ] {} <Error> Application: Listen [::]:9000 failed: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = DNS error: EAI: -9 (version 20.1.4.14 (official build)). If it is an IPv6 or IPv4 address and your host has disabled IPv6 or IPv4, then consider to specify not disabled IPv4 or IPv6 address to listen in <listen_host> element of configuration file. Example for disabled IPv6: <listen_host>0.0.0.0</listen_host> . Example for disabled IPv4: <listen_host>::</listen_host>
    2020.03.07 13:54:43.716834 [ 1 ] {} <Error> Application: Listen [::]:9009 failed: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = DNS error: EAI: -9 (version 20.1.4.14 (official build)). If it is an IPv6 or IPv4 address and your host has disabled IPv6 or IPv4, then consider to specify not disabled IPv4 or IPv6 address to listen in <listen_host> element of configuration file. Example for disabled IPv6: <listen_host>0.0.0.0</listen_host> . Example for disabled IPv4: <listen_host>::</listen_host>
    2020.03.07 13:57:36.718813 [ 40 ] {} <Error> void DB::StorageKafka::threadFunc(): Code: 27, e.displayText() = DB::Exception: Cannot parse input: expected { before: test: (at row 1)
    , Stack trace (when copying this message, always include the lines below)

    тут в конце видно сообщение test дошло, больше воспроизвести не удается
  • https://t.me/clickhouse_ru
    @Radaram101 #146423 02:20 PM, 07 Mar 2020
    блин, не красиво логи выводятся
  • https://t.me/clickhouse_ru
    @Radaram101 #146424 02:22 PM, 07 Mar 2020
    отправлял сообщения через
    kafka-console-producer.sh --broker-list kafka:9092 --topic test внутри контейнера
  • Емнип по умолчанию он будет стоять на сломанном сообщении, нужно почистить топик / другой выбрать и попробовать отправить валидно
  • @zhora9001 #146426 02:22 PM, 07 Mar 2020
    Странно конечно, что вы в кх никуда аутентификацию не передавали, а она вроде бы и есть
  • https://t.me/clickhouse_ru
    я сейчас взял образ от wurstmeister
    kafka:
    image: "wurstmeister/kafka:latest"
    ports:
    - "9092:9092"
    hostname: kafka
    links:
    - zookeeper
    environment:
    - KAFKA_ADVERTISED_HOST_NAME=kafka
    - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
    - KAFKA_ADVERTISED_PORT=9092
    zookeeper:
    image: wurstmeister/zookeeper:latest
    ports:
    - "2181:2181"
  • Прекрасный выбор! Несколько дней назад его настраивали, все было шикарно
  • https://t.me/clickhouse_ru
    А что скажите насчет confluentinc/cp-kafka ?
  • Не смотрели - вурстмистер завелся, тесты прошел успешно, в том числе с HA сетапе (кроме осечек кх касательно дубликатов и напряжений с реконнектами, когда падает один брокер)
  • https://t.me/clickhouse_ru
    а удалось справиться с дубликатами?
  • MVP данного чата сразу пресек все попытки, пояснив, что такова жизнь. Их было несколько штук на 100к записей, что для нас терпимо в сценарии «упал брокер, пролежал, вернулся»

    P.S. Пока все сервисы жили, дубликатов не появлялось
  • https://t.me/clickhouse_ru
    ну да, если несколько записей, то думаю не критично
    как понимаю, связку кафки и кх можно использовать на проде
  • Очень надеюсь, мы как собираемся скоро выкатывать :)
  • https://t.me/clickhouse_ru
    эт отлично
    так, удалил топик, пересоздал таблицу queue, отправил сообщение, во view появились данные и в основной таблице тоже, это огонь!
  • Поздравляю с победой!
  • https://t.me/clickhouse_ru
    спасибо за помощь)
    остается из локалхоста отправить сообщение, через питон клиент, сейчас отправлял через kafka-console-producer.sh в контейнере
  • https://t.me/clickhouse_ru
    @Radaram101 #146439 03:04 PM, 07 Mar 2020
    @anton_zhuravsky, можно еще вопрос, если сообщение сломано, всегда надо будет удалять топик? нет другого подхода?
  • @zhora9001 #146440 03:19 PM, 07 Mar 2020
    Есть параметр skip_broken_messages, он разрешает пропускать Н сломанных сообщений. По идее еще можно подвинуть курсор в кафке на следующее сообщение, но как это точно сделать не скажу
  • @zhora9001 #146441 03:23 PM, 07 Mar 2020
    Что-то вроде https://gist.github.com/marwei/cd40657c481f94ebe273ecc16601674b должно решать вопрос
    How to Reset Kafka Consumer Group Offset

    How to Reset Kafka Consumer Group Offset. GitHub Gist: instantly share code, notes, and snippets.

  • https://t.me/clickhouse_ru
    @kushneryk #146442 04:09 PM, 07 Mar 2020
    Для того что-бы передвинуть курсор, необхожимо предварительно отключить консюмера.
  • Да, верно. В данном кейсе не проблема, так как консьюмер (кх) все равно стоит на одном сообщении и дальше не двигается
  • https://t.me/clickhouse_ru
    @kushneryk #146444 05:52 PM, 07 Mar 2020
    @anton_zhuravsky А если удалить предыдущую Kafka таблицу и создать новую с параметром skip broken message. То консюмер проигнорирует сообщения с ошибкой и продолжит работу
  • Да, можно так, но тут момент:
    скип - это допустимое количество невалидных сообщений в блоке, то есть он будет постоянно пропускать до Н сообщений. Если у вас ситуация с невалидным сообщением исключительная - возможно, лучше чинить «вручную», быть может даже передобавляя исправленную запись в очередь, чтоб не начать пропускать сообщения в автоматическом режиме и ничего про это не знать
  • в replacingmergetree какой order by был? по deviceid пробовали?

    вообще, что-то - что ищет быстро по ключу, и позволяет делать много запросов вам подойдет больше (cassandra/scylla/любой key value/локальный dictionary/hashset в памяти) ну и добавить колонку isFirstAccess в КХ таблицу (т.е. лукап в КВ, и потом запись в КХ с соответствующим значением колонки).
  • Горячий кеш в Redis, a вот для онлайн отчетов которые завязаны на новых пользователях нужны именно таблицы.
  • @dj_mixer #146450 08:35 PM, 07 Mar 2020
    ну, вы не можете при вставке глядеть в редис и добавить колонку isFirstAccess на лету?
  • @dj_mixer #146451 08:35 PM, 07 Mar 2020
    просто если есть эта колонка, вы по ней будете фильтровать, и вам больше ничего не нужно
  • Нет, слишком большая база для key value
  • @stopost0 #146453 08:36 PM, 07 Mar 2020
    Мне на самом деле нужен insert ignore
  • @stopost0 #146454 08:36 PM, 07 Mar 2020
    Который бы сходу мерджился
  • сколько у вас будет юников? 100 миллионов? можно смело по deviceID лукапить... вам и редис грузить не нужно. Считайте все в память и лукапьте на здоровье. Либо лукапьте по короткому хешу, если не найден, то проверяйте в редис (у вас таких 1%).

    нету insert-ignore. опять таки, если прямо именно в КХ, можете поиграть с ордер by. FINAL может стать быстрее.
  • Проблема в том что с одной стороны тут четкое кейвал deviceid->installdate, но отчеты всем нужны в другую сторону, то есть дайте всех клиентов у которых installdate=today(). Хоть 2 таблицы делай
  • @dj_mixer #146457 08:58 PM, 07 Mar 2020
    select from db.allaccess WHERE isFirstAccess=1 and accessdatetime>=toYYYYMMDD(now())

    не? КХ это разжует хоть на 100 миллиардов записей, ну а при партишнинге по датам, это вообще будет незаметно
  • @dj_mixer #146458 09:00 PM, 07 Mar 2020
    можно делать и 2 таблицы ("firstaccess" за вчера и раньше) и ЮНИОНом с сегодняшним "allaccess"
  • Это точно нет. За сегодня от 50млн и до 200 млн записей, если 10-15клиентов одновременно сделают селект сервера лягут
  • тогда у вас очень слабые сервера. скан одной, двух колонок на таких объемах не должен ничего "ложить". Можете поиграться с потоками (уменьшить), тогда с параллелизмом будет получше, но скорость упадет.
  • Это да надо попробовать
  • @stopost0 #146462 09:06 PM, 07 Mar 2020
    Просто задача вроде классическая - помнить только первую запись, а решения простого нет
  • @dj_mixer #146463 09:08 PM, 07 Mar 2020
    решений много, и ваше подойдет, и любое из предложений выше подойдет... и любое из них можно заставить работать быстро. кактус ваш, колитесь как удобно
  • https://t.me/clickhouse_ru
    простое решение передавать специальный параметр, первый ли заход) такая же вещь должна же трекатся гдето
  • Это только бэк трекает, sdk не наше, просто идет вал запросов:(
  • @dj_mixer #146466 09:12 PM, 07 Mar 2020
    любая OLTP, KV, память )
  • https://t.me/clickhouse_ru
    @unamedrus #146467 09:12 PM, 07 Mar 2020
    ну, в таком случае все решения получаются не очень простые, мг
    вообще я бы попробовал вариант с replacingMergeTable только вместо использования FINAL argMin или что то подобное в запросе
  • Я вообще думал optimize final каждых 5 минут и показывать данные с лагом в 5 минут - начальство не одобрило, но план был неплохой:)
  • https://t.me/clickhouse_ru
    @unamedrus #146469 09:17 PM, 07 Mar 2020
    а сколько памяти у сервера?
  • @stopost0 #146470 09:17 PM, 07 Mar 2020
    64гб схема 2шарда+2реплики
  • https://t.me/clickhouse_ru
    @unamedrus #146471 09:18 PM, 07 Mar 2020
    а шардируется как?
  • @stopost0 #146472 09:18 PM, 07 Mar 2020
    Хитро, по clientID
  • https://t.me/clickhouse_ru
    @unamedrus #146473 09:19 PM, 07 Mar 2020
    вообще грубо считая, миллиард uuid это ок 16гб, будет у вас много памяти, можно было бы попробывать с SET движком
  • @stopost0 #146474 09:19 PM, 07 Mar 2020
    Половина клиентов в США, у них свой шард, другая половина в европе
  • https://t.me/clickhouse_ru
    @unamedrus #146475 09:19 PM, 07 Mar 2020
    но возможно это бы жутко тупило
  • https://t.me/clickhouse_ru
    @unamedrus #146476 09:21 PM, 07 Mar 2020
    типа вьюха с SELECT device_id FROM WHERE device_id NOT IN devices_list
  • @stopost0 #146477 09:28 PM, 07 Mar 2020
    Ладно, у меня неделя на эксперименты, потом напишу как сделаю
  • @1014531607 #146478 09:28 PM, 07 Mar 2020
    Есть ли готовое решение по сохранению метрик из Prometheus или из VictoriaMetrics в CH?
  • https://t.me/clickhouse_ru
    >Мне на самом деле нужен insert ignore
    >Который бы сходу мерджился

    скорость света в этой реальности к сожалению ограничена. Поэтому вряд ли.
    Вам нужен другой realm, с дедом морозом и феями и волшебными палочками.
  • https://t.me/clickhouse_ru
    uniqState today - uniqState yesterday ?
  • 08 March 2020 (139 messages)
  • @1012503138 #146481 02:07 AM, 08 Mar 2020
    Joined.
  • @1131682078 #146482 10:59 AM, 08 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @combot #146483 b o t 11:14 AM, 08 Mar 2020
    Alert! Verified/Cc Cvv/D+P🎖 is a known spammer and is CAS banned. Ban is strongly recommended.
  • https://t.me/clickhouse_ru
    @Radaram101 #146484 03:11 PM, 08 Mar 2020
    Есть такие таблицы
    таблица для очереди с engine = Kafka
    консьюмер MATERIALIZED VIEW
    и основная таблица куда консьюмер кладет данные.
    И такой вопрос, если потребуется добавить столбец в основную таблицу, то какая должна быть логика работы?
    Я должен:
    1) отсоеденить материлизованное представление через DETACH,
    2) удалить таблицу для очереди
    3) добавить столбец в основную таблицу
    4) добавить таблицу для очереди с engine = Kafka с обновленными столбцами
    5) присоеденить материлизованное представление - консьюмер или может лучше пересоздать его
    так или принято по другому?
  • https://t.me/clickhouse_ru
    @Radaram101 #146485 03:14 PM, 08 Mar 2020
    @anton_zhuravsky, можете помочь с вопросом выше? Вчера сильно помогли, сегодня имею наглость еще раз попросить помощи)
  • @kerby05 #146486 03:24 PM, 08 Mar 2020
    Joined.
  • Ну давайте попробую :) Вам в любом случае придется поменять таблицы и для очереди, и для MV - так как вы добавили колонки. Детач звучит лучше, так как не придется двигать офсеты - ведь если вы пересоздадите таблицы, они начнут получать данные «с текущего момента». Если подвигать офсеты нетрудно - я бы пересоздал с нуля и руками выставил бы правильный офсет и казалось бы все
  • Навскидку, МВ можно смело пересоздавать вообще всегда, так как офсет привязан к таблице-очереди (она выступает консьюмером). Пока из нее не читаем (чем занимается мв), все окей. Но возможно я что-то упустил, лучше проверить лишний раз.
  • @SWx5YQ ↶ Reply to #146488 #146489 03:47 PM, 08 Mar 2020
    Главное создать Kafka engine с той же consumer group, что и была. Остальное, имхо, не оч важно
  • @zhora9001 #146490 03:48 PM, 08 Mar 2020
    Ну а в проде (если это миграцим схем и пр) я делал через отдельные топики. Поменяли схему - пишем в топик в2; топик в1 доели - выключили все, жобавили колонки, подключились к новому. Так ничего не теряем, умеем выкатить в2 постепенно (роллинг деплои наше все) и не напрягаем никого ошибками
  • @zhora9001 #146491 03:50 PM, 08 Mar 2020
    Собственно, в реюзе топика осн беда - это нечаянно смешать в1 и в2 сообщения, чего легко достичь, трудно починить и невозможно забыть :)
  • https://t.me/clickhouse_ru
    Интересно, идею вроде понял, в очередной раз спасибо)
  • Не за что, рад если полезно
  • https://t.me/clickhouse_ru
    @MashinaMashina #146494 05:17 PM, 08 Mar 2020
    А как надо выбирать ключ семплирования?
  • https://t.me/clickhouse_ru
    @MashinaMashina #146495 05:18 PM, 08 Mar 2020
    У меня в бд есть столбик event_name, я хотел по нему, clickhouse ругается что он string. Я хочу просто еще один столбик добавить и его через DEFAULT и функцию хеширования заполнять просто. Правильно я делаю?
  • https://t.me/clickhouse_ru
    @rclick #146496 05:35 PM, 08 Mar 2020
    Подскажите плз, вчера обновил версию до 20.1.6.30 сегодня на паре серверов (реплики друг-друга) ЛА под 250, вся память съедена и по сути все висит. Эти сервера объединяет только одна база с парой больших таблиц. Останавливаю кликхаус - машинки в норме, включаю - через какое то время начинается мердж партиций в одной из этих больших табллиц и через пару минут все стопорится, машинка умирает
  • https://t.me/clickhouse_ru
    @rclick #146497 05:35 PM, 08 Mar 2020
    чтобы вы порекомендовали сделать в таком случае?
  • Ключ семплирования должен быть чем-то, что бьет вашу выборку на «равноценные» куски. Поэтому реокмендуют брать что-то вроде UserId (предполагая, что пользователи у вас «одинаковые», и считая какие-то вещи для части пользователей, результат разумно экстраполировать на всю выборку).
    В свете сказанного event_name, наверное, не лучший кандидат, хотя, конечно, зависит от того, что вы хотите
  • https://t.me/clickhouse_ru
    @rclick #146499 05:42 PM, 08 Mar 2020
    может быть есть какая то вомзожность откатиться на пред версию
  • https://t.me/clickhouse_ru
    @MashinaMashina #146500 05:44 PM, 08 Mar 2020
    А запросы котом какие должны быть для этого ключа? Найти среднее между пользователями (group by user_id) или найти среднее для одного пользователя с where user_id=%user% ?
  • https://t.me/clickhouse_ru
    @MashinaMashina #146501 05:44 PM, 08 Mar 2020
    Ключ семплирования должен быть чем-то, что бьет вашу выборку на «равноценные» куски. Поэтому реокмендуют брать что-то вроде UserId (предполагая, что пользователи у вас «одинаковые», и считая какие-то вещи для части пользователей, результат разумно экстраполировать на всю выборку).
    В свете сказанного event_name, наверное, не лучший кандидат, хотя, конечно, зависит от того, что вы хотите
  • Для сэмплированной выборки вы указываете SAMPLE часть в запросе (какую часть хотите, 0..1 или сколько значений, например 10000). Делать какие-то вычисления по, собственно, ключу семплирования, наверное, не оч разумно. Более валидный пример - вам интересен средний возвраст пользователя, хранящийся в колонке Age, но точности не нужно - тогда пишите SELECT avg(Age) FROM users SAMPLE 0.1 - кх посчитает среднее для 10% пользователей и даст вам (скорее всего) близкий к настоящему ответ
  • @zhora9001 #146503 05:49 PM, 08 Mar 2020
    Если части SAMPLE в запросе нет - то выборки работают как обычно
  • https://t.me/clickhouse_ru
    кажется понял для чего он, я пытался понять запросы потом должны быть в контексте одного пользователя или на всех пользователей
  • https://t.me/clickhouse_ru
    @MashinaMashina #146505 05:50 PM, 08 Mar 2020
    понял что на всех
  • https://t.me/clickhouse_ru
    @rclick #146506 05:50 PM, 08 Mar 2020
    может быть есть способ при выключенном CH перевести базу или таблицу в режим ридонли или вообще в некий "детачед", чтобы решать аврал уже спокойнее, с неработающей таблицей, а не с неработающим сервером
  • А запустить один из серверов (чтоб кластер не баловался репликацией) и сделать полный дамп можно (с учетом размера таблицы)?
  • https://t.me/clickhouse_ru
    @rclick #146508 06:01 PM, 08 Mar 2020
    не получается
  • https://t.me/clickhouse_ru
    @rclick #146509 06:01 PM, 08 Mar 2020
    если CH запущен, то через 30 секунд его даже не убить - съедена вся память на машинке
  • https://t.me/clickhouse_ru
    @rclick #146510 06:01 PM, 08 Mar 2020
    *если запущен на любом из серверов, на втором - выключен
  • https://t.me/clickhouse_ru
    @rclick #146511 06:01 PM, 08 Mar 2020
    если включен и на втором - аналогично умирают обе
  • А если прибить зукипер? По идее должен перевести таблицу в ридонли тогда...
  • https://t.me/clickhouse_ru
    @rclick #146513 06:03 PM, 08 Mar 2020
    дык до репликации то дело не доходит, если я правильно понимаю
  • https://t.me/clickhouse_ru
    @rclick #146514 06:03 PM, 08 Mar 2020
    происходит именно мердж партов таблицы для replicatedreplacingmergetree
  • https://t.me/clickhouse_ru
    @rclick #146515 06:03 PM, 08 Mar 2020
    в результате съедена вся память, забиты наглухо диски (нвме 3шт в рейд)
  • https://t.me/clickhouse_ru
    @rclick #146516 06:04 PM, 08 Mar 2020
    и даже на service clickhouse-server stop
    получаю -bash: fork: Cannot allocate memory
  • @palshin_a #146517 06:05 PM, 08 Mar 2020
    Попробовать перевести данные в detached потом запуститься, и по тихонько делать attach
  • https://t.me/clickhouse_ru
    @rclick #146518 06:05 PM, 08 Mar 2020
    а как это сделать?
  • https://t.me/clickhouse_ru
    @rclick #146519 06:05 PM, 08 Mar 2020
    перевести в детачед
  • Я так понимаю, на это есть 30 секунд :)
  • https://t.me/clickhouse_ru
    @rclick #146521 06:06 PM, 08 Mar 2020
    ага, это прям каждую партицию отдельно... сильно
  • @zhora9001 #146522 06:08 PM, 08 Mar 2020
    Быть может попробовать всякие параметры типа merge_max_block_size потрогать, чтоб он память не выедал всю?
  • @zhora9001 #146523 06:09 PM, 08 Mar 2020
    Попробуйте все же зукипер приложить, быть может мержи это тоже остановит
  • @zhora9001 #146524 06:09 PM, 08 Mar 2020
    Теряете, я так понимаю, немного
  • В каталоге таблицы, переносите подпапки в директорию detached на выключенном ch. Запустите clickhouse, он не будет видеть эти данные. Главное про репликацию не забыть, чтобы с реплики не начали прилетать те данные, которые унесли в detached. Запустится, потом по имени партиций через запросы attach делаете атач. Проблемы подобные решал как то так. Разумеется недоступны были данные те что в detache какое-то время
  • https://t.me/clickhouse_ru
    @rclick #146526 06:19 PM, 08 Mar 2020
    вот как раз хотел спросить, можно ли руками при остановленном сервере данные передвинуть в детачед
  • https://t.me/clickhouse_ru
    @rclick #146527 06:19 PM, 08 Mar 2020
    хорошо, раз можно
  • https://t.me/clickhouse_ru
    @rclick #146528 06:26 PM, 08 Mar 2020
    да, после переноса данных в детачед все запустилось и вроде работает нормально
  • https://t.me/clickhouse_ru
    а если у меня все запросы только в контексте одного пользователя?

    SELECT AVG(field) FROM table SAMPLE 0.1 WHERE user_id = 1

    Для таких запросов семплирование по user_id неправильно же будет? А если сделать семплирование по полю time? Там unix timestamp у меня
  • А что вы хотите получить от сэмплирования собственно?
  • https://t.me/clickhouse_ru
    Я хочу получать примерный результат, не считывая все строки
  • https://t.me/clickhouse_ru
    @MashinaMashina #146532 06:39 PM, 08 Mar 2020
    Чем точнее, тем лучше
  • https://t.me/clickhouse_ru
    @MashinaMashina #146533 06:39 PM, 08 Mar 2020
    Как влияет на это ключ не очень понимаю, в доках толком не написано
  • Окей, у вас наверняка есть какие-то другие сущности в контексте пользователя - сессии например или что-то еще. Или просто поток событий, равнозначных между собой?
  • https://t.me/clickhouse_ru
    @MashinaMashina #146535 06:41 PM, 08 Mar 2020
    uuid, event_name, event_time, user_id и десяток полей, которые в большинстве случаев не заполняются
  • https://t.me/clickhouse_ru
    @MashinaMashina #146536 06:41 PM, 08 Mar 2020
    больше нету
  • В такой истории немного стремно советовать какой-то определенный sampling key, потому что можно получить жесткий байас в запросах. Ну, например, если сделать сэмплировпние по имени события - оно вырежет какие-то события из рассмотрения вообще, и запросы вида select uniqExact(event_name) from events where user_id = x sample 0.1 будут возвращать глупости. Можете попробовать завести сэмплирование по uuid (предполагаю, что это уникальный ключ события, что-то вроде уникального id).

    А вообще говоря, на пользователя много событий приходится? Может, зря приседаете?
  • https://t.me/clickhouse_ru
    Записей на user_id много, в каждом запросе еще event_name указывается по типу WHERE user_id = 1 AND event_name = 'pickup'
  • Ну если у вас такие выборки, и это все равно миллионы записей - вполне подойдет сэмплирование по uuid (опять же, если это это нейкое случайное число, которое не коррелирует с условиями запроса)
  • https://t.me/clickhouse_ru
    Invalid sampling column type in storage parameters: UUID. Must be unsigned integer type.

    uuid добавлен в таблицу как какое-то уникальное поле чтобы запись по 1 можно было читать если требуется
  • uuid у вас строка?
  • https://t.me/clickhouse_ru
    @MashinaMashina #146542 07:14 PM, 08 Mar 2020
    CREATE TABLE events (
    uuid UUID DEFAULT generateUUIDv4(),

    Тип UUID
  • https://t.me/clickhouse_ru
  • @zhora9001 #146544 07:16 PM, 08 Mar 2020
    Понял, вам нужно как-то преобразовать его в число. Попробуйте SAMPLE BY intHash32(uuid) например
  • https://t.me/clickhouse_ru
    как его тогда в primary key (order by) добавить?

    Ошибка Sampling expression must be present in the primary key.
  • https://t.me/clickhouse_ru
    @MashinaMashina #146546 07:18 PM, 08 Mar 2020
    Пытался сделать так:
    ORDER BY (user_id, event_name, event_time, uuid)
  • @zhora9001 #146547 07:19 PM, 08 Mar 2020
    Выражение целиком должно быть, то есть intHash32(uuid) тоже вместо uuid
  • https://t.me/clickhouse_ru
    Сделал так:

    CREATE TABLE test (
    uuid UUID DEFAULT generateUUIDv4(),
    ...

    ORDER BY (user_id, event_name, event_time, intHash32(uuid))
    SAMPLE BY intHash32(uuid)

    Ошибка:
    Illegal type UUID of argument of function intHash32.
  • Трагедия. Давайте тогда intHash32(UUIDStringToNum(uuid)) вместо intHash32(uuid)
  • https://t.me/clickhouse_ru
    @nyoroon #146550 07:26 PM, 08 Mar 2020
    Можно просто любой хеш, не обязательно intHash
  • https://t.me/clickhouse_ru
    может какой нибудь cityHash64 поставить вместо intHash32?
  • https://t.me/clickhouse_ru
  • @zhora9001 #146553 07:28 PM, 08 Mar 2020
    Попытка не пытка, можно пробовать, но есть шансы, что функции хэширования просто не могут из uuid (поэтому и UUIDStringToNum). intHash32 и должен для строковых типов использовать cityHash (неясно, почему не хочет uuid как строковый тип хотя бы рассмотреть)
  • https://t.me/clickhouse_ru
    А где эту доку найти или draft только в чате?
  • https://t.me/clickhouse_ru
    Не забывайте, что семплирование работает поверх индекса. И если есть условие user-id = 1, то писать sample при семплировании по юзерам нет смысла
  • @zheka_kolesnik #146556 07:42 PM, 08 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @dancing_elf #146557 07:43 PM, 08 Mar 2020
    И семплирование меньше одной сотой скорее всего помогать будет мало
  • https://t.me/clickhouse_ru
    а может просто добавить поле uint32 и вставлять туда случайное число и по нему делать семплирование? по uuid я понимаю, будет считать по первым записям?
  • https://t.me/clickhouse_ru
    @MashinaMashina #146559 07:44 PM, 08 Mar 2020
    Если мы смотрим результаты, как-то изменяем тактику работы в своем приложении, записи добавляются в другом диапазоне значений, а семприрование не будет учитывать последние записи, а всегда только вначале
  • Вы можете считать, что intHash32(UUIDStringToNum(uuid)) и будет тем самым случайным числом. Мы ведь верим,что хэш-функция достаточно хороша, а значит равномерно распределена - выходит, вы не отличите эти значения от рандома.

    Короче говоря, не переживайте: случайные данные, смазанные хэшом можно считать все так же случайными :)
  • https://t.me/clickhouse_ru
    Только если ключ семплирования это что то вроде intHash32(user_id), то и в запросе нужно писать не user_id = 1, а intHash32(user_id) = intHash32(1) and user_id = 1. Тогда индекс заработает.
  • https://t.me/clickhouse_ru
    Это не понял.

    Куда это указывать? Есть у меня запрос например SELECT AVG(field) FROM table WHERE user_id = 1 SAMPLE 0.1

    Семплирование в таблице по cityHash64(uuid)
  • https://t.me/clickhouse_ru
    @dancing_elf #146563 07:52 PM, 08 Mar 2020
    Sample выкинуть
  • https://t.me/clickhouse_ru
    @dancing_elf #146564 07:52 PM, 08 Mar 2020
    В where добавить
  • https://t.me/clickhouse_ru
    @dancing_elf #146565 07:53 PM, 08 Mar 2020
    Where user_id = 1 and cityHash64(user_id) = cityHash64(1)
  • https://t.me/clickhouse_ru
    Чтобы работало cityHash64(uuid) = cityHash64(1), uuid должно же быть равным 1, а оно строка 36 символов

    И для чего тогда это? https://clickhouse.tech/docs/ru/query_language/select/#select-sample-clause
  • https://t.me/clickhouse_ru
    @dancing_elf #146567 07:57 PM, 08 Mar 2020
    И не стоит делать длинный (много столбцов) ключ в таблице или ключ который много весит (случайные строки произвольной длины). Так как семплирование последнее в ключе, то оно будет очень страдать.
  • https://t.me/clickhouse_ru
    Печатаю с телефона. Везде user_id.
  • Кажется, Ovseiko уже решил использовать сэмплирование по uuid, так как семплирование по user is лишено смысла в его случае :)
  • https://t.me/clickhouse_ru
    Это по моему максимально лишено смысла
  • https://t.me/clickhouse_ru
    для чего считать cityHash64 от user_id, когда бы берем только по одному пользователю?
  • Его никто и не считает, смотрите внимательнее. Хэш считаем от uuid
  • https://t.me/clickhouse_ru
    Я вот не понял почему оно лишено смысла :) если пользователей больше 10тысяч оно не только даст хороший физический смысл семплированию, но и позволит считать отдельных пользователей без семплирования с неплохим ускорением.
  • @zhora9001 #146574 08:03 PM, 08 Mar 2020
    Так, я запутался уже окончательно, господа
  • https://t.me/clickhouse_ru
    user_id скорее сюда надо, а не в семплирование

    PARTITION BY (user_id, event_name)
    ORDER BY (user_id, event_name, event_time)
  • @zhora9001 #146576 08:04 PM, 08 Mar 2020
    @MashinaMashina вы хотите сэмплированные выборки делать в скоупе одного пользователя или по всем?
  • https://t.me/clickhouse_ru
    У меня where user_id = %N% во всех запросах
  • https://t.me/clickhouse_ru
    @MashinaMashina #146578 08:04 PM, 08 Mar 2020
    то есть в контексте одного пользователя
  • Ну тогда сэмплирование по любой производной от user_id вам не очень-то и нужно. То, что вероятно нужно - это сэмплированные выборки в скоупе пользователя (раз у вас все выборки в скоупе пользователя), а значит ключ сэмплирования должен быть чем-то, что не зависит от user id вообще от слова совсем. Потому и предлагаю взять uuid
  • https://t.me/clickhouse_ru
    тут я всё понимаю, я сбился с пути после слов @dancing_elf
  • @zhora9001 #146581 08:07 PM, 08 Mar 2020
    (предполагая, что uuid вы никак к user id не привязывете, а генерируете уникальный для каждого события)
  • https://t.me/clickhouse_ru
    @dancing_elf #146582 08:07 PM, 08 Mar 2020
    Если user_id такой большой, что будет в partition by, то тогда понятно почему uuid это неплохой вариант.
  • https://t.me/clickhouse_ru
    Сорян
  • https://t.me/clickhouse_ru
    я не понял почему не указывать sample в запросе? Вот же https://clickhouse.tech/docs/ru/query_language/select/#select-sample-clause
  • https://t.me/clickhouse_ru
    @dancing_elf #146585 08:12 PM, 08 Mar 2020
    Sample работает через индекс. Его можно эмулировать самому подставляя в where выражения вида 0 <= sample_column < max_possible_value_of(sample column type) / 100
  • https://t.me/clickhouse_ru
    @dancing_elf #146586 08:14 PM, 08 Mar 2020
    Просто удобно иметь для семплинга отдельный синтаксис
  • https://t.me/clickhouse_ru
    получаю ли я выигрыш с этого? Для чего самому эмулировать, когда clickhouse может штатными средствами?
  • https://t.me/clickhouse_ru
    Иногда хочется индекс использовать напрямую
  • https://t.me/clickhouse_ru
    @MashinaMashina #146589 08:15 PM, 08 Mar 2020
    А он и так используется
  • https://t.me/clickhouse_ru
    @MashinaMashina #146590 08:16 PM, 08 Mar 2020
    ch не дает указать sample key не входящий в индекс
  • https://t.me/clickhouse_ru
    @MashinaMashina #146591 08:16 PM, 08 Mar 2020
    тут я писал
  • https://t.me/clickhouse_ru
    @MashinaMashina #146592 08:16 PM, 08 Mar 2020
    как его тогда в primary key (order by) добавить?

    Ошибка Sampling expression must be present in the primary key.
  • https://t.me/clickhouse_ru
    @nblagodarnyy #146594 08:28 PM, 08 Mar 2020
    /spam
  • https://t.me/clickhouse_ru
    Подскажи тогда как индекс использовать?

    uuid например 6ce633f9-4341-4256-b31e-804717fdc7b3
    ORDER BY (user_id, event_name, event_time, cityHash64(uuid))

    Я хочу выбрать одну запись по uuid. Делаю запрос
    WHERE
    cityHash64(uuid) = cityHash64('6ce633f9-4341-4256-b31e-804717fdc7b3')
    AND user_id = 1
    AND uuid = '6ce633f9-4341-4256-b31e-804717fdc7b3'

    Ничего не найдено. Запрос
    SELECT uuid, cityHash64('6ce633f9-4341-4256-b31e-804717fdc7b3'), cityHash64(uuid)
    FROM test
    WHERE user_id = 1
    AND uuid = '6ce633f9-4341-4256-b31e-804717fdc7b3'

    Возвращает
    {
    ["uuid"]=>
    string(36) "6ce633f9-4341-4256-b31e-804717fdc7b3"
    ["cityHash64('6ce633f9-4341-4256-b31e-804717fdc7b3')"]=>
    string(20) "18166799775718080968"
    ["cityHash64(uuid)"]=>
    string(19) "2862894495263800216"
    }

    Как я понимаю там где-то типы uuid разные и cityHash64 возвращает разные значения
  • https://t.me/clickhouse_ru
    cityHash64(uuid) = cityHash64(toUUID('6ce633f9-4341-4256-b31e-804717fdc7b3'))
  • https://t.me/clickhouse_ru
    1 rows in set. Elapsed: 0.136 sec. Processed 585.00 thousand rows, 9.63 MB (4.31 million rows/s., 70.93 MB/s.)

    По моему индекс не использовался, что может мешать?
  • https://t.me/clickhouse_ru
    @den_crane #146598 08:45 PM, 08 Mar 2020
    ну очевидно же, как он может использоваться
  • https://t.me/clickhouse_ru
    @den_crane #146599 08:46 PM, 08 Mar 2020
    у вас куча полей до uuid в индексе
  • https://t.me/clickhouse_ru
    @den_crane #146600 08:46 PM, 08 Mar 2020
    забудьте про sampling
  • https://t.me/clickhouse_ru
    @den_crane #146601 08:46 PM, 08 Mar 2020
    вам это не надо
  • https://t.me/clickhouse_ru
    @MashinaMashina #146602 08:48 PM, 08 Mar 2020
    Как не надо? Потому что 500к строк? Так это я пока на вечер нагнал, будет больше
  • https://t.me/clickhouse_ru
    @den_crane #146603 08:49 PM, 08 Mar 2020
    вы не гугл
  • https://t.me/clickhouse_ru
    @den_crane #146604 08:51 PM, 08 Mar 2020
    вводить ради семплинга uuid , это все равно что ногу отрезать, чтобы быстрее бегать, потому что масса тела уменьшится
  • https://t.me/clickhouse_ru
    @MashinaMashina #146605 08:54 PM, 08 Mar 2020
    А что мне тогда делать? Для чего мне считать 1кк записей, если можно 100к?
  • https://t.me/clickhouse_ru
    @MashinaMashina #146606 08:54 PM, 08 Mar 2020
    Это же не 1 человеку, все хотят что-то посмотреть, у всех свои данные
  • https://t.me/clickhouse_ru
    @MashinaMashina #146607 08:54 PM, 08 Mar 2020
    90% нагрузки снять
  • https://t.me/clickhouse_ru
    @den_crane #146608 08:57 PM, 08 Mar 2020
    я перечитал ваши сообщения. Сейчас это выглядит так "я отрезал себе ногу и она чешется, что мне делать?".
    мой ответ: "Я не знаю"
  • https://t.me/clickhouse_ru
    @den_crane #146609 09:04 PM, 08 Mar 2020
    есть масса инструментов, индексы, партиции, MV, LiveView
  • https://t.me/clickhouse_ru
    @MashinaMashina #146610 09:09 PM, 08 Mar 2020
    LiveView это про него? https://www.altinity.com/blog/2019/11/13/making-data-come-to-life-with-clickhouse-live-view-tables
    Экспериментальная функция добавленная в конце 19 года
    Making Data Come to Life with ClickHouse Live View Tables

    Have you ever wanted to get a notification from your database when the query result has changed due to new data? Have you ever wanted to build a real-time dashboard where your graphs would change in real-time based on fresh aggregates from your ClickHouse cluster? Well, starting in the 19.14.3.3 ClickHouse release, an experimental feature was added to ClickHouse that you most likely did not notice.

  • https://t.me/clickhouse_ru
    @MashinaMashina #146611 09:09 PM, 08 Mar 2020
    Почитаем, за это спасибо) Затестим
  • https://t.me/clickhouse_ru
    @MashinaMashina #146612 09:18 PM, 08 Mar 2020
    А есть какие-то доки по LiveView? Интересная функция, ее бы к nodejs прикрутить и на лету изменения пользователю отдавать, не пересчитывая таблицу в бд каждый раз
  • https://t.me/clickhouse_ru
    @MashinaMashina #146613 09:22 PM, 08 Mar 2020
    Materialised view не использую, так как много пользователей. И у каких-то пользователей много записей, у каких-то мало, таблица основная одна, а запросов к ней много разных. Если делать Materialised view, то во много раз увеличится размер бд
  • https://t.me/clickhouse_ru
    ржака, uuid вам увеличил размер таблицы раз 5, если че
  • https://t.me/clickhouse_ru
    А что вместо него использовать тогда?
  • https://t.me/clickhouse_ru
    @MashinaMashina #146616 09:23 PM, 08 Mar 2020
    Вы бы подсказали что-нибудь, а не смеялись
  • https://t.me/clickhouse_ru
    я все еще рассматриваю отрезаную ногу, теряюсь в загадках, зачем вы так
  • https://t.me/clickhouse_ru
    @MashinaMashina #146618 09:24 PM, 08 Mar 2020
    Надо какое-то поле уникальное +-, тк auto increment нету, использую uuid
  • https://t.me/clickhouse_ru
    @den_crane #146619 09:26 PM, 08 Mar 2020
    ой, все, я устал смеятся и одновременно лоб болит от фейспалмов, я пойду напьюсь, а завтра возьму больничный
  • @draev #146620 11:14 PM, 08 Mar 2020
    подскажите пожалуйста, toNullable функция не работает с -State комбинатором ?
    простейший запрос
    SELECT 'maxState(10)', toTypeName(maxState(10))
    union all
    SELECT 'maxState(toNullable(10))', toTypeName(maxState(toNullable(10)))получаю вот такой ответ
    maxState(10) AggregateFunction(max, UInt8)
    maxState(toNullable(10)) AggregateFunction(max, UInt8)
  • 09 March 2020 (164 messages)
  • @z_bit ↶ Reply to #146618 #146622 04:16 AM, 09 Mar 2020
    А самостоятельно имплементировть счетчик не получается?
  • https://t.me/clickhouse_ru
    кстати, а если на лету требуется добавить столбец? то есть пришел запрос по API, и на основе данных из запроса надо создать столбец если его не хватает
  • На лету - это значит динамически? А-ля пользователь в админке нажал кнопку «хочу еще колонку А» и она появляется в таблице?
  • https://t.me/clickhouse_ru
    да, динамически. И да, вариант с админкой как раз возможный кейс использования
  • Я бы тем более делал через отдельные топики со «своими» очередями/MV. Но ваш запрос уже достаточно сложный с точки зрения проектирования, так как поднимает много проблем (а что если пользователей создат 100500 колонок? а какие должны быть значения по умолчанию? а как обновятся продьюсеры?), поэтому я бы воздержался от какого-то конкретного предложения тут
  • https://t.me/clickhouse_ru
    допустим мы не знаем какие данные придут по API и структура таблицы возможно не подходит, то тогда можем создать столбцы сразу в API используя те советы с топиками которые были выше
  • Быть может тогда лучше завести json поле для вариабельной части схемы?
  • https://t.me/clickhouse_ru
    сейчас планируется около 100 - 150 колонок
  • https://t.me/clickhouse_ru
    про json думал, но опять же как по ним быстрые select запросы делать
  • Ну он будет медленнее колонок, разумеется, но не факт, что неприемлимо медленно. Я просто как-то в целом недолюбливаю автоматическое изменение схемы и в таком разрезе json кажется лучшим вариантов
  • https://t.me/clickhouse_ru
    @Radaram101 #146632 05:39 AM, 09 Mar 2020
    > а как обновятся продьюсеры?)
    да, это проблема, надо как то названия топиков на лету менять
  • Может стоит рассмотреть изначально более гибкие схемы, например, вместо (eventName, metric1, metric2, ..., metricN) сделать (eventName, metricName, metricValue)?
  • @928029209 #146634 05:56 AM, 09 Mar 2020
    Доброе утро,
    кто-нибудь использует Spark Structured Streaming в связке с CH? Интерестно возможно ли записывая данные в CH из стриминга гарантировать "exactly once"?
  • https://t.me/clickhouse_ru
    Про (eventName, metricName, metricValue) не очень понял)
  • Ну чтобы вместо данных вроде (‘click’, 1, 2, 3) под схему (eventName, userId, someId, otherId) делать три записи: (‘click’, ‘userId’, 1), (‘click’, ‘someId’, 2), (‘click’, ‘otherId’, 3)
  • https://t.me/clickhouse_ru
    хм, интересно, надо будет тогда группировать записи чтобы дубли дабы исключать дубли
  • https://t.me/clickhouse_ru
    @Radaram101 #146638 06:08 AM, 09 Mar 2020
    возможно вариант с json полем попробую, не знаю только что скажут потом аналитики)
  • Зависит, вероятно комбинатор -If решит ваши нужны. Например, select countIf(metricName = ‘someId’) as someId, countIf(metricName = ‘otherId’) as otherId from events where eventName = ‘click’
  • @draev ↶ Reply to #146620 #146641 08:55 AM, 09 Mar 2020
    никто не знает ? 🙈
  • если установить Tableau Server for Windows, то можно на нем же (локально) установить и запускать Tableau Desktop. и тогда если в Desktop коннект нормальный, то и на сервере он также (полу-автоматом) будет нормальным. а дальше можно (имея “положительный контроль”) заниматься творчеством (TS for Linux, TD for macOS итд)
  • https://t.me/clickhouse_ru
    NULL'ы скипаются при агрегации https://clickhouse.tech/docs/en/query_language/agg_functions/#null-processing
  • https://t.me/clickhouse_ru
    @nyoroon #146644 08:58 AM, 09 Mar 2020
    Поэтому смысла в Nullable агрегатах нет
  • https://t.me/clickhouse_ru
    спс в целом уже подружили TS for Linux и TD for osx
  • тогда не за что :-)
  • @draev ↶ Reply to #146644 #146647 09:52 AM, 09 Mar 2020
    я использу argMax агрегат, и, по-хорошему, NULL может остаться, если в принципе поле Nullable и значений никогда там небыло 🙈
  • @LeOnId_VoLoShIn #146648 10:58 AM, 09 Mar 2020
    всем привет. хочу создать простую таблицу для записи данных но не могу понять какой движок использовать…
  • https://t.me/clickhouse_ru
    @387452444 #146649 11:03 AM, 09 Mar 2020
    MergeTree :)
  • https://t.me/clickhouse_ru
    @Sdmxx #146651 11:28 AM, 09 Mar 2020
    быстрый вопрос где и как установить значение max_bytes_before_external_group_by?
  • @dj_mixer #146652 11:37 AM, 09 Mar 2020
    /etc/clickhouse-server/users.xml

    Nu ili s zaprosom otpravit ili v kliente
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #146652 #146653 11:39 AM, 09 Mar 2020
    а можно ли установить это значение через ClickhouseDriver для java?
  • @dj_mixer #146654 11:43 AM, 09 Mar 2020
    Не пробовали
  • https://t.me/clickhouse_ru
    в jdbc можно, через ClickHouseQueryParam
  • по крайней мере в dbeaver можно задать в свойствах JDBC драйвера
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #146655 #146657 11:47 AM, 09 Mar 2020
    спасибо
  • https://t.me/clickhouse_ru
    @MashinaMashina #146659 12:13 PM, 09 Mar 2020
    Почему запрос читает все данные из таблицы, а не одну гранулу? Записи же хранятся по порядку event_time

    Таблица:
    CREATE TABLE events
    ...
    ORDER BY (user_id, event_name, event_time)

    Запрос:
    SELECT uuid, event_name, event_time FROM events WHERE event_name = 'new_user' AND user_id = 167 ORDER BY event_time DESC LIMIT 21
  • https://t.me/clickhouse_ru
    не доделано, пока надо писать так
    ORDER BY user_id DESC , event_time DESC
  • https://t.me/clickhouse_ru
    @den_crane #146661 12:18 PM, 09 Mar 2020
    тьфу ORDER BY user_id DESC, event_name DESC , event_time DESC
  • https://t.me/clickhouse_ru
    @den_crane #146662 12:18 PM, 09 Mar 2020
    как в таблице, КХ оптимизация сортировки не видит что в where строгое равенство по user_id, event_nam
  • https://t.me/clickhouse_ru
    Да, к этому и пришел сейчас. В таблице 800к записей, запрос чтобы получить 21 запись, читает 63к записей, для чего? index_granularity=1024
    SELECT
    uuid,
    event_name,
    event_time
    FROM events_dev
    WHERE event_name = 'new_user' AND user_id = 167
    ORDER BY
    user_id DESC,
    event_name DESC,
    event_time DESC
    LIMIT 21
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #146655 #146665 12:44 PM, 09 Mar 2020
    а какой параметр ограничивает CPU на каждый запрос?
  • @41196856 #146666 12:44 PM, 09 Mar 2020
    max_threads
  • https://t.me/clickhouse_ru
    @Sdmxx #146667 12:45 PM, 09 Mar 2020
    спасибо
  • https://t.me/clickhouse_ru
    вы с mysql не перепутали кликхауз?

    тут сразу читают вперед гигабайты, и запускают миллиадр параллельных потоков, чтобы быстрее 400млдр обмолотить

    set max_threads=1, max_block_size=1024
  • https://t.me/clickhouse_ru
    у меня по другому работает, у меня не один человек работает, как я понял у большинства, а сотни человек свои данные смотрят, у каждого по ~1-10кк записей, каждому графики надо
  • https://t.me/clickhouse_ru
    так нафига вам КХ ?
  • https://t.me/clickhouse_ru
    @den_crane #146671 01:05 PM, 09 Mar 2020
    КХ не для вас
  • https://t.me/clickhouse_ru
    возможно, нигде в доках нет про конкурентное использование, про одновременную работу с большим количеством пользователей. Поэтому не понятно как он себя поведет
  • https://t.me/clickhouse_ru
    @MashinaMashina #146673 01:09 PM, 09 Mar 2020
    кх это только про запросы, которые вызывают какое-то ограниченное количество раз, скажем в сутки?
  • https://t.me/clickhouse_ru
    что с set max_threads=1, max_block_size=1024
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #146666 #146675 01:10 PM, 09 Mar 2020
    а как узнать максимальное количество потоков в системе? у нас тут 64 ядра
  • https://t.me/clickhouse_ru
    @Sdmxx #146676 01:11 PM, 09 Mar 2020
    это сколько потоков?
  • https://t.me/clickhouse_ru
    А что в таком случае использовать?
    Или просто перед кх кеш для уже посчитанных данных юзать?
  • https://t.me/clickhouse_ru
    ну а зачем для запросов

    ORDER BY
    event_time DESC
    LIMIT 21

    КХ ? Тут кассандра просится
  • Lscpu
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #146679 #146680 01:13 PM, 09 Mar 2020
    а threads это какой параметр?
  • max_threads = по дефолту количество ядер
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #146681 #146682 01:14 PM, 09 Mar 2020
    все понял спасибо
  • https://t.me/clickhouse_ru
    так читает 7к строк
  • https://t.me/clickhouse_ru
    не знаю, может и вообще в постгрес потестить
  • https://t.me/clickhouse_ru
    нафиг вы КХ тогда взяли, если постгрес еще не проверяли?
    Конечно постгрес и mysql будут стрелять на таких запросах, там по индексу 21 строка будет обрабатываться
  • https://t.me/clickhouse_ru
    так запросы с 21 строкой они не частые, чаще подсчитать count(), avg() и так далее по записям, количество записей на один запрос около 1кк
  • https://t.me/clickhouse_ru
    @TrueCarry #146687 01:32 PM, 09 Mar 2020
    Ну если не часто, то и проблемы в целом нет что оно 63к записей читает. Это же мгновенно почти происходит.
  • https://t.me/clickhouse_ru
    там больше интересует для чего оно всё это читает, проблемы то особо нет, просто может я что-то не правильно делаю и можно не читать 63к записей
  • https://t.me/clickhouse_ru
    @MashinaMashina #146689 01:34 PM, 09 Mar 2020
    Если использовать обычные реляционные бд, тогда упираюсь в то, что столбиков много и чтения много соответственно. Долго идут запросы на count, avg и так далее, а они у меня в подавляющем большинстве
  • https://t.me/clickhouse_ru
    @MashinaMashina #146690 01:37 PM, 09 Mar 2020
    Ну и данных приходит много и постоянно они льются, транзакции не нужны
  • https://t.me/clickhouse_ru
    потому что много потоков читают по 65к записей
    поэтому нужен set max_threads=1, max_block_size=1024
  • https://t.me/clickhouse_ru
    вам надо использовать MV aggregatingMT чтобы не делать avg/ count даже в КХ
  • https://t.me/clickhouse_ru
    проблема в том, что каждый может себе графики настраивать как он хочет. Условия разные ставить. При том, что много самих пользователей.

    А materialized view это больше оптимизация каких-то конкретных частых запросов
  • тогда по умолчанию вам не придет 100500 конкуррентных запросов. Тюньте max_threads и все будет хорошо.
  • @dj_mixer #146695 02:11 PM, 09 Mar 2020
    при запросе типа
    SELECT blabla from myTable
    WHERE stringColumn like 'Domain=abc;SubDomain=444;SubSubDomain=221;%'

    почему может не использоваться индекс?
    у таблицы (order by stringColumn,) стоит.
  • https://t.me/clickhouse_ru
    почему вы думаете что не использует?

    что если перед запросом
    set force_primary_key=1
  • @dj_mixer #146697 02:23 PM, 09 Mar 2020
    вы правы, использует, force_primary_key не валит.
    но каким-то образом процессед все строки выдает, хотя на деле этот запрос возвращает только 278 строк из 188 миллионов
  • как-то так
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.037013 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Aggregated. 0 to 0 rows (from 0.000 MiB) in 5.736 sec. (0.000 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.038898 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Aggregated. 0 to 0 rows (from 0.000 MiB) in 5.736 sec. (0.000 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.038929 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Aggregated. 0 to 0 rows (from 0.000 MiB) in 5.736 sec. (0.000 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.038947 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Aggregated. 0 to 0 rows (from 0.000 MiB) in 5.736 sec. (0.000 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.038978 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Aggregated. 0 to 0 rows (from 0.000 MiB) in 5.736 sec. (0.000 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.039008 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Aggregated. 0 to 0 rows (from 0.000 MiB) in 5.736 sec. (0.000 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.039053 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Aggregated. 0 to 0 rows (from 0.000 MiB) in 5.736 sec. (0.000 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.039087 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Aggregated. 0 to 0 rows (from 0.000 MiB) in 5.736 sec. (0.000 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.039125 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Aggregated. 0 to 0 rows (from 0.000 MiB) in 5.736 sec. (0.000 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.039159 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Aggregated. 0 to 0 rows (from 0.000 MiB) in 5.736 sec. (0.000 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.039191 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Aggregated. 0 to 0 rows (from 0.000 MiB) in 5.736 sec. (0.000 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.039227 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> ParallelAggregatingBlockInputStream: Total aggregated. 278 rows (from 0.000 MiB) in 5.736 sec. (48.465 rows/sec., 0.000 MiB/sec.)
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.039263 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 56 ] <Trace> Aggregator: Merging aggregated data
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.039946 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 95 ] <Information> executeQuery: Read 186646528 rows, 41.65 GiB in 5.756 sec., 32428651 rows/sec., 7.24 GiB/sec.
    [V30LC-INCLKHSE1.PW.LOCAL] 2020.03.09 16:23:56.040006 {6b81bff0-7b1c-4a85-a57b-95ed78d4b932} [ 95 ] <Debug> MemoryTracker: Peak memory usage (for query): 83.45 MiB.
    Ok.

    0 rows in set. Elapsed: 5.757 sec. Processed 186.65 million rows, 44.73 GB (32.42 million rows/s., 7.77 GB/s.)
  • https://t.me/clickhouse_ru
    @den_crane #146699 02:27 PM, 09 Mar 2020
    а где начало? часть про сколько гранул будет прочитано
  • может КХ чего-то оптимизирует с LIKE на длинных строках?
  • https://t.me/clickhouse_ru
    @den_crane #146702 02:30 PM, 09 Mar 2020
    не знаю, возможно в индексе хранится строка не целиком, я не знаю
  • @dj_mixer #146703 02:31 PM, 09 Mar 2020
    ок, попробуем на коротких строках, спасибо
  • https://t.me/clickhouse_ru
    @den_crane #146704 02:33 PM, 09 Mar 2020
    5 parts by key, 22784 marks

    22784* 8192 = 186 646 528
  • https://t.me/clickhouse_ru
    @den_crane #146705 02:35 PM, 09 Mar 2020
    т.е. почему в 5 партах получилось 22784 марков, интересно сколько там всего марков
  • https://t.me/clickhouse_ru
    а случайно нет подчеркивания в строке которую ищем? like 'dsfdfg_fgdfgf;' ?
  • https://t.me/clickhouse_ru
    @den_crane #146707 02:38 PM, 09 Mar 2020
    _ это тоже символ wildcard, и его надо экранировать
  • ahh tochno :)
  • https://t.me/clickhouse_ru
    @den_crane #146709 02:39 PM, 09 Mar 2020
    семен семеныч
  • https://t.me/clickhouse_ru
    @den_crane #146710 02:39 PM, 09 Mar 2020
    телепатия
  • @dj_mixer #146711 02:39 PM, 09 Mar 2020
    простите за английский
  • @dj_mixer #146712 02:39 PM, 09 Mar 2020
    заблюрил, и даже там разглядели )
  • https://t.me/clickhouse_ru
    @den_crane #146713 02:41 PM, 09 Mar 2020
    хаха, нет, я угадал
  • https://t.me/clickhouse_ru
    @den_crane #146714 02:41 PM, 09 Mar 2020
    сейчас проверил и вправду видно _
  • https://t.me/clickhouse_ru
    @den_crane #146715 02:41 PM, 09 Mar 2020
    может я их подсознательно увидел и не понял сознанием
  • @dj_mixer #146716 02:44 PM, 09 Mar 2020
    и вот как в КХ это делать?
    ESCAPE '\'
    —>
    Syntax error: failed at position 245 (line 3, col 1): ESCAPE '\'
  • @dj_mixer #146717 02:46 PM, 09 Mar 2020
    есть опыт escaping в like? (помимо изменения данных в таблице =) )
  • https://t.me/clickhouse_ru
    @den_crane #146718 02:46 PM, 09 Mar 2020
    не надо ESCAPE, просто \ вроде
    select 'xxx_dd' like 'xxx\_%'
  • @dj_mixer #146719 02:46 PM, 09 Mar 2020
    Use the backslash (\) for escaping metasymbols.
  • @dj_mixer #146720 02:47 PM, 09 Mar 2020
    да, ок пробую
  • https://t.me/clickhouse_ru
    @den_crane #146723 02:53 PM, 09 Mar 2020
    SELECT 'xxx11' LIKE 'xxx\\_\\_'

    ┌─like('xxx11', 'xxx\\_\\_')─┐
    │ 0 │
    └────────────────────────────┘

    SELECT 'xxx__' LIKE 'xxx\\_\\_'

    ┌─like('xxx__', 'xxx\\_\\_')─┐
    │ 1 │
    └────────────────────────────┘
  • https://t.me/clickhouse_ru
    @den_crane #146724 02:55 PM, 09 Mar 2020
    бекслеш съедается парсером строк, его надо удваивать
  • https://t.me/clickhouse_ru
    @rclick #146725 03:11 PM, 09 Mar 2020
    Вчера у меня была проблема - КХ съедал всю память сервера, непрерывно молотил дисками и машинка моментально умирала. Вылечилось переносом всех партов одной подозрительной таблицы в детачед. Сегодня начал разбираться с ситуацией и пытаться все привести в чувства. Все парты, кроме одного подключились и нормально работают, а один, самый крупный - примерно 100гб подключить не удается - как только я его аттачу - возвращается вчерашняя ситуация - сервер съедает все ресурсы и машинка превращается в кирпич. Какие варианты восстановления данных мне стоит рассмотреть? Это ReplicatedReplacingMergeTree.
  • https://t.me/clickhouse_ru
    даунгрейдится
  • https://t.me/clickhouse_ru
    @rclick #146727 03:19 PM, 09 Mar 2020
    а как это можно сделать, что то не смог найти мануала, ставил из штатного репозитария яндекса
  • https://t.me/clickhouse_ru
    @den_crane #146728 03:19 PM, 09 Mar 2020
    разбираться на стейдже и оформлять тикет
  • https://t.me/clickhouse_ru
    обычно просто замена бинарника, но надо понимать в какую версию даунгрейд
  • https://t.me/clickhouse_ru
    @den_crane #146730 03:20 PM, 09 Mar 2020
    манула нет, потому что нечего описывать
  • https://t.me/clickhouse_ru
    @den_crane #146731 03:21 PM, 09 Mar 2020
    до mrk2 парты были совместимы
  • https://t.me/clickhouse_ru
    @rclick #146732 03:21 PM, 09 Mar 2020
    а где б найти бинарник более старой версии? :)
  • https://t.me/clickhouse_ru
    $ history |grep apt-get
    apt-get install clickhouse-server=20.2.1.2362 clickhouse-client=20.2.1.2362 clickhouse-common-static=20.2.1.2362
    apt-get install clickhouse-server=19.13.6.51 clickhouse-client=19.13.6.51 clickhouse-common-static=19.13.6.51
    apt-get install clickhouse-server=19.13.6.51 clickhouse-client=19.13.6.51 clickhouse-common-static=19.13.6.51
    apt-get install clickhouse-server=19.13.1.11 clickhouse-client=19.13.1.11 clickhouse-common-static=19.13.1.11
    apt-get install clickhouse-server=19.17.4.11 clickhouse-client=19.17.4.11 clickhouse-common-static=19.17.4.11
    apt-get install clickhouse-server=20.2.1.2362 clickhouse-client=20.2.1.2362 clickhouse-common-static=20.2.1.2362
    apt-get install clickhouse-server=19.1.6 clickhouse-client=19.1.6 clickhouse-common-static=19.1.6
    apt-get install clickhouse-server=19.1.6 clickhouse-client=19.1.6 clickhouse-common-static=19.1.6
    apt-get install clickhouse-server=20.2.1.2362 clickhouse-client=20.2.1.2362 clickhouse-common-static=20.2.1.2362
    apt-get install clickhouse-server=20.1.2.4 clickhouse-client=20.1.2.4 clickhouse-common-static=20.1.2.4
    apt-get install clickhouse-server=20.1.4.14 clickhouse-client=20.1.4.14 clickhouse-common-static=20.1.4.14
    apt-get install clickhouse-server=19.17.4.11 clickhouse-client=19.17.4.11 clickhouse-common-static=19.17.4.11
    apt-get install clickhouse-server=19.17.4.11 clickhouse-client=19.17.4.11 clickhouse-common-static=19.17.4.11
    apt-get install clickhouse-server=19.17.4.11 clickhouse-client=19.17.4.11 clickhouse-common-static=19.17.4.11
    apt-get install clickhouse-server=20.1.4.14 clickhouse-client=20.1.4.14 clickhouse-common-static=20.1.4.14
    apt-get install clickhouse-server=19.16.2.2 clickhouse-client=19.16.2.2 clickhouse-common-static=19.16.2.2
    apt-get install clickhouse-server=19.13.6.51 clickhouse-client=19.13.6.51 clickhouse-common-static=19.13.6.51
    apt-get install clickhouse-server=19.13.6.51 clickhouse-client=19.13.6.51 clickhouse-common-static=19.13.6.51
    apt-get install clickhouse-server=19.4.5.35 clickhouse-client=19.4.5.35 clickhouse-common-static=19.4.5.35
    apt-get install clickhouse-server=19.4.5.35 clickhouse-client=19.4.5.35 clickhouse-common-static=19.4.5.35
    apt-get install clickhouse-server=18.14.19 clickhouse-client=18.14.19 clickhouse-common-static=18.14.19
    apt-get install clickhouse-server=18.14.19 clickhouse-client=18.14.19 clickhouse-common-static=18.14.19
    apt-get install clickhouse-server=19.17.4.11 clickhouse-client=19.17.4.11 clickhouse-common-static=19.17.4.11
    apt-get install clickhouse-server=19.17.4.11 clickhouse-client=19.17.4.11 clickhouse-common-static=19.17.4.11
    apt-get install clickhouse-server=20.1.2.4 clickhouse-client=20.1.2.4 clickhouse-common-static=20.1.2.4
    apt-get install clickhouse-server=20.2.1.2362 clickhouse-client=20.2.1.2362 clickhouse-common-static=20.2.1.2362
    apt-get install clickhouse-server=19.17.9.60 clickhouse-client=19.17.9.60 clickhouse-common-static=19.17.9.60
    apt-get install clickhouse-server=20.2.1.2362 clickhouse-client=20.2.1.2362 clickhouse-common-static=20.2.1.2362
    apt-get install clickhouse-server=19.17.9.60 clickhouse-client=19.17.9.60 clickhouse-common-static=19.17.9.60
  • https://t.me/clickhouse_ru
    @rclick #146734 03:28 PM, 09 Mar 2020
    а может быть есть какие то настройки, которые стоит покрутить, такие, что могли бы ограничить апптеиты по памяти при опреациях мерджа?
  • https://t.me/clickhouse_ru
    @rclick #146735 03:29 PM, 09 Mar 2020
    спасибо за версии, сейчас попробую накатить что то более старое
  • https://t.me/clickhouse_ru
    сначала надо понять почему поведение изменилось, а потом уже крутить
  • https://t.me/clickhouse_ru
    @rclick #146737 03:45 PM, 09 Mar 2020
    хронология примерно такая - стояла версия 20.1.3.7 относительно недавно, наверно то то в духе месяца, никаких проблем не было, 07.03 поставил 20.1.6.30, 08.03 в середине дня появилась эта аномалия - два сервера (реплики), которые несут таблицу ушли в бешеную загрузку и перестали откликаться хоть как то. спустя какое то время получилось стопнуть КХ, по советам в чате перенес данные в детачед, поднялось и работает. Конечно возможно, что виновата не версия КХ, а какие то особенные данные, например, которые могли налиться 8го утром или 7го вечером, но доподлинно этого проверить никак не могу
  • https://t.me/clickhouse_ru
    @rclick #146738 03:47 PM, 09 Mar 2020
    наверно логично сейчас поставить 20.1.3.7 и приаттачить данные обратно, но что то волнительно
  • https://t.me/clickhouse_ru
    @den_crane #146739 03:51 PM, 09 Mar 2020
    я думаю не будет никаких проблем с даунгрейдом в 20.1.3.7
  • https://t.me/clickhouse_ru
    @den_crane #146740 03:52 PM, 09 Mar 2020
    скорее всего длинные строки кто-то закинул, мегабайт по 100 в тех партах
  • https://t.me/clickhouse_ru
    @den_crane #146741 03:52 PM, 09 Mar 2020
    мерж можно отключить system stop merges table
  • https://t.me/clickhouse_ru
    @den_crane #146742 03:52 PM, 09 Mar 2020
    (временно)
  • https://t.me/clickhouse_ru
    @den_crane #146743 03:53 PM, 09 Mar 2020
    и спокойно смотреть на тот парт на стейдже
  • https://t.me/clickhouse_ru
    @den_crane #146744 03:53 PM, 09 Mar 2020
    та настройка которую вам предалгали вчера скорее всего должна помочь
  • https://t.me/clickhouse_ru
    @den_crane #146745 03:53 PM, 09 Mar 2020
    можно поставить например 128
  • https://t.me/clickhouse_ru
    @rclick #146746 03:53 PM, 09 Mar 2020
    я вчера пытался ее нагуглить и как то не нашел ничего толкового и вразумительного
  • https://t.me/clickhouse_ru
    @den_crane #146747 03:54 PM, 09 Mar 2020
    чтобы КХ стримил при мерже по 128 строк
  • https://t.me/clickhouse_ru
    @den_crane #146748 03:55 PM, 09 Mar 2020
    как она называется? мне лень отматывать чат
  • https://t.me/clickhouse_ru
    @rclick #146749 03:55 PM, 09 Mar 2020
    merge_max_block_size
  • https://t.me/clickhouse_ru
    @den_crane #146751 03:56 PM, 09 Mar 2020
    Короче КХ читает парты, которые мержит в память в буфер размером merge_max_block_size
  • https://t.me/clickhouse_ru
    @den_crane #146752 03:56 PM, 09 Mar 2020
    он в строках
  • https://t.me/clickhouse_ru
    @den_crane #146753 03:56 PM, 09 Mar 2020
    по умолчанию 8192
  • https://t.me/clickhouse_ru
    @den_crane #146754 03:56 PM, 09 Mar 2020
    - merge_max_block_size — Maximum number of rows in block for merge operations. Default value: 8192.
  • https://t.me/clickhouse_ru
    @den_crane #146755 03:56 PM, 09 Mar 2020
    я бы поставил 128 чтобы проверить
  • https://t.me/clickhouse_ru
    @den_crane #146756 03:57 PM, 09 Mar 2020
    сколько колонок в таблице? больше 11 ?
  • https://t.me/clickhouse_ru
    @rclick #146757 03:57 PM, 09 Mar 2020
    я правильно понимаю, что ее указываю в конфиге, в секции merge_tree?
  • https://t.me/clickhouse_ru
    @rclick #146758 03:57 PM, 09 Mar 2020
    да, больше 11, 14 столбов
  • https://t.me/clickhouse_ru
    да
  • https://t.me/clickhouse_ru
    @rclick #146760 04:00 PM, 09 Mar 2020
    спасибо, буду пробовать
  • блин, я тут час бился и тоже пришел к этому выводу, только сейчас увидел сообщение )

    в общем все хорошо, спасибо!

    0 rows in set. Elapsed: 0.011 sec. Processed 40.96 thousand rows, 12.59 MB (3.58 million rows/s., 1.10 GB/s.)
  • @lucifron31 #146762 04:28 PM, 09 Mar 2020
    Всем привет! Подскажите какой ширины можно делать таблицы в CH чтоб не было деградации скорости. Интересуют примерные максимальные значения.
  • https://t.me/clickhouse_ru
    кол-во колонок?
  • https://t.me/clickhouse_ru
    @den_crane #146764 04:29 PM, 09 Mar 2020
    до 1000
  • @lucifron31 #146766 04:29 PM, 09 Mar 2020
    Да
  • https://t.me/clickhouse_ru
    @den_crane #146767 04:29 PM, 09 Mar 2020
    каждая колонка это два файла на диске
  • https://t.me/clickhouse_ru
    @den_crane #146768 04:29 PM, 09 Mar 2020
    каждая колонка это 2MB памяти при инсерте
  • @lucifron31 #146769 04:30 PM, 09 Mar 2020
    С 1000 колонок будет драка за диск?
  • @lucifron31 #146770 04:30 PM, 09 Mar 2020
    При чтении
  • https://t.me/clickhouse_ru
    @den_crane #146771 04:30 PM, 09 Mar 2020
    будет запись 2тыс файлов при инсерте, это 2000-3000 random seek
  • https://t.me/clickhouse_ru
    @den_crane #146772 04:31 PM, 09 Mar 2020
    При чтении КХ не читает колонки которые не просили
  • https://t.me/clickhouse_ru
    @den_crane #146773 04:31 PM, 09 Mar 2020
    если читать select * -- то естественно тоже будет 2000-3000 random seek и плюс огромный расход памяти на буфера
  • @lucifron31 #146774 04:32 PM, 09 Mar 2020
    Без * допустим только агрегации и пара столбцов в чистом виде по которым группировка
  • https://t.me/clickhouse_ru
    тогда ок
  • https://t.me/clickhouse_ru
    apt-cache madison clickhouse-server
    apt-cache show clickhouse-server=<version> | egrep '^(Depends|Suggests):'
  • https://t.me/clickhouse_ru
    @den_crane #146777 04:49 PM, 09 Mar 2020
    ?
  • @goosecat #146778 05:13 PM, 09 Mar 2020
    ?
  • https://t.me/clickhouse_ru
    @igor_dia #146779 05:54 PM, 09 Mar 2020
    Всем привет! Какая версия КХ сейчас считается достаточно стабильной и без багов? Ну чтоб не было как с 19.10
  • https://t.me/clickhouse_ru
    @igor_dia #146780 05:59 PM, 09 Mar 2020
    20.1.6.3 - норм?
  • https://t.me/clickhouse_ru
    @nyoroon #146781 06:00 PM, 09 Mar 2020
    Последний LTS - 19.14
  • https://t.me/clickhouse_ru
    @igor_dia #146782 06:11 PM, 09 Mar 2020
    спасибо
  • https://t.me/clickhouse_ru
    20 не надо, адский глюкодром, такого еще не было.
  • https://t.me/clickhouse_ru
    вообще все версии глючат?
  • https://t.me/clickhouse_ru
    у меня все
  • https://t.me/clickhouse_ru
    @biochemicalcake #146786 06:13 PM, 09 Mar 2020
    мы юзаем 19.16.2.2, пробовали какую то двадцатаю - запросы, которые работали 300мс стали работать около секунды
  • https://t.me/clickhouse_ru
    @biochemicalcake #146787 06:13 PM, 09 Mar 2020
    откатились
  • https://t.me/clickhouse_ru
    такое надо репортить. Т.е. возможно это специфчно ваша проблема, и ее никогда не починят, пока вы не расскажете.
  • https://t.me/clickhouse_ru
    @biochemicalcake #146789 06:16 PM, 09 Mar 2020
    чтобы репортить, надо сведения собрать, в целом то идея неплохая
    как будет свободное - соберу информацию
  • @160933359 #146790 07:17 PM, 09 Mar 2020
    Joined.
  • @1142859781 #146791 07:56 PM, 09 Mar 2020
    Joined.
  • @fs_fs_fs_fs #146792 09:05 PM, 09 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    maxOrNull

    SELECT 'maxState(toNullable(10))', toTypeName(maxOrNullState(toNullable(10)))

    SELECT
    'maxState(toNullable(10))',
    toTypeName(maxOrNullState(toNullable(10)))

    ┌─'maxState(toNullable(10))'─┬─toTypeName(maxOrNullState(toNullable(10)))─┐
    │ maxState(toNullable(10)) │ AggregateFunction(maxOrNull, UInt8) │
    └────────────────────────────┴────────────────────────────────────────────┘

    https://github.com/ClickHouse/ClickHouse/pull/7331

    ClickHouse release v19.16.2.2, 2019-10-30
    Add aggregate function combinators -OrNull and -OrDefault, which return null or default values when there is nothing to aggregate. #7331 (hcz)
  • https://t.me/clickhouse_ru
    CH тут ни при чем.

    Т.е. CH позволяет сделать идемпотентую операцию -- ретрай на replicated таблицах.
    Т.е. если сможете сделать exactly once до КХ, то дальше просто повторы инстертов, т.е. наверное можно сдлеать через запись метаинфы в дополнительный топик, и комитить брокером в кафку разом и новые офсеты и этот доплнительный топик. И тогда прочитав успех из топика вы будете знать, что можно полить дальше, правда есть тонкость что надо делать абсолютно такие же блоки insert-в, и как это сделать с кафкой без промежуточного стора, непонятно
  • 10 March 2020 (397 messages)
  • @denis_skalkin #146795 01:46 AM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @patsevanton #146797 04:42 AM, 10 Mar 2020
    MemoryMax в systemd
  • @dosereda #146798 05:11 AM, 10 Mar 2020
    Доброе утро, я решил самостоятельно построить график из данных, сейчас делаю следующее:
    SELECT
    toHour(EventTime) AS time,
    LogLevel,
    count() AS count
    FROM
    db.logs
    WHERE
    EventTime >= toDateTime('${args.starteventtime}') AND EventTime < toDateTime('${args.endeventtime}')
    GROUP BY
    time, LogLevel
    ORDER BY
    time ASC
    запрос работает, в нем значения разбиваются по часам, но, проблема наступает когда в диапазон дат попадает от 2 дней и более ( происходит наложение, так как часы в дате одинаковы ), собственно вопрос - как разбить значения по времени ( допустим по промежуткам в 20 минут ), так, чтобы при этом учитывались даты, а не только время.
    Ну выходе ожидаю график со значениями timestamp.
    Подсмотрел аналогичное в Grafana, но, там много преобразований в unixtime, предполагаю, что есть иной и более простой вариант.
  • https://t.me/clickhouse_ru
  • @dosereda #146800 05:15 AM, 10 Mar 2020
    Спасибо, буду пробовать.
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #146788 #146801 05:34 AM, 10 Mar 2020
    Не подскажете что значит ошибка в clickhouseJDBC "Not enough space for external aggregation in /var/tmp/" ?
  • https://t.me/clickhouse_ru
    хм, возможно это не JDBC related проблема ;) почему решили что это именно JDBC а не ошибка которая с сервера пришла?
    на сервере то есть место свободное?
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #146802 #146803 05:45 AM, 10 Mar 2020
    Так я на сервер ничего не выгружал это просто select запрос бы
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #146802 #146804 05:46 AM, 10 Mar 2020
    Возможно я просто указал на источник
  • написано же, external aggregation.
    у вас скорее всего происходит external group by (из-за того, что не лезет в память до max_bytes_before_external_group_by), а места для него в /var/tmp не хватает...
  • @dj_mixer #146806 05:50 AM, 10 Mar 2020
    запускайте запрос в командной строке, и смотрите трейс, чего и сколько читается, если с местом очень туго
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #146805 #146807 05:50 AM, 10 Mar 2020
    аа типо если оперативки не хватает он использует эту папку как буффер и она перегружается?
  • @dj_mixer #146808 05:51 AM, 10 Mar 2020
    max_bytes_before_external_group_by - у вас выставлен параметр. если в эту память не влезают сырые данные для группировки, оно будет делать кусками периодически складывая на диск (т.н. "спилл")
  • https://t.me/clickhouse_ru
    @Sdmxx ↶ Reply to #146808 #146809 05:53 AM, 10 Mar 2020
    А как поменять папку в которую он спиливает?
  • https://t.me/clickhouse_ru
    @Sdmxx #146810 05:53 AM, 10 Mar 2020
    он выбрал папку в которую мало места отведено
  • https://t.me/clickhouse_ru
    @Sdmxx #146815 05:54 AM, 10 Mar 2020
    спасибо) помогли очень)
  • https://t.me/clickhouse_ru
    @demty #146816 07:11 AM, 10 Mar 2020
    Joined.
  • @125427421 #146817 07:28 AM, 10 Mar 2020
    всем привет
  • @125427421 #146818 07:29 AM, 10 Mar 2020
    есть какая-то странная проблема, при группировке данных через distributed таблицу Clickhouse не группирует данные с сервера на который я отправляю запрос
  • @125427421 #146819 07:29 AM, 10 Mar 2020
    v20.1.2.4
  • @125427421 #146821 07:31 AM, 10 Mar 2020
    если выполнять запрос на каждом сервере без dist таблицы, то кол-во записей возвращает правильное
  • @125427421 #146822 07:31 AM, 10 Mar 2020
    если через distributed, то сервер с которого инициирован запрос почему-то выпадает
  • @125427421 #146823 07:31 AM, 10 Mar 2020
    его какбудто нет
  • @125427421 #146824 07:32 AM, 10 Mar 2020
    это я что-то делают не так или какое-то ошибочное поведение CH ?
  • @Shazo_Rus #146825 07:36 AM, 10 Mar 2020
    Из простых моментов, а сервер перечислен в кластере, который используется для distriubuted таблицы?
  • https://t.me/clickhouse_ru
    @rclick ↶ Reply to #146522 #146826 07:39 AM, 10 Mar 2020
    Спасибо, похоже что понижение этой переменной спасло, все заработало.
  • у меня на одной группе серверов два кластера, один с репликой другой без
  • show create table zones_norepl.xxxx_dist? какой он кластер использует
  • @125427421 #146830 07:42 AM, 10 Mar 2020
    cl-fi-01 :) show create table zones_norepl.xxxx_dist \G

    SHOW CREATE TABLE zones_norepl.xxxx_dist

    Row 1:
    ──────
    statement: CREATE TABLE zones_norepl.xxxx_dist (date Date, zone String, name String, puny String, hash FixedString(64)) ENGINE = Distributed(zones_norepl, zones_norepl, xxxx, rand())

    1 rows in set. Elapsed: 0.001 sec.
  • https://t.me/clickhouse_ru
    @rclick ↶ Reply to #146822 #146831 07:42 AM, 10 Mar 2020
    у меня было подобное же на одной из версий КХ, спасла магия с настройками в рамках запроса, но что именно делал не помню, после апдейта на другую версию КХ все решилось само
  • какая у вас версия КХ?
  • вот эта
  • @Ivanuska #146834 07:47 AM, 10 Mar 2020
    Добрый день, меня интересует вопрос по clickhouse-copier
    На сколько я понял он не умеет работать с таблицами содержащими materialized колонки? Или существует способ обойти это ограничение?

    Типичная ошибка выглядит так:
    2020.03.10 07:42:16.738173 [ 5 ] {} <Error> ClusterCopier: Will retry: Code: 47, e.displayText() = DB::Exception: Missing columns: 'dt' while processing query: 'SELECT DISTINCT (dt, job_id) AS partition FROM _local.`.read_shard_0.destination_cluster.<schema>.<table>` ORDER BY partition DESC', required columns: 'dt' 'job_id', source columns: 'vals' 'job_id' 'ts' '_shard_num' 'cnt' 'event_name' 'keys', Stack trace:

    Колонка dt конечно же существует: dt Date materialized toDate(ts)
  • @draev ↶ Reply to #146793 #146835 07:50 AM, 10 Mar 2020
    Спасибо большое за ответ. Столкнулся с другой проблемой, что argMaxOrNullState не работает :(
  • а уточните версию?
  • https://t.me/clickhouse_ru
    @rclick #146837 07:55 AM, 10 Mar 2020
    у меня тут в последнее время было несколько накатываний-откатываний, так что не смогу точно сказать, что то из 20.x
  • https://t.me/clickhouse_ru
    @igor_dia #146838 08:02 AM, 10 Mar 2020
    А какие могут подводные камни с тем, чтобы писать логи из микросервисов в КХ? Обязана ли быть для этого кафка в качестве буфера? Или если есть 10 приложений, которые сами могут аггрегировать свои логи и отправлять батчами, то промежуточный буфер не нужен? Получится суммарно около 60000 строк в минуту
  • https://t.me/clickhouse_ru
    Fluentd в качестве агрегатора вполне справляется с ~10млн строк в минуту
    Не совсем логи, длина строки прям небольшая
    Но вполне работает и переживает кратковременные падения/рестарты КХ
  • https://t.me/clickhouse_ru
    А как он там таблицы создает и как реагирует на изменение формата логов?
  • https://t.me/clickhouse_ru
    Clickhouse

    Deliver log data to the Clickhouse database

  • https://t.me/clickhouse_ru
    @igor_dia #146842 08:14 AM, 10 Mar 2020
    А если он их там не создает и не следит за форматом, то почему не проще прямо в коде приложения аггрегировать логи?
  • https://t.me/clickhouse_ru
    @pomazanbohdan #146843 08:15 AM, 10 Mar 2020
    Но для логов может лучше использовать loki?
  • https://t.me/clickhouse_ru
    @pomazanbohdan #146844 08:16 AM, 10 Mar 2020
    Раз вопрос стоит в широте формата логов).
  • https://t.me/clickhouse_ru
    а если у вас много приложений?
  • https://t.me/clickhouse_ru
    то тогда EFK
  • https://t.me/clickhouse_ru
    Таблицы руками, стараемся исходную строку сохранить как была и из неё растаскиваем через материализованные поля
    При изменении полей или способа их вытягивания - гоним альтеры, иногда очень долго.
    Задача немного странная - снапшоты системных таблиц постгреса сливаем в КХ и потом считаем дельты по счётчикам.
  • https://t.me/clickhouse_ru
    @AlexanderIvanovV #146848 08:21 AM, 10 Mar 2020
    Joined.
  • Ребят вопрос решен !

    set prefer_localhost_replica=0
  • А у вас все в порядке с репликацией? Обычно этот параметр для использования всех реплик
  • у меня одна группа серверов в которой есть кластер с репликой и без. может из-за этого?
  • @125427421 #146852 08:25 AM, 10 Mar 2020
    я выше показывал конфиг
  • вот
  • @dj_mixer #146854 08:26 AM, 10 Mar 2020
    Ну вы просто каждый хост проверьте на количество и сравните совпадают ли реплики
  • https://t.me/clickhouse_ru
    @cargeh #146855 08:52 AM, 10 Mar 2020
    uncategorized SQLException for SQL [select ExpressionData.geneId, ExpressionData.expressionLevel from ExpressionData ExpressionData inner join RunRecord RunRecord on ExpressionData.runId = RunRecord.runId]

    e.displayText() = DB::Exception: Logical error: unknown combination of JOIN

    ЧЯДНТ?
  • @myoldloverock #146856 09:02 AM, 10 Mar 2020
    Доброго времени суток камрады, подскажите пожалуйста , есть сервера с установленным CH, хочу собрать кластер, установка zookeeper обязательна?
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #146856 #146857 09:03 AM, 10 Mar 2020
    а кто будет кластером управлять?
  • я просто идеологию понять не могу =( так как только с репликами в postgres сталкивался а тут задачка прилетела
  • а писать получается надо будет чрезе zookeeper?
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #146858 #146860 09:05 AM, 10 Mar 2020
    если "на пальцах" то зукипер нужен, что бы каждая нода кластера, знала, где остальные и как с ними общаться.
  • у меня тогда еще 1 вопрос, а если разрабы пишут в clickhouse через kittenhouse, т.е. zookeeper увидет изменения и пнет второго чтоб тот данные догнал?
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #146859 #146862 09:07 AM, 10 Mar 2020
    думаю нужно покурить маны чуть глубже, и разобраться в вопросе, ибо вариантов архитектурных решений - вагон и мааленькая тележка, и какой нужен конкретно для Вашего решения - знать можете только Вы
  • https://t.me/clickhouse_ru
    @eXtern1985 #146863 09:08 AM, 10 Mar 2020
    Joined.
  • @viphunter_real #146864 09:08 AM, 10 Mar 2020
    Привет! Кто нить может скинуть нормальный док на настройки юзверей в КХ? Просто интересно какого хрена я вставляя в нераспределенную таблицу юзером ххх должен где-то определить пароль к дефолтному юзеру? Что за дизайн?
  • https://t.me/clickhouse_ru
    С добрым утром (ну или доброго дня у кого какой пояс часовой).
    Если совсем простым языком - зукипер нужен для репликации. Приписываешь к ENGINE таблицы Replicated, указываешь путь в ЗК и номер реплики при создании таблицы, на этом и остальных хостах такие же таблички начинают друг в друга реплицировать. Не указываешь Replicated - не пользуешься репликацией - ЗК не нужен.
  • https://t.me/clickhouse_ru
    @floxard #146866 09:09 AM, 10 Mar 2020
    В зк руками писать ничего не нужно
  • Спасибо большое! пойду дальше курить маны и пробовать разобраться)
  • https://t.me/clickhouse_ru
    Легко...
    https://clickhouse.tech/docs/ru/operations/access_rights/
    )
  • Пока не зазбоит база
  • Фигня. Это все фейк. Поставь пароли - сам увидишь
  • https://t.me/clickhouse_ru
    @floxard #146871 09:11 AM, 10 Mar 2020
    А если попробовать всё таки почитать? )
  • https://t.me/clickhouse_ru
    @floxard #146872 09:11 AM, 10 Mar 2020
    If you want to specify SHA256, place it in 'password_sha256_hex' element.
    Example: <password_sha256_hex>65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5</password_sha256_hex>
  • @viphunter_real #146873 09:15 AM, 10 Mar 2020
    Может я похож на идиота, но я внимательно прочитал. А вы внимательно прочитали вопрос? У меня как минимум 2 юзверя - один по умолчанию а второй нет. У каждого свой пароль. Когда оставляешь 3 этажный реквест со вторым юзверем в таблицу на движке MergeTree у меня выскакивает эксепшен, что надо определить пароль для дефолтного
  • @viphunter_real #146874 09:16 AM, 10 Mar 2020
    Что за нах? Вот ищу нормальные настройки для продвинутых, а не
    Базовый док
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #146874 #146875 09:17 AM, 10 Mar 2020
    а нет больше никаких доков, кроме этого.
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #146873 #146876 09:17 AM, 10 Mar 2020
    Пользователь, который используется для обмена информацией между серверами, объединенными в кластер, не должен иметь существенных ограничений или квот - иначе распределённые запросы сломаются.
  • @viphunter_real #146877 09:18 AM, 10 Mar 2020
    Сервер один движок MergeTree на мне по умолчанию?
  • https://t.me/clickhouse_ru
    @qwblnp #146878 09:18 AM, 10 Mar 2020
    проверьте, Ваш юзверь, от которого шлете реквест трехэтажный, не ограничен ли правами?
  • @viphunter_real #146879 09:18 AM, 10 Mar 2020
    Он покруче по умолчанию етл все-таки
  • @viphunter_real #146881 09:40 AM, 10 Mar 2020
    Пост мортем если кому интересно: @milovidov_an например. Вообще пароли повесил на словари, а так же query_log и query_thread_log. И заработало. Хорошо бы улучшить док по защите КХ. А то впечатление, что база работает нормально только без паролей...
  • https://t.me/clickhouse_ru
    @ig_tk #146882 10:06 AM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    В каком смысле?
  • https://t.me/clickhouse_ru
    вообще никто ничего не понял поэтому никому не интересно, подземный стук у вас короче.
  • А что именно не понятно? Отсуствие полной документации по работе с защищеннвм КХ? У меня сложилось четкое впечатление, что защита кликхауза не является приоритетом.
  • а почему она должна быть приоритетом 🤓
  • @viphunter_real #146888 10:57 AM, 10 Mar 2020
    есть разные куски документаций, но вот полной документации по настройке нет. Хорошо было бы сделать настройку как сделана документация на селект
  • @dj_mixer #146889 10:57 AM, 10 Mar 2020
    а вот селект - приоритет. без него сложно пользоваться )))
  • https://t.me/clickhouse_ru
    мне непонятно какая ошбка была и почему
  • https://t.me/clickhouse_ru
    @den_crane #146891 10:58 AM, 10 Mar 2020
    Я готов документировать и оформить багу если есть
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #146890 #146892 10:58 AM, 10 Mar 2020
    до изменения сообщения было лучше XD
  • https://t.me/clickhouse_ru
    @den_crane #146893 10:58 AM, 10 Mar 2020
    Непонятно что это было
  • у кого были проблемы с Lost connection to MySQL server at 'sending authentication information' на версиях 20.1.3.Х, сообщаю что после обновы до 20.1.6.30 проблемы пропали, надеюсь починили
  • Ошибка была такова: если есть активирование логов, то надо определать юзера и пароль для логов иначе все сложные реквесты с отличного от дефолтного защищенного юзера будут фэйлится с дурацким сообщением о том, что надо пароль дефолтного юзера. Кстати есть гипотеза (не проверенная мной), но если юзер не прописан в активированых логах,но имеет такой же пароль, что и дефолтный юзер, то все прокатывает нормально. Так яснее?
  • https://t.me/clickhouse_ru
    @iolebedev #146896 11:11 AM, 10 Mar 2020
    Товарищи, подскажите, пожалуйста.
    Есть таблица в КХ, там есть дубли строк - полные дубли, включая sorting key.
    Общий размер таблицы 1-20 миллионов строк. Количество дублей: до 100 тыс строк всего, в их числе строки, которые повторяются 2-3 раза.
    Как вычистить?

    Проблема в том, что я не могу никак таргетировать запрос на конкретную строку из числа дублированных строк - у них идентичные ВСЕ атрибуты. Какой бы критерий я не придумал - он затронет все дубли.

    Единственное, что приходит в голову - написать запрос SELECT во временную чистую таблицу, сделать группировку ПО ВСЕМ полям. Тогда все дубли схлопнутся и будет выборка по 1 уникальной копии. Ну и потом в оригинале удалить все строки, чьи айдюки есть во временной и перенести назад.

    Есть ли проще решения?
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #146896 #146897 11:14 AM, 10 Mar 2020
    select distinct ?
  • https://t.me/clickhouse_ru
    В доке у https://clickhouse.tech/docs/en/query_language/misc/#misc_operations-optimize описано волшебное слово DEDUPLICATE, но
    1) никогда не пользовался, поэтому неточно
    2) если дубли на разных шардах, то точно не поможет
    3) наверное совсем всё оно не схлопнет, но тут см. пункт 1
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #146896 #146899 11:14 AM, 10 Mar 2020
    как вариант select any(value)
  • https://t.me/clickhouse_ru
    Если указать DEDUPLICATE, то произойдет схлопывание полностью одинаковых строк (сравниваются значения во всех колонках), имеет смысл только для движка MergeTree.
  • https://t.me/clickhouse_ru
    Движок какой у таблицы?
  • https://t.me/clickhouse_ru
    MergeTree классик :)
  • https://t.me/clickhouse_ru
    20млн. Просто переложить в новую таблицу с insert select distinct *
  • https://t.me/clickhouse_ru
    @den_crane #146904 11:30 AM, 10 Mar 2020
    Или optimize final deduplicate
  • https://t.me/clickhouse_ru
    @iolebedev #146905 11:31 AM, 10 Mar 2020
    а distinct * будет относиться ко всем полям? Ну то есть будет иметься в виду уникальные сеты значений?
  • https://t.me/clickhouse_ru
    Ко всем
  • https://t.me/clickhouse_ru
    попробуем решение DEDUPLICATE, о результатах расскажу
  • @fs_fs_fs_fs #146908 11:33 AM, 10 Mar 2020
    Коллеги всем привет.
    Возможно кто-то сталкивался и сможет проконсультировать.
    Есть КХ который развернут в docker swarm с явным указанием сетки.
    Так же рядом в контейнере развернут clickhouse-jdbc (в той же сети что и КХ).
    В конфиге КХ jdbc прописан (по DNS имени контейнера jdbc)
    Проблема в том что КХ в упор не видит jdbc
    DB::Exception: jdbc-bridge is not running. Please, start it manually (version 19.17.2.4 (official build))
    При этом изнутри КХ контейнера я без проблем как пингую так и коннекчусь телнетом на порт jdbc контейнера.
    Вроде конфигурация проста до безобразия, а не заводится.
    Маякните если нужны скрины каких-либо конфигов. А то не хочу простыню сразу писать.
    Заранее спасибо.
  • https://t.me/clickhouse_ru
    Нет не понятно. Кто нибудь может объснить ?
  • https://t.me/clickhouse_ru
    Там в доке вроде написано что curl-м надо проверять, и что в трейсах в логе кх?
  • @fatal1ty73 #146911 11:39 AM, 10 Mar 2020
    Joined.
  • 0. 0x55b21a74ec40 StackTrace::StackTrace() /usr/bin/clickhouse
    1. 0x55b21a74ea15 DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) /usr/bin/clickhouse
    2. 0x55b21d86e068 DB::XDBCBridgeHelper<DB::JDBCBridgeMixin>::startBridgeSync() const /usr/bin/clickhouse
    3. 0x55b21d86aab2 DB::ITableFunctionXDBC::executeImpl(std::shared_ptr<DB::IAST> const&, DB::Context const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/clickhouse
    4. 0x55b21e0712e6 DB::ITableFunction::execute(std::shared_ptr<DB::IAST> const&, DB::Context const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/clickhouse
    5. 0x55b21daa5036 DB::Context::executeTableFunction(std::shared_ptr<DB::IAST> const&) /usr/bin/clickhouse
    6. 0x55b21db0fb77 DB::InterpreterSelectQuery::InterpreterSelectQuery(std::shared_ptr<DB::IAST> const&, DB::Context const&, std::shared_ptr<DB::IBlockInputStream> const&, std::shared_ptr<DB::IStorage> const&, DB::SelectQueryOptions const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) /usr/bin/clickhouse
    7. 0x55b21db0fe07 DB::InterpreterSelectQuery::InterpreterSelectQuery(std::shared_ptr<DB::IAST> const&, DB::Context const&, DB::SelectQueryOptions const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) /usr/bin/clickhouse
    8. 0x55b21db33668 DB::InterpreterSelectWithUnionQuery::InterpreterSelectWithUnionQuery(std::shared_ptr<DB::IAST> const&, DB::Context const&, DB::SelectQueryOptions const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) /usr/bin/clickhouse
    9. 0x55b21e33420f DB::StorageView::read(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, DB::SelectQueryInfo const&, DB::Context const&, DB::QueryProcessingStage::Enum, unsigned long, unsigned int) /usr/bin/clickhouse
    10. 0x55b21db271a9 void DB::InterpreterSelectQuery::executeFetchColumns<DB::InterpreterSelectQuery::Pipeline>(DB::QueryProcessingStage::Enum, DB::InterpreterSelectQuery::Pipeline&, std::shared_ptr<DB::SortingInfo> const&, std::shared_ptr<DB::PrewhereInfo> const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) /usr/bin/clickhouse
    11. 0x55b21db2ee39 void DB::InterpreterSelectQuery::executeImpl<DB::InterpreterSelectQuery::Pipeline>(DB::InterpreterSelectQuery::Pipeline&, std::shared_ptr<DB::IBlockInputStream> const&) /usr/bin/clickhouse
    12. 0x55b21db10bd5 DB::InterpreterSelectQuery::executeWithMultipleStreams() /usr/bin/clickhouse
    13. 0x55b21db30be3 DB::InterpreterSelectWithUnionQuery::executeWithMultipleStreams() /usr/bin/clickhouse
    14. 0x55b21db32748 DB::InterpreterSelectWithUnionQuery::execute() /usr/bin/clickhouse
    15. 0x55b21dc34dce ? /usr/bin/clickhouse
    16. 0x55b21dc36383 DB::executeQuery(DB::ReadBuffer&, DB::WriteBuffer&, bool, DB::Context&, std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>, std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>) /usr/bin/clickhouse
    17. 0x55b21a7e312e DB::HTTPHandler::processQuery(Poco::Net::HTTPServerRequest&, HTMLForm&, Poco::Net::HTTPServerResponse&, DB::HTTPHandler::Output&) /usr/bin/clickhouse
  • 18. 0x55b21a7e54a9 DB::HTTPHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&) /usr/bin/clickhouse
    19. 0x55b21e6d4219 Poco::Net::HTTPServerConnection::run() /usr/bin/clickhouse
    20. 0x55b21e6d0790 Poco::Net::TCPServerConnection::start() /usr/bin/clickhouse
    21. 0x55b21e6d0ead Poco::Net::TCPServerDispatcher::run() /usr/bin/clickhouse
    22. 0x55b21fda7021 Poco::PooledThread::run() /usr/bin/clickhouse
    23. 0x55b21fda4dcc Poco::ThreadImpl::runnableEntry(void*) /usr/bin/clickhouse
    24. 0x55b22051af40 ? /usr/bin/clickhouse
    25. 0x7f214d98a6db start_thread /lib/x86_64-linux-gnu/libpthread-2.27.so
    26. 0x7f214d2a788f clone /lib/x86_64-linux-gnu/libc-2.27.so
    (version 19.17.2.4 (official build))
  • @LeOnId_VoLoShIn #146914 11:41 AM, 10 Mar 2020
    что я делаю не так?

    Error: Cannot insert into table in readonly mode (version 20.1.4.14 (official build))
    at parseError (/home/leonid/Документы/main/projects/untitled/node_modules/@apla/clickhouse/src/parse-error.js:2:15)
    at errorHandler (/home/leonid/Документы/main/projects/untitled/node_modules/@apla/clickhouse/src/clickhouse.js:29:13)
    at IncomingMessage.<anonymous> (/home/leonid/Документы/main/projects/untitled/node_modules/@apla/clickhouse/src/clickhouse.js:97:11)
    at IncomingMessage.emit (events.js:333:22)
    at endReadableNT (_stream_readable.js:1220:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
    code: 164,
    scope: 'DB::Exception:'
    }
    Insert complete!
  • Предположим у вас есть конфиг:

    users.xml
    <users>
    <default>
    <password>pass1</password>
    ...
    </default>
    <another>
    <password>pass2</password>
    ...
    </another>

    config.xml

    <query_log>
    <database>system</database>
    <table>query_log</table>
    <partition_by>toYYYYMM(event_date)</partition_by>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_log>
    <query_thread_log>
    <database>system</database>
    <table>query_thread_log</table>
    <partition_by>toYYYYMM(event_date)</partition_by>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_thread_log>

    Есть таблица в которую вы вставляеете данные из других таблиц с помощью н-этажных запросов.
    Так вот. Если вы вставляеете как юзер default - проблем нет. Если же пользователем another, то запросы сыпяться с ошибкой, что нужно указать пароль для пользователя default
  • @LeOnId_VoLoShIn #146916 11:44 AM, 10 Mar 2020
    есть у кого идеи как пофиксить?
  • https://t.me/clickhouse_ru
    Из контейнера кх curl http://xxx:9019

    select * from url('http://xxx:9019', 'anything String')
  • https://t.me/clickhouse_ru
    @valiotti #146918 11:48 AM, 10 Mar 2020
    Коллеги, привет!
    а подскажите, плз, как эффективнее решить: есть табличка Log() и нужно скопировать все строки из нее в другую таблицу. Строк немного - 53 тысячи

    КХ ругается
    `
    Received exception from server (version 20.1.3):
    Code: 252. DB::Exception: Received from localhost:9000. DB::Exception: Too many partitions for single INSERT block (more than 100). The limit is controlled by 'max_partitions_per_insert_block' setting. Large number of partitions is a common misconception. It will lead to severe negative performance impact, including slow server startup, slow INSERT queries and slow SELECT queries. Recommended total number of partitions for a table is under 1000..10000. Please note, that partitioning is not intended to speed up SELECT queries (ORDER BY key is sufficient to make range queries fast). Partitions are intended for data manipulation (DROP PARTITION, etc)..``
  • https://t.me/clickhouse_ru
    Get запрос ? все get ro
  • не понял подробнее
  • https://t.me/clickhouse_ru
    Раньше работало?
  • @LeOnId_VoLoShIn #146922 11:51 AM, 10 Mar 2020
    нет первый раз делаю запрос
  • https://t.me/clickhouse_ru
    @den_crane #146923 11:51 AM, 10 Mar 2020
    Http get всегда readonly
  • @LeOnId_VoLoShIn #146924 11:51 AM, 10 Mar 2020
    ну да
  • https://t.me/clickhouse_ru
    @den_crane #146925 11:51 AM, 10 Mar 2020
    http post надо
  • @LeOnId_VoLoShIn #146926 11:51 AM, 10 Mar 2020
    ето в опшнс прописать
  • https://t.me/clickhouse_ru
    Партиционирование слишком мелкое в приемнике
  • https://t.me/clickhouse_ru
    а что делать? ожидаю, что в скором времени хлынет поток данных и партиционирование будет нормальное
  • https://t.me/clickhouse_ru
    делюсь результатами

    select dub_count, count() from(select ID, count(1) as "dub_count" from TABLE1 group by ID having dub_count > 1) group by dub_count;
    -- 3 2
    -- 2 56226
    optimize table TABLE1 final deduplicate;
    -- Повтор запроса на счет дубдей
    -- 2 25300

    (1) работает
    (2) результат сразу
    (3) дедублицировало не все - видимо там есть отличия в строках, уже знаю в чем дело

    В общем и целом кажется решение рабочее - для полных дублей.

    Но оставшиеся не полные дубли - придется дочищать с использованием distinct и временной таблицы.
  • https://t.me/clickhouse_ru
    Написано же в сообщении что параметр можно изменить
  • спс пофиксил
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #146929 #146932 11:54 AM, 10 Mar 2020
    а цель задачи то какая? сделать выборку по уникальным значениям, или вычистить таблицу?
  • https://t.me/clickhouse_ru
    вычистить таблицу конечно
  • SELECT * FROM url('http://clickhouse-jdbc:9020', 'CSV', 'id Int32')
    Code: 86. DB::Exception: Received from localhost:9000. DB::Exception: Received error from remote server . HTTP status code: 400 HTTP/0.9 not supported, body: <h1>Bad Message 400</h1><pre>reason: HTTP/0.9 not supported</pre>.

    curl http://clickhouse-jdbc:9020
    HTTP method GET is not supported by this URL

    Что то совсем странное происходит
    jdbc висит на 9020 порту
  • https://t.me/clickhouse_ru
    На стороне bridge netstat tcpdump
  • https://t.me/clickhouse_ru
    @den_crane #146936 12:00 PM, 10 Mar 2020
    И ввобще netcat запустить для отладки на другом порту и в него стучать
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #146933 #146937 12:00 PM, 10 Mar 2020
    ну по идее, есть такой движок как ReplacingMergeTree, который отличается от MergeTree тем, что сам вычищает дубликаты по ключу сортировки, мб быстрее было бы создать таблицу на этом движке, и insert to select сделать?
  • https://t.me/clickhouse_ru
    как вариант
  • https://t.me/clickhouse_ru
    И как вы это починили? Какая версия кх?
  • @kamila_musina #146941 12:13 PM, 10 Mar 2020
    всем привет! подскажите пожалуйста:поле sex равное 0,1,2 в таблице mobile.events в mtch - как понять какой из полов где?
  • @myoldloverock #146942 12:14 PM, 10 Mar 2020
    Ребят подскажите в чем может собака таиться <Error> Application: DB::Exception: Listen [0.0.0.0]:8123 failed: Poco::Exception. Code: 1000, e.code() = 98, e.displayText() = Net Exception: Address already in use: 0.0.0.0:8123 (version 20.1.6.30 (official build)) час уже сижу -_-
  • Посмотри по netstat, похоже кто то уже висит на этом порту у тебя
  • netstat -ltnp | grep -w ':8123'
  • @myoldloverock #146945 12:16 PM, 10 Mar 2020
    увы нет не кого -_-
  • @stopost0 #146946 12:16 PM, 10 Mar 2020
    ну а ps ax | grep clickhouse
  • @stopost0 #146947 12:16 PM, 10 Mar 2020
    может уже запущен
  • @myoldloverock #146948 12:16 PM, 10 Mar 2020
    3049 ? Ssl 0:14 clickhouse-server --daemon --pid-file=/var/run/clickhouse-server/clickhouse-server.pid --config-file=/etc/clickhouse-server/config.xml
    3098 pts/1 S+ 0:00 sudo tail -f /var/log/clickhouse-server/clickhouse-server.log
    3099 pts/1 S+ 0:02 tail -f /var/log/clickhouse-server/clickhouse-server.log
    5492 pts/2 S+ 0:00 grep --color=auto clickhous
  • https://t.me/clickhouse_ru
    От рута надо с -p
    sudo netstat
  • так он у тебя при старте такое выдает?
  • @stopost0 #146952 12:20 PM, 10 Mar 2020
    просто смотрю что он у тебя 3049 ? Ssl 0:14 clickhouse-server --daemon --pid-file=/var/run/clickhouse-server/clickhouse-server.pid --config-file=/etc/clickhouse-server/config.xml
  • Он поднимается и тухнет
  • @myoldloverock #146954 12:20 PM, 10 Mar 2020
    попробую ребунуть
  • @stopost0 #146955 12:21 PM, 10 Mar 2020
    service clickhouse-server stop
  • @stopost0 #146956 12:21 PM, 10 Mar 2020
    ps ax | grep clickhouse
  • @stopost0 #146957 12:21 PM, 10 Mar 2020
    дальше висит в запущеных?
  • Секундочку
  • @stopost0 #146959 12:24 PM, 10 Mar 2020
    короче останови его, проверь нетстатом что порт свободный, удали логи и запусти
  • чето там скорее всего подвисло, после хардрезета завелось ровно все
  • Спасибо !
  • https://t.me/clickhouse_ru
    @prizmo_49 #146962 12:56 PM, 10 Mar 2020
    чуваки, можно ли поменять engine у таблицы?
  • https://t.me/clickhouse_ru
    @floxard #146963 01:00 PM, 10 Mar 2020
    Оторвать Replicated - да. В остальном SELECT|INSERT
  • https://t.me/clickhouse_ru
    нет
  • https://t.me/clickhouse_ru
    @prizmo_49 #146965 01:01 PM, 10 Mar 2020
    спасибо
  • https://t.me/clickhouse_ru
    да, но не всегда, файлы в партах на самом деле одинаковые
  • https://t.me/clickhouse_ru
    @den_crane #146967 01:28 PM, 10 Mar 2020
    поэтому можно и replacing переделать в MT и summing и т.д.
  • https://t.me/clickhouse_ru
    @den_crane #146968 01:29 PM, 10 Mar 2020
    и можно не рисковать исходной таблицей, а подсоединить зафриженное в таблицу с другим движком
  • https://t.me/clickhouse_ru
    @den_crane #146969 01:30 PM, 10 Mar 2020
    естественно partition by / primary key останутся как были
  • добавил имя юзера по умолчанию и его пароль в <query_log> и <query_thread_log>. 19.17.4.11
  • @dj_mixer #146971 01:32 PM, 10 Mar 2020
    вопрос, нужен ли зукипер, если включить internal_replication true. и если нужен, чем он отличается от false? по доке не оч ясно, по чатику все ещё туманней....
  • https://t.me/clickhouse_ru
    для работы internal replication зукипер ненужен
  • https://t.me/clickhouse_ru
    @unamedrus #146973 01:33 PM, 10 Mar 2020
    но он нужен для запросов ON CLUSTER
  • @dj_mixer #146974 01:34 PM, 10 Mar 2020
    ok, т.е. lightweight/legacy replication.
    если выставить в false и настроить зукипер репликация будет работать нормально?
  • https://t.me/clickhouse_ru
    @unamedrus #146975 01:34 PM, 10 Mar 2020
    и для работы replicated table тоже нужен зукипер
  • https://t.me/clickhouse_ru
    да
  • ok, т.е. когда делаю просто таблицу и включаю internal_replication=true - у меня будет реплицироваться между шардами.
    т.е. ReplicatedMT не совместим с internal_replication=true?
  • https://t.me/clickhouse_ru
    будет реплицироватся между репликами!, не шардами
  • https://t.me/clickhouse_ru
    internal_replication -- зависит от способа репликации.
    Если у вас replicated таблицы (репликация через зукипер), internal_replication обязательно должен быть = true.

    Если у вас "дешевая" репликаця, и репликацию делает distributed таблица то internal_replication обязательно должен быть = false

    При internal_replication = false , при записи в distributed таблицу, distributed таблица вставляет во все реплики, таким образом достигается подобие репликации, без гарантий целостности.

    При internal_replication = true , при записи в distributed таблицу, distributed таблица вставляет в одну из реплик, реплика так как у нее движок репликейтид, реплицирует уже сама (internal_replication).
  • @lzakharov #146980 01:38 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @den_crane #146981 01:39 PM, 10 Mar 2020
    Вы пишете в distributed, она смотрит на параметр internal_replication -- он true -- ага решает distributed, надо писать в любую реплику, дальше сами внутри replicated таблицы все сделают. Ура win.

    Вы пишете в distributed, она смотрит на параметр internal_replication -- он false -- ага решает distributed надо писать во все реплики (там внутри не умеют реплицировать). Пишет в три реплики и все умножается на 3 в случае если там была replicated.
  • все, я потерялся (

    допустим зукипера нет, таблица дистрибютед.

    А). что произойдет если я вставлю в, в дистрибютед таблицу
    он вставит:
    №1 в каждую реплику рандомного шарда?
    №2 в каждую реплику всех шардов?

    Б) что произойдет если я вставлю в дистрибютед таблицу, но internal replication=false
    он вставит:
    №1 в каждую реплику рандомного шарда?
    №2 в каждую реплику всех шардов?

    <shard>
    <internal_replication>true</internal_replication>
    <replica>
    <host>1.1.1.1</host>
    <port>9000</port>
    </replica>
    <replica>
    <host>1.1.1.2</host>
    <port>9000</port>
    </replica>
    </shard>
    <shard>
    <internal_replication>true</internal_replication>
    <replica>
    <host>1.1.1.3</host>
    <port>9000</port>
    </replica>
    <replica>
    <host>1.1.1.4</host>
    <port>9000</port>
    </replica>
    </shard>
  • https://t.me/clickhouse_ru
    @unamedrus #146983 01:39 PM, 10 Mar 2020
    те наоборот все, но вообще это не очень логично internal_replication звучит, как будто репликацию делает сам кликхаус, а не через зукипер
  • https://t.me/clickhouse_ru
    я неправ был
  • https://t.me/clickhouse_ru
    @den_crane #146985 01:40 PM, 10 Mar 2020
    Denny Crane (I don't work at Yandex (never did)), [Dec 13, 2019 at 10:22:33 AM (2019-12-13, 10:29:35 AM)]:
    да. Нету. Из-за дедупликации последних 100 блоков.

    distributed посылает в реплику1, реплику2 и реплику3 одно и тоже
    реплика1 вставляет и пишет в зукипер контрольную сумму блока.
    реплика2 проверяет что блок уже есть в зукипере (в ста последних) и не вставляет и скачивает новый парт с реплика1
    реплику3 проверяет что блок уже есть в зукипере (в ста последних) и не вставляет и скачивает новый парт с реплика1

    т.о. мы получили оверхед по сети и цпу.

    Раз в полгода приходят люди и жалуются на дубликаты из-за этого. Почему?
    реплика2 выключена или потеряла сеть.
    distributed посылает в реплику1, реплику2 и реплику3 одно и тоже
    реплика1 вставляет и пишет в зукипер контрольную сумму блока.
    реплика3 проверяет что блок уже есть в зукипере (в ста последних) и не вставляет и скачивает новый парт с реплика1
    через минуту сеть восстановилась
    реплика2 проверяет что блока нет в зукипере (в ста последних) вставляет и скачивает новый парт с реплика1
    рассылает вставленное на реплику1 и реплику3 через репликацию -- insert умножился на два
  • https://t.me/clickhouse_ru/146982
    можете сценарий А и Б глянуть?
    Dj in ClickHouse не тормозит

    все, я потерялся ( А). что произойдет если я вставлю в, в дистрибютед таблицу он вставит: №1 в каждую реплику рандомного шарда? №2 в каждую реплику всех шардов? Б) что произойдет если я вставлю в дистрибютед таблицу, но internal replication=false он вставит: №1 в каждую реплику рандомного шарда? №2 в каждую реплику всех шардов? <shard> <internal_replication>true</internal_replication> <replica> <host>1.1.1.1</host> <port>9000</port> </replica> <replica> <host>1.1.1.2</host> <port>9000</port> </replica> </shard> <shard> <internal_replication>true</internal_replication> <replica> <host>1.1.1.3</host> <port>9000</port> </replica> <replica> <host>1.1.1.4</host> <port>9000</port> </replica> </shard>

  • т.е. internal_replication=true - говорит КХ. чтоб он обрабатывал инсерт так как будто вставка идет в репликейтед таблицу с зукипером, так?

    АПД. т.е. вставляется в первую реплику, а остальное идет асинхронно
  • @dj_mixer #146988 01:44 PM, 10 Mar 2020
    а если internal_replication=false, вставка синхронно не завершится пока весь кворум не вставит, правильно?
  • https://t.me/clickhouse_ru
    @den_crane #146989 01:45 PM, 10 Mar 2020
    >А). что произойдет если я вставлю в, в дистрибютед таблицу
    >он вставит:
    >№1 в каждую реплику рандомного шарда?
    >№2 в каждую реплику всех шардов?
    вроде ошибка будет , или данные будут только в одной реплике

    >Б) что произойдет если я вставлю в дистрибютед таблицу, но internal replication=false
    >он вставит:
    >№1 в каждую реплику рандомного шарда?
    >№2 в каждую реплику всех шардов?
    internal replication=false размажет по шардам, пошлет копии в реплики шардов --- так и надо конфигурить
  • https://t.me/clickhouse_ru
    все будет асинхронно, никаких гарантий, со временем данные в репликах разойдутся, как и написано в доке, и будут разные в репликах
  • @dj_mixer #146991 01:47 PM, 10 Mar 2020
    ок, кажется пропарсил.
    т.е. параметр internal_replication=true - означает
    "у меня в фоне делается репликация по зукиперу, там уже все настроено", а НЕ "делай сам репликацию своими средствами".

    т.е. это "state"
  • https://t.me/clickhouse_ru
    ДА!!!
  • Thank you!
  • https://t.me/clickhouse_ru
    @den_crane #146994 01:49 PM, 10 Mar 2020
    почему разъедутся реплики (при репликации без REplicated):

    в доке написано что не стоит ожидать консистентности.

    Скорее всего иногда distributed таблица засылает в одну из реплик два раза одно и тоже, потому что первая посылка отвалилась с таймаутом, а реплика на самом деле получила и первую и вторую посылку.
  • @dj_mixer #146995 01:50 PM, 10 Mar 2020
    ок, т.е. internal_replication=false - не очень надежный вариант
  • @dj_mixer #146996 01:50 PM, 10 Mar 2020
    помимо всего прочего
  • https://t.me/clickhouse_ru
    ну в доке написано, что реплики 100% разъедутся со временем :)
  • @dj_mixer #146998 01:50 PM, 10 Mar 2020
    эту часть то я понял, с true/false долго думал
  • https://t.me/clickhouse_ru
    @malkeshar #146999 01:50 PM, 10 Mar 2020
    Добрый день. Подскажите, пожалуйста, как выполняется Retention на двухнодвом кластере с merge tree. Данные прорежеваются на одном сервере, а на второй разливаются изменения или одновременно на двух?
  • =) 99.99%
  • @dj_mixer #147001 01:51 PM, 10 Mar 2020
    это был очень "удачный" naming convention для этого параметра 😁😁😁
    всем спасибо
  • https://t.me/clickhouse_ru
    @malkeshar #147002 01:51 PM, 10 Mar 2020
    Могу ли я погасить одну ноду, выполнить прореживания на одной ноде, а потом подключить вторую, чтобы туда разлились изменения?
  • https://t.me/clickhouse_ru
    про что речь? про GraphiteMergeTree ?
  • https://t.me/clickhouse_ru
    @malkeshar #147004 01:51 PM, 10 Mar 2020
    Да
  • https://t.me/clickhouse_ru
    она replicated ?
  • https://t.me/clickhouse_ru
    @malkeshar #147006 01:51 PM, 10 Mar 2020
    Да
  • https://t.me/clickhouse_ru
    они вместе выполняют merge
    лидер назначает merge, все реплики начинают мержить, в процессе merge -- они чистят, ролят, мерж завершается на всех репликах, контрольная сумма (2 разных суммы) полученных в результате мержа партов сравниваются, они 100% бинарно одинаковы, если нет, межр начинается снова или бинарные парты скачиваются с реплики которая успела закончтить мерж первой
  • https://t.me/clickhouse_ru
    @malkeshar #147008 01:55 PM, 10 Mar 2020
    Спасибо большое. Следовательно, я могу выполнить мердж на одной реплике и перетянуть их на другую
  • https://t.me/clickhouse_ru
    ну это само работает, мержи идут одинаково одновременно на репликах
  • https://t.me/clickhouse_ru
    @den_crane #147010 01:56 PM, 10 Mar 2020
    в доке описан тул который понимает GraphiteMergeTree и сам запускает optimize кроном когда он нужен (https://github.com/innogames/graphite-ch-optimizer)
    GitHub - innogames/graphite-ch-optimizer: Daemon to optimize GraphiteMergeTree automatically

    Daemon to optimize GraphiteMergeTree automatically - GitHub - innogames/graphite-ch-optimizer: Daemon to optimize GraphiteMergeTree automatically

  • https://t.me/clickhouse_ru
    @malkeshar #147011 01:58 PM, 10 Mar 2020
    У нас просто данные так разрослись, что не хватает места для мерджа. Поэтому планируем вторую ноду отключить, на первую ноду подключаем дополнительный диск большей емкости и выполняем на нем optimize данных. После чего вводим в строй вторую
  • https://t.me/clickhouse_ru
    @malkeshar #147012 01:58 PM, 10 Mar 2020
    Пытаюсь понять, какие могут быть подводные камни
  • https://t.me/clickhouse_ru
    @241186216 #147013 02:07 PM, 10 Mar 2020
    Кто то юзает флайэвэй для наката базы ?
  • https://t.me/clickhouse_ru
    Он разве умеет в ch?
  • https://t.me/clickhouse_ru
    @241186216 #147015 02:08 PM, 10 Mar 2020
    Нет не умеет ,но может кто допилил под себя
  • https://t.me/clickhouse_ru
    @ilysha_v #147016 02:09 PM, 10 Mar 2020
    На гитхабе можно найти форк, который вроде как умеет в ch, но про ничего не могу сказать, тк проще было свой мигратор сделать
  • https://t.me/clickhouse_ru
    @TrueCarry #147017 02:09 PM, 10 Mar 2020
    Подскажите пожалуйста, а в каком формате в csv колонку типа DateTime нужно импортировать?
  • https://t.me/clickhouse_ru
    @den_crane #147018 02:09 PM, 10 Mar 2020
    Yet another ClickHouse support by a-konyaev · Pull Request #2640 · flyway/flyway

    Based on #2166 and #1773 This one has some improvements in comparison to previous implementations: more accurate declaration of the schema table's columns (types and default values) &q...

  • https://t.me/clickhouse_ru
    2020-01-01 00:00:00
  • https://t.me/clickhouse_ru
    @TrueCarry #147020 02:10 PM, 10 Mar 2020
    Спасибо
  • https://t.me/clickhouse_ru
    ой забыл, на самом деле можно по разному форматировать, надо параметр в best_effort установить
  • https://t.me/clickhouse_ru
    @den_crane #147022 02:12 PM, 10 Mar 2020
    --date_time_input_format arg "Method to read DateTime from text input formats. Possible values: 'basic' and 'best_effort'."
  • https://t.me/clickhouse_ru
    @241186216 #147023 02:12 PM, 10 Mar 2020
    А как кто льет на кх изменения
  • https://t.me/clickhouse_ru
    А работает ?
  • https://t.me/clickhouse_ru
    вообще да, но я сам не пользуюсь, мне не надо, я дба (у меня все на баше и все вручную)
  • @qqruz #147026 02:55 PM, 10 Mar 2020
    Привет, хочу обогащать данные полями из словоря (база pg), dictGet использовать не получается ТК у меня нет четкого соответствия по id или ключу, условие по вхождению значения в диапазон. Как можно это сделать?
  • https://t.me/clickhouse_ru
    есть словарь range dictGetFloat('rates', 'conversion_rate', currecncy_id, date)
  • https://t.me/clickhouse_ru
    @July1725 #147028 03:12 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @inegodin #147029 03:35 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @ber_alex #147030 03:43 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @molo4ko007 #147031 03:47 PM, 10 Mar 2020
    Привет, а напомните, пожалуйста, был какой-то gist с примером процессинга, как будто в кх есть оконные функции
  • https://t.me/clickhouse_ru
    @molo4ko007 #147032 03:47 PM, 10 Mar 2020
    Кажется, @den_crane, у вас было что-то похожее
  • https://t.me/clickhouse_ru
    @molo4ko007 #147033 03:48 PM, 10 Mar 2020
    Нужно выдать summary по подгруппам, и потом общую статистику по менее гранулярным группам
  • https://t.me/clickhouse_ru
    Если немного разозлился реплики, мерджи повторяется на отставке реплике. Если разница в часах/днях, просто о ставшая счётчик все с лидера и почистить устаревшее.
  • https://t.me/clickhouse_ru
    @bralbral #147035 04:07 PM, 10 Mar 2020
    Добрый вечер. Если секции по ключу (type,datetime) , то можно ли как нибудь задать ttl таким образом , чтобы в зависимости от type у ttl было разное значение ?
  • https://t.me/clickhouse_ru
    @x3ter #147036 04:16 PM, 10 Mar 2020
    Joined.
  • @ates0061 #147037 04:16 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @organicnz #147038 04:16 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @ka10k #147039 04:16 PM, 10 Mar 2020
    Joined.
  • @vabilyk #147040 04:16 PM, 10 Mar 2020
    Joined.
  • @ostrn #147041 04:16 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @plaqqsa #147042 04:16 PM, 10 Mar 2020
    Joined.
  • @IscInt #147043 04:16 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @DenisDanilov #147044 04:16 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @zahar517 #147045 04:16 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @paveliosifov #147046 04:17 PM, 10 Mar 2020
    Joined.
  • @igorek11 #147047 04:17 PM, 10 Mar 2020
    Joined.
  • @ghettotourist #147048 04:18 PM, 10 Mar 2020
    Joined.
  • @ebortov #147049 04:18 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @Borisov_VG #147050 04:18 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @zotov8 #147051 04:18 PM, 10 Mar 2020
    Конференция что ли какая-то?
  • https://t.me/clickhouse_ru
    Уэбчик)
  • @stopost0 #147053 04:19 PM, 10 Mar 2020
    изучение кх в конституцию внесли
  • https://t.me/clickhouse_ru
    давно пора
  • @xammonium #147055 04:22 PM, 10 Mar 2020
    есть ли ограничение на количество запросов в UNION ALL?
  • https://t.me/clickhouse_ru
    кажется можно TTL было сделать на основе столбца

    ttl ... interval column_b days
  • https://t.me/clickhouse_ru
    ищите по groupArray

    https://gist.github.com/den-crane/8f2db1e24564522788a2e1010dd38dea

    https://t.me/clickhouse_ru/137604
  • https://t.me/clickhouse_ru
    ага, я уже так и сделал вручную. думал, с тех пор, как завезли rollup, стало лучше, но в итоге со всеми сортировками и т.д. вышло, что все равно проще самому написать, данных немного, скорость некритична
  • https://t.me/clickhouse_ru
    @molo4ko007 #147061 04:32 PM, 10 Mar 2020
    спасибо
  • https://t.me/clickhouse_ru
    нет, но скорее всего вы делаете что-то неправильно и вам нужен либо engine=Merge либо arrayReduce
  • https://t.me/clickhouse_ru
    ну баг это. Можно обычно починить перемержив
  • https://t.me/clickhouse_ru
    Вебинар от ReBrain
  • к движку доступа нет, нужно считать количество уникальных uid в сотне таблиц с логами
  • этот линк вне яндекса вообще работает?
  • https://t.me/clickhouse_ru
    Нет
  • https://t.me/clickhouse_ru
    @TrueCarry #147069 04:46 PM, 10 Mar 2020
    Привет. А если у меня есть таблица
    user_id | metric1 | metric2 | time
    Метрики только растут. Как лучше всего получать прирост метрик за день? max(metric1) - min(metric1) или есть варианты умнее?
  • https://t.me/clickhouse_ru
    вам надо накрыть их зонтиком -- Engine=Merge
  • https://t.me/clickhouse_ru
    сделать MV где будут готовые max per day
  • https://t.me/clickhouse_ru
    @den_crane #147072 04:48 PM, 10 Mar 2020
    или select day, max()
    потом groupArray и повычитать arrayDiff и т.д.
  • доступ к кх только для чтения, не выйдет + идёт постоянная ротация логов
  • https://t.me/clickhouse_ru
    @TrueCarry #147074 04:49 PM, 10 Mar 2020
    Спасибо!
  • https://t.me/clickhouse_ru
    вот бывает же жизнь, АДДДД
    тогда union all
  • https://t.me/clickhouse_ru
    @unamedrus #147076 04:50 PM, 10 Mar 2020
    А временную таблицу можно создать с правами RO?
  • https://t.me/clickhouse_ru
    как раз Merge для этого и сделан, он регулярками задает имена таблиц
  • https://t.me/clickhouse_ru
    RO=2 может temporary table
  • https://t.me/clickhouse_ru
    @unamedrus #147080 04:53 PM, 10 Mar 2020
    Там только мем движок к сожалению
  • @T90jasd98 #147081 04:54 PM, 10 Mar 2020
    Привет. Есть таблица с кликами, нужна дневная статистика, для этого делаем MV.
    Но статистика нужна с учетом таймзоны, которая приходит с фронта.
    Поэтому в MV держим часовые агрегации и генерируем запрос для доагрегации с учетом входящей таймзоны.
    Есть ли лучшие решения?
  • https://t.me/clickhouse_ru
    нету, вы все делаете правильно, и по другому сделать невозможно в принципе
  • @T90jasd98 #147083 04:57 PM, 10 Mar 2020
    чорт
  • @T90jasd98 #147084 04:57 PM, 10 Mar 2020
    спасибо
  • https://t.me/clickhouse_ru
    @den_crane #147085 04:58 PM, 10 Mar 2020
    было бы глупо хранить все 38 раз, по числу таймзон
  • @T90jasd98 #147086 05:00 PM, 10 Mar 2020
    это да, 365*24=8760, т.ч. все норм вроде
  • https://t.me/clickhouse_ru
    @den_crane #147087 05:00 PM, 10 Mar 2020
    почему 24, таймзоны и по полчаса и по 15 минут бывают
  • @T90jasd98 #147088 05:01 PM, 10 Mar 2020
    игнорируем зоны с :30 :15 - нет кейсов
  • https://t.me/clickhouse_ru
    @unamedrus #147089 05:01 PM, 10 Mar 2020
    Возможно эт кол во почасовых записей)
  • https://t.me/clickhouse_ru
    @crazydimas #147090 05:05 PM, 10 Mar 2020
    Joined.
  • Да эти массивы, понятных доков нет, примеров нет, обучения на сайте нет
  • @181568392 #147092 05:16 PM, 10 Mar 2020
    Сам мучаюсь
  • @181568392 #147093 05:18 PM, 10 Mar 2020
    Норм было если б выложили пример сравнения оконных функций и как их в кх можно заменить
  • @dj_mixer #147094 05:19 PM, 10 Mar 2020
    Выше были примеры
  • @dj_mixer #147095 05:19 PM, 10 Mar 2020
    Посик по groupArray array join
  • https://t.me/clickhouse_ru
    у меня 385 полузаконченных комитов с документацией, я их разгребу и 21 января 2024 года займусь, потерпите
  • @goosecat #147097 05:22 PM, 10 Mar 2020
    :-)
  • @dj_mixer #147098 05:23 PM, 10 Mar 2020
    "Я один а вас много" )
  • @goosecat #147099 05:23 PM, 10 Mar 2020
    Ну надо ещё есть , спать
  • @goosecat #147100 05:23 PM, 10 Mar 2020
    И так то уже хорошо
  • @dj_mixer #147101 05:24 PM, 10 Mar 2020
    Это ж бот яндекса, зачем ему спать )
  • @goosecat #147102 05:24 PM, 10 Mar 2020
    Ага , как кузмич
  • https://t.me/clickhouse_ru
    @den_crane #147103 05:25 PM, 10 Mar 2020
    Самое смешное, что всю эту неделю я буду заниматься только вертикой, починкой странного глюка, при отвале ноды
  • @goosecat #147104 05:25 PM, 10 Mar 2020
    Вертика интересная штуковина по своему
  • @goosecat #147105 05:26 PM, 10 Mar 2020
    Я не фанат , вернее не пробовал в проде
  • @goosecat #147106 05:26 PM, 10 Mar 2020
    Наверное что-то с железкой,
  • https://t.me/clickhouse_ru
    @den_crane #147107 05:27 PM, 10 Mar 2020
    я имею в виду починку своей заливалки которая странно себя ведет иногда
  • @goosecat #147108 05:28 PM, 10 Mar 2020
    Хорошее дело
  • @goosecat #147109 05:30 PM, 10 Mar 2020
    Мне б тоже надо починить одну плюшку, но она утонет в апреле с кораблем :-)
  • @goosecat #147110 05:30 PM, 10 Mar 2020
    Поэтому лень двигатель прогресса
  • @dj_mixer #147111 05:56 PM, 10 Mar 2020
    Иногда, чтобы проблема решилась, надо просто подождать
  • @435965694 #147112 06:10 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @BogdanKalinovsky #147113 06:29 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @alan_lans #147114 06:39 PM, 10 Mar 2020
    всем привет, ктонибудь stochasticLinearRegression использовал?
  • https://t.me/clickhouse_ru
    @igor_dia #147115 08:20 PM, 10 Mar 2020
    Ребят, а кто пользовался https://github.com/ClickHouse/clickhouse-go ?
    Пытаюсь разобраться с типом IPv4. Как мне его в структуре объявить, чтобы sqlx его смогло съесть и заинсертить в базу? Пробовал передавать string и net.IP - оба не работают. Если юзать lib.column.IPv4, то я не догоняю, как преобразовывать net.IP в него. В примерах его нету, есть только в тестах и не вполне внятное:
    https://github.com/ClickHouse/clickhouse-go/blob/master/lib/column/ip_test.go#L27

    Судя по строчке 31 ниже - там возвращается интерфейс
    GitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouse

    Golang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    Нормальные тесты, а то что автоматом не кастится - это плохо, если не забуду, то завтра попробую поправить
  • https://t.me/clickhouse_ru
    Так можете сказать, к чему кастовать?
  • https://t.me/clickhouse_ru
    https://github.com/ClickHouse/clickhouse-go/blob/master/lib/column/ip.go#L20, но это было когда в КХ еще не было типов для IP, что там щас я не знаю, попробую завтра глянуть
    ClickHouse/clickhouse-go

    Golang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    @igor_dia #147119 08:29 PM, 10 Mar 2020
    Так я ж пробовал его передавать. Не сработало
  • https://t.me/clickhouse_ru
    Сделай issue с примерами и поставь на меня
  • https://t.me/clickhouse_ru
    @igor_dia #147121 08:32 PM, 10 Mar 2020
    окей
  • https://t.me/clickhouse_ru
    Заодно хотел поинтересоваться, как лучше завести там 2 колонки: одна для IPv4, другая - для IPv6. Если айпишник 4 версии, то в первую пишем, если шестой, то во вторую. Надо там ставить Nullable? И в случае sqlx - у обоих полей структуры будет тип`net.IP` тогда?
  • https://t.me/clickhouse_ru
    Я всегда использую FixedString(16) туда влезают оба типа, завтра, если дел не будет много, поправлю работу с IP и можно будет использовать IPv6
  • https://t.me/clickhouse_ru
    не. вопрос не во "влезает ли", вопрос в том, как их отличать. Мб лучше явно в структуре передавать типы IPv4, IPv6 и явно кастовать строки к ним?
  • https://t.me/clickhouse_ru
    @igor_dia #147125 08:40 PM, 10 Mar 2020
    потому что при кастовании в крайнем случае ясно будет, где ошибка
  • https://t.me/clickhouse_ru
    @kshvakov #147126 08:42 PM, 10 Mar 2020
    Не нужно их отличать, храните в одном если задача просто хранить
  • https://t.me/clickhouse_ru
    @flamefork #147127 08:42 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @flamefork #147128 08:58 PM, 10 Mar 2020
    Добрый день! Подскажите плз, насколько строга (и, для понимания, чем обусловлена) рекомендация иметь не более 1000 партишенов? Насколько и чем плохо иметь, например 10к или 100к партишенов, при условии что активно используемых не более 1к, и что один запрос всегда использует только один партишен? (Всего данных порядка 1ТБ)
  • @goosecat #147129 08:59 PM, 10 Mar 2020
    Зачётный вопрос
  • https://t.me/clickhouse_ru
    при старте КХ читает все парты, есть жалобы что при 30тыс. партов КХ стартует 4 часа.
    при мутации КХ мутирует все парты и делает транзакцию в зукипере перечисляя все имена партов, при 10-50тыс. партов (длина имени парта различается) они не влезают в пакет 1.5МБ и мутации тупо не работают
  • @goosecat #147131 09:01 PM, 10 Mar 2020
    В odps было такое
  • https://t.me/clickhouse_ru
    @den_crane #147132 09:02 PM, 10 Mar 2020
    КХ сдизайнен для месячных партиций, select анализирует список партов для partition pruning, если список огромен, анализ начинает занимать много времени
  • https://t.me/clickhouse_ru
    @den_crane #147133 09:03 PM, 10 Mar 2020
    инсерт должен затрагивать желательно только одну партицию, иначе он разбивается на много кусков, теряется атомарность, напрягается зукипер
  • @goosecat #147134 09:03 PM, 10 Mar 2020
    @den_crane ты вообще спишь?
  • @goosecat #147135 09:04 PM, 10 Mar 2020
    Ценная инфа
  • https://t.me/clickhouse_ru
    @flamefork #147136 09:04 PM, 10 Mar 2020
    Воу! Спасибо за ответ и подробности!
  • https://t.me/clickhouse_ru
    @den_crane #147137 09:04 PM, 10 Mar 2020
    каждый парт это запись (z-node) в зукипере, чем больше партов, тем больше база ZK, ZK это in-memory db
  • https://t.me/clickhouse_ru
    але, у меня 4p.m.
  • @goosecat #147139 09:05 PM, 10 Mar 2020
    Ты в тае ?
  • https://t.me/clickhouse_ru
    я конацкий лесаруб
  • @goosecat #147141 09:05 PM, 10 Mar 2020
    Ох тыж ,
  • @goosecat #147142 09:06 PM, 10 Mar 2020
    Ну это, ладно.
  • @goosecat #147143 09:06 PM, 10 Mar 2020
    Споки ноки
  • https://t.me/clickhouse_ru
    @manchkin #147144 09:10 PM, 10 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    Еду в Магадан..
  • @dj_mixer #147146 09:29 PM, 10 Mar 2020
    вопрос на миллион долларов для неспящих, после какого % данных/места на диске становится выгодно использовать Nullable типы? Например условный инт32. Скажем мы можем в аппе делать maxValue в качестве нулла либо делать его нуллаблом. Нуллабл это вроде доп файл. Но не нуллабл это 4 байта на строку (которая правда при одинаковых значениях симуляций нулла сожмется). Какой процент нулла хорош для применений nullable?
  • https://t.me/clickhouse_ru
    @den_crane #147147 09:31 PM, 10 Mar 2020
    nullable всегда хуже по размеру и всегда по производительности.
  • @dj_mixer #147148 09:31 PM, 10 Mar 2020
    Ок. Даже если 99% значений нулл?
  • https://t.me/clickhouse_ru
    create table XXN (A Int64, B Nullable(Int64)) Engine=MergeTree order by tuple()
    insert into XXN select 45545645, null from numbers(100000000);

    select column, formatReadableSize(sum(column_bytes_on_disk)) bytes_on_disk, formatReadableSize(sum(column_data_uncompressed_bytes)) uncompressed
    from system.parts_columns
    where active = 1 and table like '%XXN%'
    group by database,table, column

    ┌─column─┬─bytes_on_disk─┬─uncompressed─┐
    │ A │ 3.76 MiB │ 762.94 MiB │
    │ B │ 4.38 MiB │ 858.31 MiB │
    └────────┴───────────────┴──────────────┘
  • https://t.me/clickhouse_ru
    @den_crane #147150 09:35 PM, 10 Mar 2020
    select count(), A from XXN group by A

    ┌───count()─┬────────A─┐
    │ 100000000 │ 45545645 │
    └───────────┴──────────┘

    1 rows in set. Elapsed: 0.039 sec. Processed 100.00 million rows, 800.00 MB (2.56 billion rows/s., 20.49 GB/s.)

    select count(), B from XXN group by B

    ┌───count()─┬────B─┐
    │ 100000000 │ ᴺᵁᴸᴸ │
    └───────────┴──────┘

    1 rows in set. Elapsed: 0.096 sec. Processed 100.00 million rows, 900.00 MB (1.04 billion rows/s., 9.39 GB/s.)
  • https://t.me/clickhouse_ru
    @den_crane #147151 09:36 PM, 10 Mar 2020
    20.49 GB/s. VS 9.39 GB/s. !!!!!!
  • @238773844 #147152 09:36 PM, 10 Mar 2020
    вот это поворот!
  • @dj_mixer #147153 09:36 PM, 10 Mar 2020
    спасибо! значит тыканье пальцем в небо было изначально правильным и можно ничего не трогать, конкуренты смутили и бес попутал =)
  • https://t.me/clickhouse_ru
    @den_crane #147154 09:36 PM, 10 Mar 2020
    это все общеизвестно
  • https://t.me/clickhouse_ru
    @den_crane #147155 09:37 PM, 10 Mar 2020
    и неоднократно демонстрировалось
  • @238773844 #147156 09:37 PM, 10 Mar 2020
    ну я знал что NULL это как правило плохо. но не на стольок же =)
  • @dj_mixer #147157 09:40 PM, 10 Mar 2020
    я в общем тоже тестил, но после фейла с подчёркиваниями уже ни в чём не уверен ) плюс как бы по идее, в теории, битмапами на нулл значения и сжатием nullable при высоких процентах null должен занимать меньше места...
  • @238773844 #147158 09:41 PM, 10 Mar 2020
    у меня тож по поводу места разрыв шаблона
  • https://t.me/clickhouse_ru
    @den_crane #147159 09:41 PM, 10 Mar 2020
    так LZ4 и ZStd строят словарь
  • https://t.me/clickhouse_ru
    @den_crane #147160 09:42 PM, 10 Mar 2020
    какая разница что в словарь положить
  • https://t.me/clickhouse_ru
    @den_crane #147161 09:44 PM, 10 Mar 2020
    3.5M Mar 10 21:43 A.bin
    286K Mar 10 21:43 A.mrk2
    3.4M Mar 10 21:43 B.bin
    286K Mar 10 21:43 B.mrk2
    434K Mar 10 21:43 B.null.bin
    286K Mar 10 21:43 B.null.mrk2
    303 Mar 10 21:43 checksums.txt
    67 Mar 10 21:43 columns.txt
    8 Mar 10 21:43 count.txt
  • https://t.me/clickhouse_ru
    @den_crane #147162 09:45 PM, 10 Mar 2020
    т.е. в B.bin все равно лежит 0-лик или что-то там
  • @238773844 #147163 09:46 PM, 10 Mar 2020
    ок те для nULL доп файлы на диске
  • https://t.me/clickhouse_ru
    @den_crane #147164 09:46 PM, 10 Mar 2020
    по другому скорее всего не сделать, в столбцовой бд
  • @238773844 #147165 09:46 PM, 10 Mar 2020
    кстаати
  • @dj_mixer #147166 09:46 PM, 10 Mar 2020
    можно битмапами, не? т.е. на каждую строку по биту и условный RLE
  • @238773844 #147167 09:47 PM, 10 Mar 2020
    вопрос
  • @dj_mixer #147168 09:47 PM, 10 Mar 2020
    ну короче, лучше не делать nullable вообще
  • https://t.me/clickhouse_ru
    а вроде битмапы в B.null.bin
  • @238773844 #147170 09:47 PM, 10 Mar 2020
    задеплоил реплике на новом CH и зосдал таблицу чтоб зареплицировать дванные

    Checksums of parts don't match: hash of uncompressed files doesn't match (version 20.1.6.30 (official build)). Data after merge is not byte-identical to data on another replicas. There could be several reasons: 1. Using newer version of compression library after server update. 2. Using another compression method. 3. Non-deterministic compression algorithm (highly unlikely). 4. Non-deterministic merge algorithm due to logical error in code. 5. Data corruption in memory due to bug in code. 6. Data corruption in memory due to hardware issue. 7. Manual modification of source data after server startup. 8. Manual modification of checksums stored in ZooKeeper. We will download merged part from replica to force byte-identical result.

    стоит ли волноваться?
  • https://t.me/clickhouse_ru
    @den_crane #147171 09:47 PM, 10 Mar 2020
    это надо в дев. чатике обсуждать, я не копенгаген
  • https://t.me/clickhouse_ru
    реплика до 19.7 ?
  • @238773844 #147173 09:48 PM, 10 Mar 2020
    да
  • @238773844 #147174 09:48 PM, 10 Mar 2020
    старая
  • https://t.me/clickhouse_ru
    @den_crane #147175 09:48 PM, 10 Mar 2020
    надо как можно быстрее ее апгейдить
  • @238773844 #147176 09:48 PM, 10 Mar 2020
    селекты отдают одинаковые результаты
  • @238773844 #147177 09:48 PM, 10 Mar 2020
    пока
  • https://t.me/clickhouse_ru
    @den_crane #147178 09:48 PM, 10 Mar 2020
    зачем-то в 19.7 поменяли LZ4
  • https://t.me/clickhouse_ru
    @den_crane #147179 09:49 PM, 10 Mar 2020
    теперь они парты с друг друга тягают
  • https://t.me/clickhouse_ru
    @den_crane #147180 09:49 PM, 10 Mar 2020
    потому что не совпадает сумма после LZ4 компресси
  • @238773844 #147181 09:49 PM, 10 Mar 2020
    так, лучше новую релпику погасить? Я не буду писать в новый сервер пока
  • https://t.me/clickhouse_ru
    они и будут давать одинаковые результаты, просто нагрузка на сеть и cpu
  • https://t.me/clickhouse_ru
    наверное да, я не знаю зачем он вам
  • @238773844 #147184 09:50 PM, 10 Mar 2020
    чтоб смигрировать с одного резиза на другой
  • @238773844 #147185 09:51 PM, 10 Mar 2020
    Мой план был такой -
    деплою реплики на новой версии
    пеереключаю запись
    обновляю старые реплики
  • @238773844 #147186 09:52 PM, 10 Mar 2020
    причем обновлять старые реплики путем rm -rf /datadir
  • спасибо, и судя по всему B.bin чего то решает для себя хранить, несмотря на то, что там одни нули...
    3.4M Mar 10 21:43 B.bin
    в общем на данный момент нуллабл это доп файл и никакой экономии/пропусков в самой колонке.
    ===
    Non-Nullable with "specialValue" >> Nullable
  • https://t.me/clickhouse_ru
    Ну, Есть Дейт который в теори БД говорит о том, что NULL недопустим, если исходить из этого - то проектировать становится проще, хотя после прочтения Дейта все становится проще)
  • https://t.me/clickhouse_ru
    @den_crane #147189 10:31 PM, 10 Mar 2020
    да нет, почему null-ы нужны иногда. Вот сейчас в КХ у меня лежит -1000F температура, и постоянно какие-нибудь грабли с min( или еще с чем-нибудь и я жалею что null не положил), а для дат например удобнее 0000-00-00 и 9999-12-31, для between
  • https://t.me/clickhouse_ru
    @nyoroon #147190 10:35 PM, 10 Mar 2020
    Null реально полезно там где значение может отсутствовать
  • https://t.me/clickhouse_ru
    @nyoroon #147191 10:36 PM, 10 Mar 2020
    И при этом 0 или -1 может быть валидным значением
  • https://t.me/clickhouse_ru
    @ployd ↶ Reply to #147164 #147192 10:56 PM, 10 Mar 2020
    leb128 ещё можно
  • https://t.me/clickhouse_ru
    @ployd #147193 10:57 PM, 10 Mar 2020
    Но проще забить на null. Мы null используем только если если разница семантическая между 0 и null.
  • https://t.me/clickhouse_ru
    @ployd ↶ Reply to #147192 #147194 10:59 PM, 10 Mar 2020
    Хм, чёт не туда сказанул. Хотел сказать, что можно на +1 все сдвинуть и место под null освободить.
  • https://t.me/clickhouse_ru
    ? в смысле внутри КХ зарезервировать значения в типах под null ?
    не получится, вся быстрая математика внутри cpu/sse сломается, cpu не в курсе как nulll-ы складывать, сравнивать
  • https://t.me/clickhouse_ru
    @ployd ↶ Reply to #147195 #147196 11:02 PM, 10 Mar 2020
    Это только для хранения. При распаковке будут нормальные nullable
  • https://t.me/clickhouse_ru
    @ployd #147197 11:03 PM, 10 Mar 2020
    Но для sse разложить в два массива все равно придётся, хех.
  • https://t.me/clickhouse_ru
    @ployd ↶ Reply to #147188 #147198 11:08 PM, 10 Mar 2020
    Забавно про дейта слышать в чате olap базы xd
  • https://t.me/clickhouse_ru
    @ployd #147199 11:08 PM, 10 Mar 2020
    А вообще известна не только его критика null, но и критика его критики)
  • https://t.me/clickhouse_ru
    @den_crane #147200 11:09 PM, 10 Mar 2020
    забавно что кто-то помнит вообще про дейта, я читал 20 лет назад последний раз, ниче не помню, помню что толстая
  • https://t.me/clickhouse_ru
    @ployd #147201 11:12 PM, 10 Mar 2020
    Ну он в вузах так или иначе даётся ещё, так что неудивительно
  • 11 March 2020 (274 messages)
  • Так оно для этого и создано :)
  • @1067679342 #147203 02:18 AM, 11 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @TrueCarry #147204 05:52 AM, 11 Mar 2020
    А подскажите пожалуйста в чем разница между max(x) и maxState(x) для mv. Это нужно для того чтобы собирать из распределенных таблиц данные?
  • ага, у нас почти все колонки такие, и для всех руками искать невалидные значения + логика приложения с добавлениями WHERE column<> invalidReserved, а когда аггрегация нескольких колонок, то это вообще не работает... тот ещё "фан"
  • https://t.me/clickhouse_ru
    @241186216 #147207 07:09 AM, 11 Mar 2020
    Какие ограничения вы делаете для пользователей КХ, что бы они не клали Кх потребляя слишком много памяти ? Вот допустим есть у на. 256 гигов на сервере. Какие лимиты по бест практис нужно выставить ?
  • @Shazo_Rus #147208 07:11 AM, 11 Mar 2020
    так жешь зависит от профиля нагрузки - какие запросы и как часто.
  • https://t.me/clickhouse_ru
    @241186216 #147209 07:17 AM, 11 Mar 2020
    Ну может практики есть..создать профили 1/4, 2/4,3/4,.. unlimit
  • https://t.me/clickhouse_ru
    @241186216 #147210 08:24 AM, 11 Mar 2020
    еще глупый вопрос, но что-то не могу initial_address из query_log в удобочитаемый вид конвертнуть. какая функция для этого?
  • https://t.me/clickhouse_ru
    @sni10 #147211 08:24 AM, 11 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    @unamedrus #147212 08:25 AM, 11 Mar 2020
    Там в виде ipv6 хранится?
  • https://t.me/clickhouse_ru
    @241186216 #147213 08:26 AM, 11 Mar 2020
    да, но там fixed string
  • https://t.me/clickhouse_ru
    @unamedrus #147214 08:29 AM, 11 Mar 2020
    Ну в ipv6 скорее всего можно скастить, но что бы получить ipv4 придется возможно написать функцию
  • @misterfaradey #147215 08:36 AM, 11 Mar 2020
    Joined.
  • @makseshina #147216 08:48 AM, 11 Mar 2020
    Joined.
  • @vuliad #147217 09:00 AM, 11 Mar 2020
    Всем привет! В каком формате должна быть дата в string, чтобы она нормально вставилась в DateTime? iso8601 не нравится ему- String is too long for DateTime: 2020-02-26T19:46:08+00:00
  • https://t.me/clickhouse_ru
    > When inserting data into ClickHouse, you can use different formats of date and time strings, depending on the value of the date_time_input_format setting.

    > Default value: 'basic'.

    > ClickHouse can parse only the basic YYYY-MM-DD HH:MM:SS format. For example, '2019-08-20 10:18:56'.
  • @vuliad ↶ Reply to #147218 #147219 09:07 AM, 11 Mar 2020
    Понял, спасибо!
  • https://t.me/clickhouse_ru
    @804865419 #147220 09:13 AM, 11 Mar 2020
    Всем доброго! Прошу оказать помощь.
    Есть Mssql с данными в 3 нормальной форме. Есть потребность переноса (отображения) этих данных в ClickHouse.
    Подскажите, пожалуйста, каким образом лучше сформировать таблицы в ClickHouse - в таком же нормализованном виде или произвести денонрмализацию в интересах производительности.
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #147220 #147221 09:14 AM, 11 Mar 2020
    а как в дальнейшем планируете пользоваться данными?
  • https://t.me/clickhouse_ru
    Для аналитических запросов.
  • https://t.me/clickhouse_ru
    @nicname #147223 09:16 AM, 11 Mar 2020
    в одну таблицу все (с)
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #147222 #147225 09:20 AM, 11 Mar 2020
    в таком случае, как показывает практика, имеет смысл разорбаться что такое OLAP вектор и привести таблицы к виду вектора.
    если таблиц мало - то да, можно просто сджойнить все в 1 таблицу.
    дело в том, что для CH - одна из самых дорогих операций, не group by не order by а join и избежав его - избавитесь от большого числа проблем с производительностью на серьезных аналитических запросах
  • https://t.me/clickhouse_ru
    @fly_gambit #147226 09:21 AM, 11 Mar 2020
    И справочники получается лучше не выносить а сливать все в одну таблицу?
  • https://t.me/clickhouse_ru
    @qwblnp ↶ Reply to #147226 #147228 09:28 AM, 11 Mar 2020
    для себя мы решили, что в нашем случае - справочники, как правило, не большие, и не сложные, а следовательно и джойн допустим 1000 записей - не существенен, хуже когда нужно сделать джойн 2 таблиц по 3-5 миллионов записей.
    так что нужно смотреть. справочник справочнику рознь.

    я как-то кидал скрин, как на сервере отъелось пол терабайта оперативки при джойне 2 таблиц по 30 миллионов записей =)
  • https://t.me/clickhouse_ru
    @qwblnp #147229 09:30 AM, 11 Mar 2020
    нашел
  • https://t.me/clickhouse_ru
    @blinkovivan #147230 09:34 AM, 11 Mar 2020
    Открытый код в Яндексе. Спринты по CatBoost и ClickHouse. 28 марта в Москве.
    https://events.yandex.ru/events/otkrytyj-kod-v-yandek-28-03-2020
    Link

    UPD: Нам очень жаль, но наша встреча переносится из-за ситуации с коронавирусом — мы не хотим подвергать вас даже минимальному риску заражения. Мы не отказываемся от планов провести встречу в нашем офисе, но выберем новую дату вместо 28 марта. Для тех, кто хочет попасть на мероприятие — регистрация по-прежнему открыта. Как только дата станет известна, мы обновим эту страницу и отправим статус рассмотрения заявки всем, кто прошёл регистрацию. Остаёмся на связи! *** Метод машинного обучения [CatBoost](https://catboost.ai/ "CatBoost") и аналитическая СУБД [ClickHouse](https://clickhouse.tech "ClickHouse") — технологии Яндекса с открытым исходным кодом. Поучаствовать в их разработке может любой желающий. 28 марта мы вновь проведём для разработчиков встречу в формате спринтов. Участники будут группами по 2–3 человека или индивидуально решать небольшие задачи. Вы посмотрите, как ведётся разработка CatBoost и ClickHouse, узнаете структуру их кода, научитесь писать и запускать тесты. И, мы надеемся, внесёте изменения…

  • https://t.me/clickhouse_ru
    None
  • https://t.me/clickhouse_ru
    Грац!
  • https://t.me/clickhouse_ru
    @804865419 #147233 09:47 AM, 11 Mar 2020
    Спасибо, большое!
  • @jaturken #147235 10:01 AM, 11 Mar 2020
    Joined.
  • @jaturken #147236 10:04 AM, 11 Mar 2020
    Добрый день.
    Подскажите, можно ли зафорсить обновление словаря, подключенного к PostgreSQl таблице? В документации нашёл расписание обновления, но не нашёл потенциальной команды "обновись"
  • https://t.me/clickhouse_ru
    @Shiz0man #147237 10:05 AM, 11 Mar 2020
    Joined.
  • https://t.me/clickhouse_ru
    System reload dictionary 'name'. Не оно?
  • @jaturken #147239 10:11 AM, 11 Mar 2020
    действительно, похоже оно. Спасибо!
  • @LeOnId_VoLoShIn #147240 10:14 AM, 11 Mar 2020
    всем привет есть вопрос. хочу получать дату с таблицы таким запросом
    ch.query(SELECT * FROM ${tableName} WHERE err LIKE '%device.geo.country%', (err, data) => {
    а получаю метадату
  • @LeOnId_VoLoShIn #147241 10:15 AM, 11 Mar 2020
    как пофиксить?
  • https://t.me/clickhouse_ru
    @lebnik #147242 10:31 AM, 11 Mar 2020
    Коллеги, почему строчка не добавляется, засетило 300 штук и теперь выдает:
    > Code: 252, e.displayText() = DB::Exception: Too many parts (300). Merges are processing significantly slower than inserts. (version 19.15.3.6 (official build))
  • https://t.me/clickhouse_ru
    а вы сколько инсертов в секунду делаете?
  • https://t.me/clickhouse_ru
    @lebnik #147244 10:37 AM, 11 Mar 2020
    @aslojno сделал много, знаю так не положено, тестировал, теперь вот жду, не понимаю почему так долго обрабатывает 300 строк.
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @m1khal3v #147246 10:39 AM, 11 Mar 2020
    мы например делаем инсерты раз в минуту, данные перед этим просто складываются, а потом отправляются одним большим куском в виде TSV файла
  • https://t.me/clickhouse_ru
    @lebnik #147247 10:40 AM, 11 Mar 2020
    @aslojno спасибо, читал, но я уже минут 10 подождал, а ошибка не уходит, кол-во строк в кликхаусте так же 300.
  • https://t.me/clickhouse_ru
    @m1khal3v #147248 10:40 AM, 11 Mar 2020
    а SHOW CREATE TABLE скиньте
  • https://t.me/clickhouse_ru
    @lebnik #147249 10:41 AM, 11 Mar 2020
    CREATE TABLE default.simple_event_raw (id UInt64, raw_data String, create_at DateTime DEFAULT now(), updated_at DateTime DEFAULT now(), sign_flag Int8) ENGINE = CollapsingMergeTree(sign_flag) PARTITION BY toYear(create_at) PRIMARY KEY id ORDER BY id SETTINGS index_granularity = 8192
  • @ssi444 #147250 10:46 AM, 11 Mar 2020
    Как применять при insert into формат CustomSeparated? Не пойму как задать разделитель и правила экранирования. Чтобы КХ не считал апостроф в начале и середине одного из полей "обрамляторами" поля
  • https://t.me/clickhouse_ru
    @iolebedev #147251 10:47 AM, 11 Mar 2020
    Коллеги, настраиваю доступ и кое что поставило меня в тупик. Мне надо одну БД сделать рид онли, а другую - разрешить на запись.
    Идея такая:
    - работает аналитик данных, человек;
    - есть общая БД-источник, туда стекаются данные из других внешних источников (это все - хранилище), эта БД - рид-онли для аналитиков;
    - есть БД конкретного пользователя, где он может вьюшки создавать, таблицы, держать и считать свои данные и тп.

    В документации вижу такое:
    https://clickhouse.tech/docs/en/operations/access_rights/
    You can't grant full access to one database and readonly access to another one.

    Серьезно? Какой можно посоветовать workaround?

    Первое что пришло на ум - создавать по 2 пользователя, но это не подойдет. В процессе работы с личной БД на запись необходимо иметь доступ на чтение в общую рид-онли базу.
  • https://t.me/clickhouse_ru
    Ну доступы прописываются через профиля, у пользователя может быть только 1 профиль с правами, потому мне видится только 2 пользователя. Но правда еще можно разграничить, через выполнение команды set profile = 'name', но как это впихнуть идей нет.
  • @919441052 #147253 11:10 AM, 11 Mar 2020
    Привет.

    Можно спросить про эту конструктор?
    https://a.yandex-team.ru/arc/trunk/arcadia/contrib/libs/clickhouse/libs/libcommon/include/common/LocalDateTime.h?rev=3832398#L76

    это возвращает по каким Таймзона ? Гринвич или локальный ?
  • https://t.me/clickhouse_ru
    Раньше (год назад) не было simpleaggregatingfunction работал только maxState
  • https://t.me/clickhouse_ru
    Можно в словари