• 01 December 2022 (238 messages)
  • https://t.me/clickhouse_ru
    Подозреваю, мог накосячить в рамках неоднократной вложенности arrayMap и передать вместо одномерного массива двумерный. Тогда ошибка логично звучит от CH
  • 22.9.x, запросы медленнее не стали и кол-во запросов не изменилось
  • https://t.me/clickhouse_ru
    @dimkas78 #301788 05:14 AM, 01 Dec 2022
    Всем привет!

    Коллеги, подскажите в каком направлении копать.
    Есть таблица, которую нужно перенести в другую базу на том же сервере Clickhouse.
    В свойствах исходной таблицы нет никаких кодеков и запрос вида

    select total_bytes / total_rows as bytes_per_row from system.tables where name = 'unique_table_name'

    выдаёт bytes_per_row примерно 52 байта.

    Если просто взять DDL от таблицы, поменять в нём имя базы данных и начать копировать данные запросом insert into ... select from,
    то на принимающей стороне показатель bytes_per_row сразу становится около 107 и далее только растёт.
    Если же применить ко всем полям принимающей таблицы кодек ZSTD(3), то показатель bytes_per_row падает до 60-64 байт,
    но это всё равно больше чем было.

    Вопрос - как в исходной таблице добились такой компактности и как это повторить в новой базе?
  • https://t.me/clickhouse_ru
    База, это что ? Кликхаус или в кликхаусе база данных ?
  • https://t.me/clickhouse_ru
    внутри одного сервера разные базы
  • https://t.me/clickhouse_ru
    Дак сделайте просто RENAME таблицы и таблица перенесется
  • https://t.me/clickhouse_ru
    Moving tables between databases is not supported for Replicated engine

    Поэтому двигаем "вручную"
  • https://t.me/clickhouse_ru
    А если сделать OPTIMIZE FINAL ?
  • https://t.me/clickhouse_ru
    Показатель bytes_per_row чуть-чуть ухудшается, так как total_bytes вырастает на 1-3%

    до оптимизации
    total_bytes|total_rows|bytes_per_row |
    3064084651| 28995308|105.67518893056766

    после
    total_bytes|total_rows|bytes_per_row |
    3107667403| 28995308| 107.1782856384902|

    Что характерно, для всех остальных таблиц такого эффекта не наблюдается - либо переносятся 1 к 1, либо ужимаются кодеками,
    а одна таблица сопротивляется :)
  • https://t.me/clickhouse_ru
    @yatoba ↶ Reply to #301794 #301796 05:58 AM, 01 Dec 2022
    смотрите глубже - какие есть парты в старой и новой табличке и сколько они занимают и какие типы имеют. Еще можно глянуть поколоночно какие колонки нормально сжимаются а какие нет и копать в эту сторону
  • https://t.me/clickhouse_ru
    скопировал целиком одну месячную партицию - разглядываю парты из system.parts,
    и там и там по 3 штуки,
    данных на принимающей стороне в 2.5 раза меньше - похоже "съел" ReplacingMergeTree-движок,
    все числовые параметры плюс-минус совпадают (с коэффициентом 2.5),
    единственное что бросается в глаза, то что на источнике у двух партов default_compression_codec равен ZSTD(3), а у третьего - LZ4,
    а на приёмнике обратная ситуация - у двух партов кодек LZ4, а у третьего - ZSTD(3)

    пошёл смотреть по отдельным столбцам
  • https://t.me/clickhouse_ru
    @Krisantis #301799 07:03 AM, 01 Dec 2022
    подскажите, а есть coalesce только в отношении пустых строк?
    что-то такое:
    strCoalesce('', 'er', 'ererf') -> 'er'
  • https://t.me/clickhouse_ru
    if(empty(''), 'er', 'ererf')
  • https://t.me/clickhouse_ru
    arrayFirst(x -> NOT isEmpty(x), ['', 'er', 'ererf'])
  • https://t.me/clickhouse_ru
    спасибо, я как раз такое хотел оптимизировать-свернуть в красивую функцию =)
  • https://t.me/clickhouse_ru
    спасибо
  • https://t.me/clickhouse_ru
    какой конкретно select?

    всякие там Engine=MySQL, Engine=PostgteSQL базы есть?
  • https://t.me/clickhouse_ru
    @392734528 #301805 08:22 AM, 01 Dec 2022
    Ребят нпомните ссылку пожалуйста на статью про потимизацию клика?
    там были указания как проверить разнаго рода нагрузки на клик.
    примеры зпросов и утилит (кажется)
    Прям очень надо
  • https://t.me/clickhouse_ru
    @hostadminonline #301809 08:57 AM, 01 Dec 2022
    всем привет
    подскажите плз, вот я точно где-то видел тему что есть какой-то тип таблицы в которую данные пишутся на 1 чтение, ну типа прочитал и данных нет
  • @ZaurBegiev #301810 08:58 AM, 01 Dec 2022
    Всем привет!
    Интересует такой момент - есть таблица фактов, она огромная и шардированная.
    Ещё есть частообновляемое поле, которое для возможности "джоина" этого поля хотим хранить словарём.
    Но словарь тоже большой. Вопрос - как хранится такой словарь? Должен ли он также быть распределённым, если он распределён между хостами, то как происходит это хранение (умножение полного объёма на количество нод или же хранится кусками)?
    Итоговая цель - уменьшить общую потребляемую оперативную память.
    Если есть что-то полезное почитать на эту тему - буду благодарен.
  • @eperesadka #301812 09:04 AM, 01 Dec 2022
    не могу в документации найти, можно ли убрать привилегию на alter table drop PARTITION?
  • @serlex777 #301813 09:13 AM, 01 Dec 2022
    Помогите пожалуйста разобраться с памятью для запросов. Есть max_memory_usage. Пишут, что он ограничивает память используемую для выполнения запроса. Но нигде не написано, что входит в эту память. Есть max_bytes_before_external_group_by которым можно ограничить память используемуею для группировки. Есть join_algorithm = 'auto'. Если сложный запрос с несколькими join можно что-то заставитю кроме сортировок и группировок делать через диск?
  • https://t.me/clickhouse_ru
    можете поиграться с типом алгоритма
    https://clickhouse.com/docs/en/operations/settings/settings/#settings-join_algorithm
    +
    уменьшить max_bytes_before_external_order_by
    уменьшить max_threads
  • https://t.me/clickhouse_ru
    судя по всему такого гранта нет

    SHOW CREATE TABLE system.grants;
    https://fiddle.clickhouse.com/a982efad-aec9-443a-a11d-142c668924fa

    не показывает ничего на DROP PARTITION ...
  • @lexandrop #301816 09:18 AM, 01 Dec 2022
    Привет. Вопрос не совсем по КХ, но по altinity-плагину для Grafana. В запросе в КХ есть использование макросов $from и $to. В самом запросе оно работает, проблем нет.
    Но также настроен алерт (legacy alerting), для алерта указана конструкция query(A, 30m, now), то есть, по идее, при проверке алерта запрос должен генериться не на основе выбранного в UI time range, а на основе (now-30m) и now - но на практике (используя Test Rule) я вижу, что нет, используется всё равно time range из UI. Возможно, кто-то сталкивался, и подскажет - это "норма", или мб я где-то туплю?
  • https://t.me/clickhouse_ru
    какая версия clickhouse-grafana?

    обновитесь до последней
  • 2.5.3, последняя и есть

    Grafana 9.3.0, тоже свежая (на предыдущей 9.2.6 поведение было идентичным).
  • https://t.me/clickhouse_ru
    в test rule если time range now и now-1h
    будет now

    в реальности без test rule оно пересчитывается нормально на golang части плагина
  • > в test rule если time range now и now-1h .. будет now
    Не уверен, что правильно понял. В моём случае, например, у меня в UI выбрано "last 7 days", а в алерте указано query (A, 30m, now)
    И, в итоге, когда делаешь Test Rule - видно по JSONу, что "общие" from и to графана генерит корректные (таймстемпы для "сейчас" и для "30 минут назад"), но, раскрывая далее детали генерируемого запроса - видно, что упоминаемые в "query" макросы $from и $to в итоговой "rawQuery" превращаются в другие таймстемпы: "сейчас" и "7 дней назад".

    > в реальности без test rule оно пересчитывается нормально на golang части плагина
    Вы имеете в виду, что функционал "Test Rule" не совсем правдив в данном случае, и на практике плагин будет использовать корректные таймстампы?
    Я начал копаться в этом потому, что у меня алерт выпал в "pending" тогда, когда должен был быть "ok" - потому у меня есть некоторые сомнения.
  • https://t.me/clickhouse_ru
    а попробуйте $__from и $__to
    возможно что-то поменялось в grafana и косяк вообще не в плагине
  • Вот интересно, а PK который и так все время в памяти включается в эту калькуляцию или нет? Не понятен момент, как КХ в самом начале выполнения запроса вылетает по memory_limit
  • Вы имеете в виду $__fromTime и $__toTime , упомянутые тут https://grafana.com/grafana/plugins/grafana-clickhouse-datasource/ в разделе Macros, верно? Или есть и просто $__from ?
    ClickHouse plugin for Grafana | Grafana Labs

    ClickHouse datasource plugin for Grafana

  • https://t.me/clickhouse_ru
    так стоп,
    https://grafana.com/grafana/plugins/grafana-clickhouse-datasource/

    это точно не altinty plugin
    ClickHouse plugin for Grafana | Grafana Labs

    ClickHouse datasource plugin for Grafana

  • Всё порядке, у меня установлен точно altinity плагин (скрин), то я просто почему-то думал, что https://grafana.com/grafana/plugins/grafana-clickhouse-datasource/ это страница Altinity плагина. Теперь у меня наконец-то в голове сошлось, почему у меня внутри самой графаны один набор макросов, а на той странице какой-то совсем другой :D Извините. Сейчас попробую предложенные вами макросы, отпишусь.
    ClickHouse plugin for Grafana | Grafana Labs

    ClickHouse datasource plugin for Grafana

  • https://t.me/clickhouse_ru
    этот плагин от grafana labs

    можете его тоже пробовать ... сравнивать что для вас удобнее
  • https://t.me/clickhouse_ru
    @Cinderel_1906 #301828 09:36 AM, 01 Dec 2022
    Приветствую всех! В активном поиске помощника. Работа удалённо, оклад хороший, нужно вести кабинет в тг боте,
    пишите в личные сообщения, без опыта если всему обучу и расскажу покажу
  • /report
  • Насколько я могу судить, $__from и $__to не помогли.

    Перед этим было: https://gist.github.com/alexandrpaliy/18bb4737ad80bf665334866b751cc380
    10: "from": 1669882073497,
    47: "to": 1669883873497
    но
    31: "query": "SELECT\n t,\n ... blablablabla ... FROM $table AS t1\nWHERE t1.time >= $from AND t1.time < $to\nGROUP BY t\nORDER BY t)\nORDER BY t\n",
    32: "rawQuery": "SELECT\n t,\n ... blablablabla ... FROM xxx.yyy AS t1\nWHERE t1.time >= 1669872600 AND t1.time < 1669883400\nGROUP BY t\nORDER BY t)\nORDER BY t",

    from должен быть 1669882073497 , но в запросе получился 1669872600

    Используя $__from и $__to: https://gist.github.com/alexandrpaliy/6d90751193296c593a7fa4e8cd36029f
    10: "from": 1669886030037,
    47: "to": 1669887830037
    но
    31: "query": "SELECT\n t,\n ... blablablabla ... FROM $table AS t1\nWHERE t1.time >= toDateTime($__from / 1000) AND t1.time < toDateTime($__to / 1000)\nGROUP BY t\nORDER BY t)\nORDER BY t\n",
    32: "rawQuery": "SELECT\n t,\n ... blablablabla ... FROM xxx.yyy AS t1\nWHERE t1.time >= toDateTime(1667295815561 / 1000) AND t1.time < toDateTime(1669887815561 / 1000)\nGROUP BY t\nORDER BY t)\nORDER BY t",

    from должен быть 1669886030037, но в запросе получился 1667295815561
    gist:18bb4737ad80bf665334866b751cc380

    GitHub Gist: instantly share code, notes, and snippets.

  • @lexandrop #301833 10:04 AM, 01 Dec 2022
    В общем, попробую проверить гипотезу, что это действительно проблема только при "Test Rule", и на практике алерт прилетать не будет.

    Спасибо за внимание)
  • https://t.me/clickhouse_ru
    включите дебаг лог на графане
    либо через переменную
    https://github.com/Altinity/clickhouse-grafana/blob/master/docker-compose.yaml#L59

    либо через конфиг
    https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#log

    from \ to должны браться из json данных которые вы передаете по идее
    clickhouse-grafana/docker-compose.yaml at master · Altinity/clickhouse-grafana

    Clickhouse datasource for grafana. Contribute to Altinity/clickhouse-grafana development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    @timson81 #301835 10:25 AM, 01 Dec 2022
    Добрый день, не нашел в документации команд которыми можно удалить бэкапы созданные через команды BACKUP TABLE. Есть какая то возможность правильно удалить бэкапы с S3 и синхронизировать это с метаданными в /var/clickhouse/disks?
  • https://t.me/clickhouse_ru
    мы его не используем. у нас нет distributed  или replecated таблиц. Еще куда можно глянуть подскажите?
  • спасибо, попробую. но переживаю, что потом не найду ничего в том логе, панелек/алертов достаточно много :)
  • https://t.me/clickhouse_ru
    ну там grep vertamedia сделать можно
  • 👌
  • https://t.me/clickhouse_ru
    о я нашел, такое поведение в таблице с движком rabbit, а есть возможность создать таблицу с таким же поведением только без подключения к ребиту ?
  • @shadowusr #301841 10:45 AM, 01 Dec 2022
    Привет. Скажите, пожалуйста, насчет нормализации данных. Хочу добавить source столбец ко всей таблице. source – по смыслу источник данных, строка, например, source = “metrika”.

    Есть ли смысл создавать 2 таблицы для нормализации, типа sources, где хранится строка и ID, и таблицу связи? Сейчас source вообще один для всех миллиардов записей, и максимум source’ов будет до 10. Что-то такое помню, что clickhouse не очень хорошо работает с join
  • @shadowusr #301842 10:47 AM, 01 Dec 2022
    Погрепал чат, везде ранее рекомендовали жертвовать нормализацией и хранить как строки, типа повторы будут оптимизированы. Тогда так и сделаю, наверное
  • https://t.me/clickhouse_ru
    это называется exactly once семантика

    engine=Rabbit engine=Kafka - работает в связке с Materialized View

    но для engine=Kafka сделать exactly once нельзя

    и нужен всегда внешний источник...
  • https://t.me/clickhouse_ru
    нет такого движка

    вы наверное перепутали engine=Buffer которая флашит периодически?
  • https://t.me/clickhouse_ru
    нет храните тупо как LowCardinality(string)
  • https://t.me/clickhouse_ru
    @hostadminonline #301847 10:54 AM, 01 Dec 2022
    https://clickhouse.com/docs/ru/engines/table-engines/integrations/rabbitmq
    Описание
    Запрос SELECT не очень полезен для чтения сообщений (за исключением отладки), поскольку каждое сообщение может быть прочитано только один раз.

    он же явно использует какой-то стандартный движок для реализации такого поведения
    RabbitMQ | ClickHouse Docs

    rabbitmq-engine}

  • https://t.me/clickhouse_ru
    @hostadminonline #301848 10:55 AM, 01 Dec 2022
    причем я как-то давно работал с движком rabbiMQ он был очень не проработан и мы отказались от этого ... но я запомнил что он давал прочитать данные только 1 раз
  • окей, спасибо!
  • https://t.me/clickhouse_ru
    нет
  • https://t.me/clickhouse_ru
    @freedomwarri0r #301851 11:20 AM, 01 Dec 2022
    Всем привет
    Клик начал выдавать такое:

    SELECT * FROM landings.client_clicks order by date desc limit 10
    SQL Error [159]: ClickHouse exception, code: 159, host: 127.0.0.1, port: 8123; Read timed out

    Куда копать?
    Спасибо
  • https://t.me/clickhouse_ru
    @jahspear #301853 11:23 AM, 01 Dec 2022
    Привет! Можете помочь с запросом? Дано: на сервере база, 4 таблицы, и на локальном компе такая же база. Серверная пополняется, локальную надо периодически синхронизировать. Нужен селект который соберет все из серверной базы, чего еще нет в локальной. У меня какие-то многоэтажные конструкции строятся, а ведь наверняка это как-то просто решается... Записи индексируются по полю time_id, на каждый time_id по многу строк на сервере добавляются во все 4 таблицы
  • https://t.me/clickhouse_ru
    @jahspear #301854 11:24 AM, 01 Dec 2022
    Хотя бы каркас куда копать
  • https://t.me/clickhouse_ru
    почитайте про snowflake id
    генерируйте в приложении при вставке на серверную базу
    а дальше просто INSERT INTO local_table FROM remote('server:9000', remote_table) WHERE snowflake_id>( SELECT max(snowflake_id) FROM local_table)
  • https://t.me/clickhouse_ru
    @jahspear #301856 11:26 AM, 01 Dec 2022
    ага спасибо пошел читать
  • https://t.me/clickhouse_ru
    А в логах такое:
    DB::Exception: Too many parts (100000) in all partitions in total. This indicates wrong choice of partition key. The threshold can be modified with 'max_parts_in_total' setting in <merge_tree> element in config.xml or with per-table setting.
  • В итоге, как оказалось, если использовать $from и $to - то туда подставляются какие-то вообще неведомые мне значения. При том, что в alert query постоянно было указано query(A, 30m, now), мне на одном дашборде туда прилетало now-3h и now-20m, на другом - нечто типа now-24h и now-1h.

    Когда заменил ручную конструкцию с $from и $to на $timeFilter - заработало как часики.
    Имеет смысл репортить на гитхаб?
  • копать в ddl таблицы, смотреть, что это там за партиционирование такое
    сделать новую нормальную таблицу, перелить данные туда
  • https://t.me/clickhouse_ru
    @whitethemight #301860 11:53 AM, 01 Dec 2022
    Привет всем!
    Подскажите как я могу отключить данный лог?
    session_log
  • https://t.me/clickhouse_ru
    А как посмотреть ddl?
    <ele ,kfujlfhty
  • show create table, либо в system.tables
  • https://t.me/clickhouse_ru
    CREATE TABLE landings.client_clicks
    date DateTime('Europe/Paris),
    host String,
    click_id String
    )
    ENGINE = MergeTree()
    PARTITION BY click_id
    ORDER BY date
    SETTINGS index_granularity = 8192
    Вот так вот она создана
  • https://t.me/clickhouse_ru
    да, зарепотите пожалуйста...
    если в аттач сразу .json с дашбордом сделаете . вообще хорошо будет
  • https://t.me/clickhouse_ru
    убирайте PARTITION BY click_id
  • https://t.me/clickhouse_ru
    меняйте на PARTITION BY toYYYYMM(date)
  • https://t.me/clickhouse_ru
    Спасибо, буду пробовать
  • https://t.me/clickhouse_ru
    @nataschachu #301869 12:05 PM, 01 Dec 2022
    Привет! Подскажите, пожалуйста, такое) Хочу попробовать семплирование. Как правильно записать выражение для SAMPLE, если ORDER BY timestamp -- тип поля DateTime?
  • https://t.me/clickhouse_ru
    @Begunini #301870 12:06 PM, 01 Dec 2022
    Подскажите, может кто помнит, у CH есть возможность исполнения пользовательских функций из файлов на сервере, написанных на питоне ? Я где-то кажется видел это, но перерыл всю документацию, не могу найти сейчас. Стандартные функции не подохдят, нужно один алгоритм на сторону сервера закинуть. n-граммное сравнение строк, увы, не всегда спасает, на локальной машине все же лучше с моей задачей сравнения строк справлялся алгоритма рассчета расстояния Левенштейна, хочу перенести на сторону базы.
  • https://t.me/clickhouse_ru
    благодарю!
  • https://t.me/clickhouse_ru
    у вас есть какой то user_id или еще какой то высокардинальное поле которое равномерно по всем партам разбросано?
  • https://t.me/clickhouse_ru
    не файлов а функций...
    https://clickhouse.com/docs/en/sql-reference/functions/#executable-user-defined-functions
    Functions | ClickHouse Docs

    There are at least\* two types of functions - regular functions (they are just called “functions”) and aggregate functions. These are completely different concepts. Regular functions work as if they are applied to each row separately (for each row, the result of the function does not depend on the other rows). Aggregate functions accumulate a set of values from various rows (i.e. they depend on the entire set of rows).

  • https://t.me/clickhouse_ru
    Вот, то что и искал. Благодарю )
  • https://t.me/clickhouse_ru
    есть, вроде) uid и sessionId, но они не числовые. Нужно числовое использовать же?
  • https://t.me/clickhouse_ru
    А мне определенно начинает нравиться кликхаус, хотя заставить комфортно работать с шарпами чутка попотел, потому что имеющиеся либы, мягко говоря, оставляют желать лучшего.
  • https://t.me/clickhouse_ru
    не обязательно
    можно
    SAMPLE BY int32Hash(sessionid)
  • https://t.me/clickhouse_ru
    напишите свою
  • https://t.me/clickhouse_ru
    спасибо!
  • https://t.me/clickhouse_ru
    у вас сколько записей в таблице?
  • https://t.me/clickhouse_ru
    кстати, а почему нельзя по click_id ?
  • https://t.me/clickhouse_ru
    да пока нисколько, но будет много, миллионы) это метрики с умных устройств
  • https://t.me/clickhouse_ru
    Пока для клика сделал костыль в виде маппера объектов данных для их вставки к либе DarkWanderer/ClickHouse.Client. ORM-решения слабоватые и багованные. Потом может займусь в свободное время. Пока тарантул дружил с шарпами, лучший из вариантов найденных либ пришлось почти на половину переписать, даже сериализацию - банально не было поддержки UUID.
  • https://t.me/clickhouse_ru
    потому что таблица работать перестанет очень быстро с too many parts ошибкой

    у вас миллионы записей с одним и тем же click_id?

    PARTITION BY сильно_уникальное_значнеие
    это куча каталогов на диске с мелкими файлами... которые не мержатся между собой

    как вставка так и select очень быстро умрут..

    https://kb.altinity.com/engines/mergetree-table-engine-family/pick-keys/
    How to pick an ORDER BY / PRIMARY KEY / PARTITION BY for the MergeTree-family table

    How to pick an ORDER BY / PRIMARY KEY / PARTITION BY for the MergeTree table.

  • https://t.me/clickhouse_ru
    Да, click_id не уникален.
  • @palladiys #301889 12:22 PM, 01 Dec 2022
    привет, подскажите, пожалуйста есть ли аналог filter (where …) из postgres в clickhouse?
  • https://t.me/clickhouse_ru
    @Rnjprox #301891 12:26 PM, 01 Dec 2022
    Всем привет. Возникла проблем с чтением авро схемы через kafka engine. Имеется авро схема следующего формата
    'a': 'test',
    'b': 'test',
    'c': {
    'd': 2,
    'e': true,
    'f': 'test'
    }
    и возникла проблема, как описать ключ
    c
    . Думал сделать через Map, но есть проблема, тип у values может быть разный. И описать все вложенные поля тоже не получается, потому что неизвестно сколько их придёт. Есть ли какие нибудь варианты, как это можно решить?
  • https://t.me/clickhouse_ru
    @BarVadim #301892 12:27 PM, 01 Dec 2022
    Добрый день, подскажите пожалуйста, есть база ХХХ atomic, переименовать ее в YYY, запрос не выполняется, в чем может быть причина?
  • https://t.me/clickhouse_ru
    Если бы это работало как индексы в привычных SQL, где древовидно раскладывается ключ, то может быть. Но если это предположительно рандомные гуиды, то получится партиционирование по файлу на значение. В этом случае не просто теряется смысл этого партиционирования, но как и указали выше, всему есть предел, потому что идет слишком сильная фрагментация данных и банально начинает влиять работа с файлом разметки через ОС, равно как и раздувается явно идентичное хранилище в самой базе. Так что даже не достигая этого предела самой базы, начнет экспоненциально падать скорость работы по достижению энного числа партиций. Операции чтения/записи файлов, открытие соответствующего потока - это одни из самых ресурсозатратных процедур при работе с низкоуровневыми API системы. Хуже навскидку могу сказать лишь выделение потока процессора.

    Не тому ответил изначально.
  • https://t.me/clickhouse_ru
    @komasnsee #301895 12:30 PM, 01 Dec 2022
    Всех приветствую. Кому интересен ЛЕГАЛЬНЫЙ зарабаток - отпишите мне в лс. Расскажу , всё объясню. В день 200 баксов можно делать не выходя из дома.
  • https://t.me/clickhouse_ru
    Парсер в DataGrip старый и не знает такой команды, пишите через clickhouse-client
  • tojsonstring?
  • @shadowusr #301898 12:36 PM, 01 Dec 2022
    Подскажите, пожалуйста, а когда я создаю materialized view над ReplicatedMergeTree таблицей, у MV тоже должен быть replicated движок или обычный?
  • https://t.me/clickhouse_ru
    Версия 2022.2.5 с драйвером 0.3.2.11 работает нормально, чисто линтер голову дурит.
  • https://t.me/clickhouse_ru
    1. шардируйте вашу таблицу по некому достаточно кардинальному полю, всякие user_id обычно неплохо подходят.

    Словарь тоже шардируйте.
    Если он жирный то посмотрите в сторону sparse_hashed (в 3 раза меньше, в 3 раза медленее)
    Если все еще жирный, то посмотрите в сторону cache словарей.

    Возможно имеет смысл материализовать данную колонку для старых данных, которые маловероятно что обновятся
  • https://t.me/clickhouse_ru
    А, ну мб поправили.

    Но вообще если из странной ошибки датагрип не может выполнить запрос, то зачастую это проблема в парсере самом датагрипе, и можно выполнить через clickhouse клиент
  • Если вставка и/или чтение делаются не всегда через одну и ту же реплику с не реплицированным MT, то да
  • https://t.me/clickhouse_ru
    Тоже Replicated
    Смотрите вебинар
    https://kb.altinity.com/altinity-kb-schema-design/materialized-views/#materialized-views
  • https://t.me/clickhouse_ru
    У меня линтер тоже подсвечивает, что TABLE expected, got 'database' и слово database подчеркнуто красным, но при этом все работает )
  • https://t.me/clickhouse_ru
    Мне при инсерте нужно
  • Понял, спасибо большое !
  • https://t.me/clickhouse_ru
    @komasnsee #301907 12:40 PM, 01 Dec 2022
    Всех приветствую. Кому интересен ЛЕГАЛЬНЫЙ зарабаток - отпишите мне в лс. Расскажу , всё объясню. В день 200 баксов можно делать не выходя из дома.
  • https://t.me/clickhouse_ru
    @komasnsee #301908 12:40 PM, 01 Dec 2022
    Всех приветствую. Кому интересен ЛЕГАЛЬНЫЙ зарабаток - отпишите мне в лс. Расскажу , всё объясню. В день 200 баксов можно делать не выходя из дома.
  • https://t.me/clickhouse_ru
    /report
  • https://t.me/clickhouse_ru
    @komasnsee #301910 12:41 PM, 01 Dec 2022
    о неет
  • https://t.me/clickhouse_ru
    @komasnsee #301911 12:41 PM, 01 Dec 2022
    за чтооо
  • https://t.me/clickhouse_ru
    @alexlighting #301913 12:43 PM, 01 Dec 2022
    Может он разработчик
  • https://t.me/clickhouse_ru
    @alexlighting #301914 12:43 PM, 01 Dec 2022
    ))
  • https://t.me/clickhouse_ru
    @klamas #301916 12:51 PM, 01 Dec 2022
    тестировщик, похоже
  • https://t.me/clickhouse_ru
    В query_log в profile_events
  • https://t.me/clickhouse_ru
    не могу понять что это и где. в квери логе такой колонки нет. это другая таблица? такой нет у нас. её нужно включить?
  • https://t.me/clickhouse_ru
    вот тут пример

    https://kb.altinity.com/altinity-kb-useful-queries/query_log/
    Handy queries for a system.query_log

    Handy queries for a system.query_log.

  • https://t.me/clickhouse_ru
    @utkinmaximand #301921 01:03 PM, 01 Dec 2022
    Всем привет, подскажи могу ли я как то сделать partition by по колонке которую агрегирую с помощью движка AggregatingMergeTree в materialized view.
  • https://t.me/clickhouse_ru
    Не можете. Будут разные партиции - не будет агрегации
  • $from and $to macros use UI time range in alert queries · Issue #458 · Altinity/clickhouse-grafana

    Latest grafana 9.3.0 with legacy alerting. According to https://grafana.com/grafana/plugins/vertamedia-clickhouse-datasource/, "Macros support": $from - replaced with (timestamp w...

  • https://t.me/clickhouse_ru
    Спасибо большое, какой то альтернативны я так понял тут нет?
  • https://t.me/clickhouse_ru
    Семплирование это очень сложная штука и она полезна только очень большим ребятам типа яндекса, уверен в этом чатике ни у кого нет семплирования. И мало кто понимает как оно на самом деле работает -- без понимания им пользваться нельзя. https://kb.altinity.com/altinity-kb-queries-and-syntax/sampling-example/ https://kb.altinity.com/altinity-kb-queries-and-syntax/altinity-kb-sample-by/
    Sampling Example

    Clickhouse table sampling example

  • https://t.me/clickhouse_ru
    @nataschachu #301926 01:09 PM, 01 Dec 2022
    ну мы типа яндекса)
  • https://t.me/clickhouse_ru
    @nataschachu #301927 01:09 PM, 01 Dec 2022
    спасибо!
  • https://t.me/clickhouse_ru
    @nataschachu #301928 01:09 PM, 01 Dec 2022
    почитаю
  • https://t.me/clickhouse_ru
    планируете 600 серверов и 10 тыс. пользователей?
  • https://t.me/clickhouse_ru
    нет 🙂 а что под пользователями-то понимается?
  • https://t.me/clickhouse_ru
    Тенанты
  • В этом чатике есть люди едва ли не из всех крупнейших IT компаний РФ.
  • https://t.me/clickhouse_ru
    Нет. Надо делать иначе. Зачем вам партиции?
  • https://t.me/clickhouse_ru
    Поиск будет по этой колонке, так как агрегирую дату
  • https://t.me/clickhouse_ru
    ой да бросьте
  • https://t.me/clickhouse_ru
    @nataschachu #301936 01:13 PM, 01 Dec 2022
    А чего? Алексей прав
  • @atzedi #301937 01:13 PM, 01 Dec 2022
    конторам поменьше топикстартер не нужон
  • https://t.me/clickhouse_ru
    Ну не надо вам этого
  • https://t.me/clickhouse_ru
    А почему такое не сделать просто с полем time_id? Типа WHERE time_id>( SELECT max(time_id) FROM local_table) ?
  • https://t.me/clickhouse_ru
    @jahspear #301940 01:15 PM, 01 Dec 2022
    Или я что-то не так понял про snowfalake_id? Вроде оно тут используется именно как у меня time_id, только формат поля другой
  • https://t.me/clickhouse_ru
    @den_crane #301942 01:16 PM, 01 Dec 2022
  • https://t.me/clickhouse_ru
    @nataschachu #301943 01:16 PM, 01 Dec 2022
    в закреп, а то потеряется
  • https://t.me/clickhouse_ru
    Просто получается что дата не в индексе и не партицирована , на скорости это не скажется?
  • https://t.me/clickhouse_ru
    Хочется и рыбку съесть и ... с агрегацией
  • @ivanio11 #301946 01:24 PM, 01 Dec 2022
    Всем привет в системных логах есть параметр
    memory_usage (UInt64) — Memory consumption by the query.
    А в чем измеряется ?? Биты или байты ?
  • https://t.me/clickhouse_ru
    байты
  • https://t.me/clickhouse_ru
    @Rnjprox #301949 01:26 PM, 01 Dec 2022
    Code: 44. DB::Exception: Type String is not compatible with Avro union:
    [
    "string",
    "long",
    "double",
    "boolean",
    "null"
    ]
    Мб кто сталкивался с таким? Мб есть варианты, как в kafka engine тип определить?
  • @pyatkaubiyca #301950 01:32 PM, 01 Dec 2022
    Всем привет, ребята.
    Короткий вопрос - можно ли как-то MV скопировать вместе с данными ?
  • https://t.me/clickhouse_ru
    @brbrbr ↶ Reply to #301950 #301951 01:44 PM, 01 Dec 2022
    MV не хранит данные. Она получает копию вставляемых данных в отслеживаемую таблицу, что-то с ними делает и кладёт результат в целевую таблицу. Всё.
  • Это раньше так было с явным TO, нынче целевая таблица может быть создана вместе с MV и спрятана за его фасадом. Не знаю, зачем сделали такое "удобство", если из-за него люди перестают понимать, что такое MV.
  • https://t.me/clickhouse_ru
    потому что вероятность повторяния time_id не нулевая. ну разве что вы там DateTime64 для этого будете держать...
  • https://t.me/clickhouse_ru
    раньше? в 2015 ?
  • https://t.me/clickhouse_ru
    @brbrbr ↶ Reply to #301952 #301955 01:48 PM, 01 Dec 2022
    Вроде и раньше был вариант без TO, тогда создавалась таблица .innerчё-тотам и результат клался в неё. Т.е. механика была такой же.
  • Ну я точно не вспомню уже когда.
  • https://t.me/clickhouse_ru
    Пишите issue на их youtrack, если не писать, то ничего не сделают
  • https://t.me/clickhouse_ru
    Конструкции If, то есть countIf(col=5)
  • @shadowusr #301959 01:52 PM, 01 Dec 2022
    А можно ли выполнить PARTITION BY по агрегируемому столбцу в AggregatingMergeTree? То есть так: PARTITION BY toStartOfMonth(minMerge(timestamp)) ?

    Сейчас кидает ошибку minMerge(timestamp) is found in wrong place
  • https://t.me/clickhouse_ru
    не можно. Будут разные партиции - не будет агрегации
  • То есть в случае AggregatingMergeTree вообще не нужно использовать partition by?
  • https://t.me/clickhouse_ru
    это зависит, иногда обязательно иногда наоборот
  • https://t.me/clickhouse_ru
    Вы не правильные вопросы задаёте
  • хм. А как понять, когда обязательно? В доке не наблюдаю данную информацию :(
  • https://t.me/clickhouse_ru
    Я делаю эксперименты. Много.
  • https://t.me/clickhouse_ru
    и не только рф:)
  • Ну а можно где-то об этом почитать подробнее?
    Честно говоря, даже не знаю, какие тут могут быть подводные камни. Может если количество данных у меня суммарное в агрегированной таблице ~ 1 млн, то и партиции не нужны.

    То есть агрегация не может схлопнуть несколько строк, если они лежат в разных партициях, я правильно понимаю из вашего прошлого сообщения?
  • https://t.me/clickhouse_ru
    (*) Я не использую семплирование, но буду :)

    Вряд ли такое, конечно... Надо всего лишь из продакшена правильно выбирать данные для стейжинга.
  • https://t.me/clickhouse_ru
    Это переупоощение. Но да
  • Понятно, спасибо большое за ответы. Буду пытаться еще гуглить и экспериментировать
  • https://t.me/clickhouse_ru
    Спрашивайте тут с конкретными примерами. Тут в чатике есть все ответы. Все вопросы уже задавали. Я помню как найти ответы. Поэтому не проблема
  • https://t.me/clickhouse_ru
    Именно так, поэтому не повторяются
  • https://t.me/clickhouse_ru
    Да, для разовых копирований такое работает. Для непрерывного нет.
  • https://t.me/clickhouse_ru
    Понял, попробую, спасибо
  • https://t.me/clickhouse_ru
    @jahspear #301975 02:24 PM, 01 Dec 2022
    Ведь если у меня периодическая синхронизация, это все разовые копирования, так?
  • https://t.me/clickhouse_ru
    так
  • https://t.me/clickhouse_ru
    @jahspear #301977 02:37 PM, 01 Dec 2022
    Замечательно, спасибо
  • @overflowingd #301978 02:47 PM, 01 Dec 2022
    Привет, ребята, позвольте уточнить пару деталей относительно индексов:
    - за счет того, что primary key строится поблочно и для каждой колонки есть свои .mrk файлы, то порядок колонки при создании индекса имеет уже куда меньшее значение при поиске данных нежели к примеру в ситуациях с btree? Скажем, если я произведу поиск по колонке, которая находится на втором месте в индексе, я не замечу таких же потерь в скорости, как в btree?
    - приводят ли к значительным ускорениям skip индексы, накладываемые на колонки входящие в primary key? Сейчас у нас есть таблица, которая занимает уже более 6 терабайт и primary key, который на 100 млрд записей давал ответы за миллисекунды, сейчас выдает ответы по ~15 секунд
  • https://t.me/clickhouse_ru
    - порядок колонки вообще никак не влияет, и дело не в .mrk и primari.idx
    дело в том что это data skip индекс, то есть он не ищет где ваши данные, а применяется при фильтрации и структуры индекса просто говорят "искомых данных тут нет" поэтому блок можно пропустить...
    кроме того, в btree тоже с чего бы порядку в таблице влиять на что-то, в btree кардинальность влияет и селективность

    - не надо делать data skip для pimary key полей, primary.idx ИТАК ВЕСЬ в памяти

    > Сейчас у нас есть таблица, которая занимает уже более 6 терабайт и primary key, который на 100 млрд записей давал ответы за миллисекунды, сейчас выдает ответы по ~15 секунд

    а что вы сделали то для этого? Таблицу поменяли как то ? запросы как то поменяли что выборка стала по другому работать?
  • https://t.me/clickhouse_ru
    влияет примерно также как в btree.

    при поиске по колонке которая далеко от leading position вы находите запись в индексе и прыгаете в таблицу, и чем дальше записи (меньше локализация) тем больше ranges надо прочитать из таблицы, тем медленнее запрос, в итоге для высококардинальных колонок которые в индексе позади другой высокардинальной колонки надо прочитать все засечки, всю таблицу.

    Представьте себе таблицу ORDER BY (A , B )
    A и B просто два рандома Int64
    В индексе будет
    1 1
    8192 1
    16384 1
    ....
    т.е. для B=45645654 надо прочитать все ренджи (все засечки)
  • https://t.me/clickhouse_ru
    @den_crane #301982 03:13 PM, 01 Dec 2022
    > Сейчас у нас есть таблица, которая занимает уже более 6 терабайт и primary key, который на 100 млрд записей давал ответы за миллисекунды, сейчас выдает ответы по ~15 секунд
    скорее всего причина в другом, либо загрузка марков в кеш, либо много партиций сканируется и теряется скорость на random i/o и на загрузке марков
  • Спасибо за ответ.

    » а что вы сделали то для этого? Таблицу поменяли как то ? запросы как то поменяли что выборка стала по другому работать?

    Ничего, объемы данных выросли с ~10млрд до ~500млрд записей в таблице

    UPD
  • Понял Вас, благодарен за ответ.
  • https://t.me/clickhouse_ru
    а я не до конца понял вопрос

    да порядок полей в primary key чрезвычайно важен
  • https://t.me/clickhouse_ru
    @den_crane #301986 03:18 PM, 01 Dec 2022
    ну и чаще всего проблема решаема в частном случае, либо MV, либо проекция, либо bloom

    почему в частном случае? Т.е. тут смешная штука получается, можно сделать инверсный индекс и прыгать из него в первичный ключ и затем читать данные из таблицы по первичному ключу, но профит теряется если индекс возвращает больше чем N записей, т.е. фулскан становится быстрее, это очень неожиданно если сравнивать с обычными базами, т.е. в КХ sparse index и чтение всей засечки стреляет в ногу намного быстрее.
  • https://t.me/clickhouse_ru
    @kizimenko #301987 03:36 PM, 01 Dec 2022
    как лучше сделать если данные с устройства снимаются раз в 30 секунд, а выводим их минимально с интервалом 5 минут ? MV c квантилями довольно медленные, AVG уже интереснее. Пока ощущение что проще прям по сырым считать AVG. КвантильТдайджест тоже пробовал, не дает буста.
  • Понял, 🙏
  • https://t.me/clickhouse_ru
    просто надо использовать quantilesTDigestState а не quantilesState, тогда все будет ОК.

    https://gist.github.com/den-crane/c4d85bf11035f0844c8bbf6ae191fa22

    и avg <> quantiles, quantiles это median - это совершенно разные функции с разной мат. сложностью

    avgState с тысячу раз меньше чем medianState
  • https://t.me/clickhouse_ru
    я вчера как раз по вашей рекомендации переделал на TDigest, не увидел прироста, понимаю что они считают разные значения, короче там где допустимо видимо лучше avg. Думал мало ли есть что-то еще =)
  • https://t.me/clickhouse_ru
    тут еще надо смотреть запросы, возможно что влияет что-то другое, например из-за неправильного индекса и granularity читается слишком много данных (лишних)
  • https://t.me/clickhouse_ru
    @kizimenko #301992 03:55 PM, 01 Dec 2022
    если скрин норм, то вот как выглядит вьюшка

    Запрос обычно содержит набор id и вывод двух метрик, которые квантиль 95
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    а сколько строк в результате запроса и сколько в статистике processed ?
  • https://t.me/clickhouse_ru
    Elapsed: 1.100 sec. Processed 133.88 thousand rows, 75.02 MB (121.76 thousand rows/s., 68.23 MB/s.)
  • https://t.me/clickhouse_ru
    @kizimenko #301996 04:04 PM, 01 Dec 2022
    Это я на тестовом гоняю, на боевом побольше данных, но скорость работы похожа.
    Все в кубике в яндекс облаке, клик тоже в кубике, не менеджед. В Лимиты CPU не упирается
  • https://t.me/clickhouse_ru
    >Processed 133.88 thousand rows

    а строк сколько вернулось? одна?

    >121.76 thousand rows/s., 68.23 MB/s.
    но конечно да, обычно миллиарды строк и десятки гигабайт в сек. обрабатывается
  • https://t.me/clickhouse_ru
    нет, Showed first 10000, я лимит забыл указать
  • https://t.me/clickhouse_ru
    @kizimenko #301999 04:11 PM, 01 Dec 2022
    Может дело в дисках сетевых что в яндекс облаке даются к Compute Cloud
  • https://t.me/clickhouse_ru
    если 3 раза выполнить одинаковая скорость?
  • https://t.me/clickhouse_ru
    да, все 3 раза больше 1 секунды и (128.42 thousand rows/s., 71.69 MB/s.)
  • https://t.me/clickhouse_ru
    @evgeniym #302002 04:14 PM, 01 Dec 2022
    Привет всем.
    Kafka->CH
    Подскажите кто сталкивался с подобной ошибкой:
    "StorageKafka (events_income): Can't get assignment. Will keep trying"
  • https://t.me/clickhouse_ru
    я думаю все.

    включайте debug и читайте сообщения в логе что были перед этим сообщением
  • https://t.me/clickhouse_ru
    @evgeniym #302004 04:15 PM, 01 Dec 2022
    Спасибо, сейчас.
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @timson81 #302006 04:45 PM, 01 Dec 2022
    А кто пользовался clickhouse-backup и делал бэкапы на S3. Подскажите может знаете почему, при попытке забэкапить таблицу, на S3 создается директория с бэкапом, пишуться файлы json с метаданными, схемой таблицы, но нет самих данных (tar файла)?
  • https://t.me/clickhouse_ru
    1. очень старый clickhouse-backup который не умеет атомик базы
    2. задан параметр schema, бекапить только схему
    3. другая ошибка, debug: true должен помочь
  • https://t.me/clickhouse_ru
    Спасибо
  • https://t.me/clickhouse_ru
    @AnKochem #302009 05:21 PM, 01 Dec 2022
    Пытаюсь настроить репликацию из мускула с эксперементальным MaterializedMySql движком БД
    Реплицирую пока одну таблицу. Удалось создать ДБ, схему он вычитал, таблицу создал. Но запросы к таблице валятся с ошибками:

    create database db2 ENGINE = MaterializedMySQL('mysq:3306', 'db', 'root', 'root') SETTINGS materialized_mysql_tables_list = 'transactions'
    show create table - отрабатывает
    но когда что-то запрашиваю из таблицы, выдает ошибки
    SELECT *
    FROM db2.transactions

    Query id: 9744551e-3886-40a2-8ac5-b4c75ff99928

    0 rows in set. Elapsed: 0.002 sec.

    Received exception from server (version 22.11.1):
    Code: 100. DB::Exception: Received from localhost:9000. DB::Exception: Access denied for user root. (UNKNOWN_PACKET_FROM_SERVER)

    Никто не сталиквался?
  • https://t.me/clickhouse_ru
    @kirmark #302010 05:28 PM, 01 Dec 2022
    Добрый вечер!

    # Нужен на проект человек провести аудит нашего нового кластера clickhouse

    Мы переехали на новый кластер clickhouse, и все работает, но нужен аудит того, что сделано. Ищу человека, у которого больше опыта с нашим объемом данных в clickhouse, чем у меня. На проект, за деньги.

    # Чего бы хотелось от человека:

    - Сам руками разворачивал уже кластер и с шардированием и с репликацией
    - Настраивал, как с десятков сервисов писать сотни миллионов записей в день в кафку, а потом консьюмерами перекладывать в clickhouse
    - Понимал, как масштабировать кафку и консьюмеры, какие альтернативы кафки есть, как они работают
    - Описывал структуру агрегации данных через MV
    - Настраивал словари и другие способы подтянуть нужные данные из развернутых рядом строчных БД
    - Желательно не компания, а именно человек

    # Что надо будет сделать в рамках аудита (будут еще детали, пока в общих словах):

    - Сам аудит. Надо изучить наши сервера, настройки, шарды, структуру таблиц и то как сервисы пишут данные в таблицы и описать, что в порядке, что можно оптимизировать, а что неверно настроено.
    - Изучить текущее решение по вставке данных из сервисов в clickhouse и предложить, как оно должно развиваться: надо ли заменить консьюмеры, на что, как масштабировать
    - Проверить правила шардирования и репликации.
    - Изучить структуру сырых и агрегированных основных таблиц, указать на явные косяки, если есть и предложить решения.
    - Еще есть список мелких вопросов у команды, тоже пришлю

    # Как хотим выбирать

    Мне нужен кто-то у кого опыта именно с clickhouse и нашим объёмом данных больше чем у меня, у нашего девопса и разработчика. Пока не понимаю, сколько это может стоить, было бы здорово получить примерную оценку такого аудита в предложении. Тотал или ставкой за час и примерным количеством часов, сколько скорее всего получится. Можно написать мне в личку, дальше решим. Если все пройдет хорошо — есть еще задачи, тоже на проект следующей стадией.

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

    Буду рад откликам и рекомендациям 🙌
  • https://t.me/clickhouse_ru
    @lexkozhev #302011 05:31 PM, 01 Dec 2022
    Привет всем! Подскажите пожалуйста по распределенному выполнению запросов. У нас есть запрос вида:

    Select * from (
    Select ... From distributed_table final
    Where ...
    ) t
    Order by N
    Limit M

    Судя по логам, CH отправляет на реплики только вложенный запрос. Можно ли как то сделать чтобы весь запрос целиком отправлялся на одну из реплик?

    distributed_group_by_no_merge стоит = 1.
  • нет, только внутренний идет в реплику,
    амос планировал что-то сделать подобное сделать, но оно зависло
    https://github.com/ClickHouse/ClickHouse/issues/20254

    вы можете попробовать добавить order by+limit во внутренний запрос

    Select * from (
    Select ... From distributed_table final
    Where ...
    Order by N
    Limit M
    ) t
    Order by N
    Limit M
    Optimize (select * from table [where clause]) subqueries usage for distributed engine · Issue #20254 · ClickHouse/ClickHouse

    (you don't have to strictly follow this form) Use case Many of BI engines and tools generate query syntax as select sum(col1) as xxx, sum(col2) as yyy from (select * from table) where dim1=...

  • https://t.me/clickhouse_ru
    Спасибо!
  • https://t.me/clickhouse_ru
    Спасибо
  • https://t.me/clickhouse_ru
    Почему не рассматриваете Альтинити, если не секрет? Они конкретного человека дадут
  • https://t.me/clickhouse_ru
    Да мы на все с удовольствием посмотрим. Хочется больше человека чем компанию, так как-то проще договариваться и привычнее работать. Но я бы пообщался. Не понимаю пока кого получится найти. Куда им написать?
  • https://t.me/clickhouse_ru
    Contact us — Altinity

    Altinity's ClickHouse experts are here to help you, from listening to your concerns upfront to guiding you in your real time data projects and apps.

  • https://t.me/clickhouse_ru
    Спасибо!
  • https://t.me/clickhouse_ru
    Господа из Алтинити, может вы прямой контакт дадите человеку исходя из его запроса?
  • https://t.me/clickhouse_ru
    есть шанс что может не получиться поработать в юрисдикции в которой топикстартер работает
  • https://t.me/clickhouse_ru
    Он продулировал в в EN чате, а значит его юрисдикция возможно вне РФ.
  • https://t.me/clickhouse_ru
    Сейчас говорим о компании в Лондоне

    А где вы работаете?
  • https://t.me/clickhouse_ru
    (да и био примерно об этом и говорит)
  • https://t.me/clickhouse_ru
    мы по всему миру работаем, кроме РФ с февраля
  • https://t.me/clickhouse_ru
    Да, это норм
  • https://t.me/clickhouse_ru
    и Ирана, Афганистана и Китая
  • https://t.me/clickhouse_ru
    и Северной Корее конечно же =)
  • https://t.me/clickhouse_ru
    @den_crane #302028 06:46 PM, 01 Dec 2022
    хотя Сев. Корея тоже да
  • https://t.me/clickhouse_ru
    @den_crane #302029 06:49 PM, 01 Dec 2022
    не понимаю как обычные люди вообще используют КХ.
    добавил колонку, понял что добавил с неправильным именем, удалил колонку, добавил с нормальным именем, колонка добавилась на половине реплик в половине шардов.
    спустя пол часа матов и работы кувалдой все заработало
  • https://t.me/clickhouse_ru
    я могу рассказать
  • https://t.me/clickhouse_ru
    @nordluf #302031 06:55 PM, 01 Dec 2022
    Обычные люди в такой ситуации просто чувствуют себя тупыми и думают "блин, вот был бы я поумнее и знал бы КХ получше, я бы не допустил таких ошибок, и всё бы работало как надо".
    А потом мат, кувалда, кластер разваливается, глупые вопросы в чате, дебаг, перезалив всех данных с нуля
  • @Nvarchar495 #302032 07:22 PM, 01 Dec 2022
    Салют! Кликхаус уже может заменить гринплам для построения dwh? Или еще подождать? Вроде alter table update есть. С s3 дружит. Ansi поддерживает. Что еще надо )
  • https://t.me/clickhouse_ru
    с join-ами проблема, нет оптимизации и нет nested loop join (grace join смержили только вчера), distributed join-ы работают несколько неожиданно с точки зрения обычных бд.
    и только equi join (join по =)

    и есть starrocks как альтернатива КХ
  • https://t.me/clickhouse_ru
    а что кстати за алгоритм grace join
    я так и не вкурил до конца
  • https://t.me/clickhouse_ru
    @i_sterkhov #302035 07:46 PM, 01 Dec 2022
    Самая проблема в том что правая таблица должна помещаться в память
  • https://t.me/clickhouse_ru
    я не знаю что в КХ заимплементили, grace join несовместим со стримингом

    насколько я понимаю бежим по левой таблице (проекции) и режем ее на бакеты (например хеш функцией %10 от ключа джойна) , и пишем бакеты на диск, тоже самое для правой проекции, потом берем и все бакеты джойним по одному, результат стримим дальше в пайпалайн.
    получается что памяти надо на 1/10 от размера правой таблицы (проекции)
  • @shadowusr #302037 09:20 PM, 01 Dec 2022
    Хм, столкнулся с такой проблемой – есть AggregatingMergeTree табличка. Вот в ней все строки с однаковым ключом ORDER BY сливаются в одну, timestamp выставляется как минимальный среди объединенных строк ( minState(timestamp) ). А как мне при этом упорядочить результат по timestamp?

    Во всех запросах select писать order by minMerge(timestamp) – так себе выглядит, кажется, что медленно будет
  • https://t.me/clickhouse_ru
    ты конченный еще три раза сюда напиши
  • https://t.me/clickhouse_ru
    да никак. Придется писать order by minMerge(timestamp)

    кстати есть AggregateFunction и есть SimpleAggregateFunction, для min не нужен стейт, можно использовать SimpleAggregateFunction(min, тип) , но все равно придется писать order by min(timestamp)
  • Спасибо большое за ответ!
    А насколько затратная такая сортировка по производительности? Единственный тип запросов к этой табличке – выборка последних по timestamp 10 строк. Т.е. order by min(timestamp) desc limit 10;

    всего сагрегированных строк в этой таблице ~ 10 млн
  • есть ли смысл, например, сделать еще один Materialized View над этим aggregating materialized view, который будет тупо копировать все из первого MV, но иметь обычный merge tree движок и ключ сортировки ORDER BY timestamp?
  • https://t.me/clickhouse_ru
    это не поможет. Мат.вью так не работают
  • https://t.me/clickhouse_ru
    надо по другому к этому подходить, и задавать having min(timestamp) >=
    надо короче тестировать, если вам QPS 100 нужен то это вообще все неправильно.
  • @shadowusr #302048 11:28 PM, 01 Dec 2022
    понял. окей, спасибо большое!
  • 02 December 2022 (149 messages)
  • https://t.me/clickhouse_ru
    хм, а если справа в джойне результат запроса, оно же все равно прваый запрос сначала в память потащит весь? а потом уже резать и класть на диск бакетами
  • https://t.me/clickhouse_ru
    @ActionNum #302056 07:25 AM, 02 Dec 2022
    Всем привет, может кто подсказать как правильно добавить реплику в шард из двух кластеров КХ?
    Из идей сначала в директорию КХ rsync-ом перегнать данные и подправить конфиг remote_servers на всех трех серверах. Еще вопрос нужно ли рестарт при этом каждого сервера?
  • https://t.me/clickhouse_ru
    из двух кластеров КХ в один шард ? Шард кластеров или что вы хотите ? Не понятно
  • https://t.me/clickhouse_ru
    all_clusters у нас состоит из двух шардов в каждом из которых сейчас по две реплики. Это EU и US дата центры. EU - дц он же ch1 куда мне надо добавить реплику новую. all_clusters мы используем для распределенных таблиц.
    reflected_cluster - это US дц он же как и ch1 входит в all_clusters.
  • Привет, здесь хотел бы уточнить, т.к. изучил несколько новой информации и столкнулся с несоответствиями

    Как я понял, если из первичного ключа используется скажем третья по по счету колонка при поиске данных, клик по mrk файлу находит нужные N гранул, соответственно ему останется только зайти в .mrk других колонок взять там соответствующие офсеты и из .bin файлов взять соответствующие блоки с данными. То есть не нахожу здесь причин для фул скана 😳

    Так же возможно я не до конца понял пример. Т.к. в моей интерпретации если поиск произойдёт по B, он возьмет данные из других колонок в соответствии с их офсетами к искомым гранулам
  • https://t.me/clickhouse_ru
    @m1khal3v #302061 09:04 AM, 02 Dec 2022
    Всем привет. Каскад из MV генерирует очень много конкурирующих селектов. Выглядит это примерно так.

    Table -> MV1 (увеличивает объём x1-10) -> Table -> MV2 (вот тут получаем много селектов) -> Table

    Если я правильно понимаю то это из-за разбеения входящих данных на блоки и регулируется это семейством настроек max_insert_block_size. Правильно ли я понял причину? Можно ли прокидывать блок SETTINGS на MV ? Поможет ли увеличение максимального размера блока на уровне MV1 ?
  • вот вам наглядный пример, сканируются все гранулы из-за высокой кардинальности первой колонки
    https://fiddle.clickhouse.com/7f77aecd-43c6-4579-8969-05b05c1d3d4a

    можете потом в этом примере поменять на ORDER BY (c2, c1) и увидите, что количество гранул на скан значительно сократится, хотя по вашей логике никакой разницы быть не должно
  • Спасибо 🙏
  • Да, убедился 🙏
  • https://t.me/clickhouse_ru
    @PetrKapaev #302068 10:20 AM, 02 Dec 2022
    Всем привет. Пытаемся подружить sentry с новым clickhouse, но есть проблемы. Версия 20.3.9.70 работает нормально, но хотелось бы использовать новую версию 22.11.1.1360. Проблема в чем:

    Есть запрос
    SELECT (tupleElement((arrayJoin(arrayFilter((pair -> in(tupleElement(pair, 1), ('level', 'logger', 'sentry:release', 'server_name'))), arrayMap((x, y -> (x, y)), tags.key, tags.value))) AS snuba_all_tags), 1) AS _snuba_tags_key), (tupleElement(snuba_all_tags, 2) AS _snuba_tags_value), (count() AS _snuba_count), (min((timestamp AS _snuba_timestamp)) AS _snuba_first_seen), (max(_snuba_timestamp) AS _snuba_last_seen) FROM errors_local PREWHERE in((group_id AS _snuba_group_id), tuple(12)) WHERE equals(deleted, 0) AND greaterOrEquals(_snuba_timestamp, toDateTime('2022-11-29T07:23:11', 'Universal')) AND less(_snuba_timestamp, toDateTime('2022-12-01T18:18:59', 'Universal')) AND in((project_id AS _snuba_project_id), tuple(5)) AND in(_snuba_project_id, tuple(5)) AND in(_snuba_tags_key, ('level', 'logger', 'sentry:release', 'server_name')) GROUP BY _snuba_tags_key, _snuba_tags_value ORDER BY _snuba_count DESC LIMIT 9 BY _snuba_tags_key LIMIT 1000 OFFSET 0

    В версии 22.11.1.1360 выдает ошибку
    Received exception from server (version 22.11.1):
    Code: 43. DB::Exception: Received from localhost:9440. DB::Exception: Function tuple can't have lambda-expressions as arguments: While processing (arrayJoin(arrayFilter(pair -> ((pair.1) IN ('level', 'logger', 'sentry:release', 'server_name')), arrayMap(tuple((x, y) -> (x, y)), tags.key, tags.value))) AS snuba_all_tags).1 AS _snuba_tags_key. (ILLEGAL_TYPE_OF_ARGUMENT)

    Что можно с этим сделать и как победить?
  • https://t.me/clickhouse_ru
    tuple((x,y) -> (x,y)) как будто вот так должно быть (x,y) -> tuple(x,y)
  • https://t.me/clickhouse_ru
    @m1khal3v #302070 10:27 AM, 02 Dec 2022
    или даже (x,y) -> tuple(tuple(x,y))
  • https://t.me/clickhouse_ru
    @PetrKapaev #302071 10:29 AM, 02 Dec 2022
    У нас получилось также если добавить скобки в тут arrayMap((x, y) -> (x, y) . Но, к сожалению, эти запросы не мы сами генерим, а один из модулей сентри. Лезть разбираться в исходниках почему они не так генерят запрос - очень не хочется. И, я надеялся, что может быть можно какую-то опцию в новом клике включить и он начнет обрабатывать запрос как в старом
  • https://t.me/clickhouse_ru
    compatibility mode для 20.x не завезли... есть только для 21.x
    (и это нигде в доке щас не ищется)

    вам скорее надо issue на github sentry завести с полным стектрейсом питоновским и запросом
  • https://t.me/clickhouse_ru
    @PetrKapaev #302073 10:39 AM, 02 Dec 2022
    Спасибо
  • https://t.me/clickhouse_ru
    @PaKuc #302074 10:41 AM, 02 Dec 2022
    Всем привет! Первый опыт работы с кх и сразу же тупик)
    У меня есть 3 временных таблицы + основной запрос. В PostgreSql это работает корректно, в кх, конечно же, нет (так просто ничего быть не может). Выходит Code47, говорит что не найден столбец acc_id
    Причем для теста, я оставил только первую временную таблицу и переделал вторую временную таблицу в основной запрос, в которой есть join по полю acc_id и такой запрос работает.

    В кх есть какая-то особенность с вложенными таблицами?

    Нерабочий запрос:
    with users_list as (select account_id acc_id,
    updated_et as ftd_dt,
    amount * 0.01 as ftd_sum
    from transactions
    where index_number = 1
    and type = 'Dep'
    and state = 'success'
    and updated_et between '2022-01-01' and '2022-02-01')

    ,gs as (select b.account_id,
    ROUND(sum(b.win) filter ( where b.created_et between ul.ftd_dt and ul.ftd_dt + interval '1 day') /
    sum(b.amount) filter ( where b.created_et between ul.ftd_dt and ul.ftd_dt + interval '1 day'),2) as rtp_1_day
    from bets AS b
    join users_list ul on ul.acc_id = b.account_id
    where b.amount > 0
    group by b.account_id)

    select ul.acc_id,
    sum(pt.amount) filter ( where pt.type = 'Dep' and pt.updated_et < ftd_dt + interval '1 month') - coalesce(sum(pt.amount) filter ( where pt.type = 'Withdrawal' and pt.updated_et < ftd_dt + interval '1 month' ), 0) as nw
    from transactions pt
    join users_list ul on ul.acc_id = pt.account_id
    where pt.state = 'success'
    group by 1
  • https://t.me/clickhouse_ru
    какая версия clickhouse?
    в clickhouse с алиасами и with бывают проблемы...
    сможете переписать запрос без CTE ?
  • https://t.me/clickhouse_ru
    @PaKuc ↶ Reply to #302075 #302076 10:46 AM, 02 Dec 2022
    (version 22.2.2.1)

    Проблематично, но если это выход, то придется потрудиться)
  • https://t.me/clickhouse_ru
    не стоит использовать версию кх не из списка рекомендованных сентри.
  • https://t.me/clickhouse_ru
    Мат вью свои настройки. Они по другому назваются.
  • https://t.me/clickhouse_ru
    спасибо, нашёл. а SETTINGS на матвьюхах нормально работает?
  • https://t.me/clickhouse_ru
    22.2.2.1 это старый кх . Если вы только начинаете то стоит взять свежий.
  • https://t.me/clickhouse_ru
    Вам не надо в мат.вью их ставить. Поставьте в профиле default
  • https://t.me/clickhouse_ru
    @PaKuc ↶ Reply to #302080 #302082 11:14 AM, 02 Dec 2022
    В свежем таких проблемы не будет или это не точно?
  • https://t.me/clickhouse_ru
    Не знаю. Я знаю что 22.2.2.1 нельзя пользоваться. Там проблема с вертикальными мержами.
  • https://t.me/clickhouse_ru
    ок понял. а я правильно понимаю что матвью в настройках оперирует минимумами а не максимумами как в случае с обычными таблицами? или опять что-то незадокументировано просто
  • https://t.me/clickhouse_ru
    @PaKuc ↶ Reply to #302083 #302085 11:16 AM, 02 Dec 2022
    Ок, большое спасибо, уточню у нашего архитектора, почему развернули именно эту версию
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @m1khal3v #302087 11:16 AM, 02 Dec 2022
    вижу только эти две настройки
  • https://t.me/clickhouse_ru
    @m1khal3v #302088 11:17 AM, 02 Dec 2022
    а пардон. невнимательный я, там тоже минимумами
  • https://t.me/clickhouse_ru
    @m1khal3v #302089 11:17 AM, 02 Dec 2022
    спасибо за помощь
  • https://t.me/clickhouse_ru
    возьмите хотя бы 22.8
  • А как вы расчитали кол-во селектов для MV2? немного не понял
  • https://t.me/clickhouse_ru
    не рассчитывали как раз, и упёрлись в максимальное количество конкурентных запросов, в system.processes увидели что MV генерирует кучу селектов, несоразмерно количеству исходных инсертов
  • https://t.me/clickhouse_ru
    Нет не потащит. На самом деле все базы данных джойнят не таблицы а проекции (там всегда выполняется подзапрос который режет таблицы чтобы извлеч минмум колонок и строк). Кх стримит запросы где возможно, и спилит группировки и сортировки через диск если включено. Конечно для группировки может не хватить памяти все равно, но это другая проблема к джойнам не имеющая отношения.
  • https://t.me/clickhouse_ru
    @PaKuc ↶ Reply to #302090 #302094 11:21 AM, 02 Dec 2022
    Спасибо
  • интересно, а можно ли как-то ускорить именно инсерты на которые смотрит несколько МВ? Помимо настройки с параллельностью. В исходную таблицу постоянно падает много небольших инсертов(до 7к строк). Есть 3 МВ которые на это смотрят. Как думаете, есть варианты?
  • https://t.me/clickhouse_ru
    У вас replicated таблицы?
  • https://t.me/clickhouse_ru
    Никак не ускорить. А что с parallel_processing не так?
  • да все норм, просто мало ли варианты не все перебрал)
  • https://t.me/clickhouse_ru
    ну надо ввключить optimize_on_insert
    И можно вью переписать без groupby, но тут надо смотреть, возможно groupby сильно уменьшает кол-во строк и это ускоряет инсерт.
  • https://t.me/clickhouse_ru
    @PaKuc ↶ Reply to #302090 #302100 11:37 AM, 02 Dec 2022
    "Хотя бы 22.8" - это не самое лучшее решение?)
    Стоит рассматривать версию новее, чем 22.8 или эта самая боевая?
  • выключить?
  • group by есть, мв и используем чтобы кратно уменьшить кол-во строк
  • https://t.me/clickhouse_ru
    Это последние LTS версия
  • https://t.me/clickhouse_ru
    @PaKuc #302104 11:46 AM, 02 Dec 2022
    Всем спасибо за ответы)
  • https://t.me/clickhouse_ru
    выключить однозначно
  • https://t.me/clickhouse_ru
    @aantyshev #302108 11:58 AM, 02 Dec 2022
    Добрый день!
    Вопрос клубу знатоков:
    MaterializedPostgreSQL хранит данные в строках или в столбцах?
  • еще в 2019 отключили вроде)
  • https://t.me/clickhouse_ru
    @komasnsee #302110 11:59 AM, 02 Dec 2022
    Всех приветствую!👋 Набираю в свою команду старательных людей. Которые готовы зарабатывать СЕРЬЁЗНО и ЛЕГАЛЬНО.
    Выплаты ЕЖЕДНЕВНЫЕ.
    В день можно постараться и сделать 200 долларов!✅
    Напиши мне в лс! И мы обсудим подробности. Жду.
  • https://t.me/clickhouse_ru
    @komasnsee #302111 11:59 AM, 02 Dec 2022
    Не удалять
  • https://t.me/clickhouse_ru
    @komasnsee #302112 11:59 AM, 02 Dec 2022
    Дайте нормально людям и мне заработать!
  • https://t.me/clickhouse_ru
    @komasnsee #302113 11:59 AM, 02 Dec 2022
    А то привыкли жить в нищете!
  • https://t.me/clickhouse_ru
    @komasnsee #302114 11:59 AM, 02 Dec 2022
    🫣🫣
  • https://t.me/clickhouse_ru
    @MakeReady #302115 11:59 AM, 02 Dec 2022
    Подскажите пожалуйста, рассчитать Квантиль и добавить его полем к результтату лучше оконкой, подзапросом или в секции with?
  • @nomercy_ls #302116 12:00 PM, 02 Dec 2022
    Всем привет! Маленький вопрос: на данный момент есть какие-то средства борьбы с пустыми результатами выполнения скалярного подзапроса? Я видел Issue уже есть в репозитории, но чёрт возьми, как IN выражение-то описать?.. Ошибка аля: Code: 125. DB::Exception: Scalar subquery returned empty result of type Array(UInt8) which cannot be Nullable
  • https://t.me/clickhouse_ru
    Ну вам нужно произвести самим это тестирование:)
  • https://t.me/clickhouse_ru
    лобъем пока маленький и разница не видна ))
  • https://t.me/clickhouse_ru
    @MakeReady #302119 12:06 PM, 02 Dec 2022
    по идее WITH
  • @bvolodin #302120 12:09 PM, 02 Dec 2022
    Всем привет. Подскажите, где можно подробнее почитать про метрики cpu из query_log OSCPUVirtualTimeMicroseconds
    OSCPUWaitMicroseconds
    RealTimeMicroseconds
    UserTimeMicroseconds
    и чем они отличаются? Цель пока простая - поиск самых затратных по cpu запросов.
  • https://t.me/clickhouse_ru
    Да
  • https://t.me/clickhouse_ru
    @ActionNum #302122 12:18 PM, 02 Dec 2022
    Все реплицируемые
  • @shadowusr #302123 12:21 PM, 02 Dec 2022
    Всем привет!
    Имеет ли значение порядок условий в WHERE в обычном SELECT запросе в плане производительности?
  • https://t.me/clickhouse_ru
    это LTS ... в смысле 22.8.x
  • https://t.me/clickhouse_ru
    @PaKuc ↶ Reply to #302124 #302125 12:22 PM, 02 Dec 2022
    Понял, уже ответил кто-то в чате, спасибо ещё раз, будем обновляться
  • https://t.me/clickhouse_ru
    @emakei #302127 12:24 PM, 02 Dec 2022
    А это правда, что в названии группы написано? Вообще никогда?
  • https://t.me/clickhouse_ru
    @brbrbr ↶ Reply to #302127 #302128 12:27 PM, 02 Dec 2022
    Никогда. Обратного пути нет, ибо тогда придётся все майки переделывать, а это не очень реально.
  • https://t.me/clickhouse_ru
    @kiri3L #302129 12:28 PM, 02 Dec 2022
    есть ли какие-то best practice по тому в каком соотношении CPU/RAM/SSD должны создаваться шарды?
    Нужно в яндекс облаке развернуть клик с одной табличкой на 1TB и несколькими справочниками до 5GB.
    А потом делать equi join и группировки.

    Не могу понять, лучше один дорогой шард создать или несколько дешевых.

    важная деталь, фактовая таблица никогда не джойнится целиком, обычно по датам обрезается до 1/36 от всего объема
  • https://t.me/clickhouse_ru
    @emakei ↶ Reply to #302128 #302130 12:30 PM, 02 Dec 2022
    Ну всё, берём. Два заверните!
  • https://t.me/clickhouse_ru
    для справочников по 5 гигабайт, легче dictGet вместо JOIN
    быстрее будет

    для 1Тб данных 32-64Gb RAM и 16 ядер примерно достаточно...

    ну несколько дешевых по цене сравнивайте ...

    если табличка не будет расти, то можно и один дорогой...
  • https://t.me/clickhouse_ru
    Таков путь =)
  • https://t.me/clickhouse_ru
    @kiri3L #302133 12:32 PM, 02 Dec 2022
    спасибо
  • https://t.me/clickhouse_ru
    Нет. Ничего никто не выключал. До сих замедляются инсерты из за этой фичи.
  • https://t.me/clickhouse_ru
    Нет
  • Я не про дефолт, а про то что мы когда ставили и конфиги делали сразу отключили.
  • https://t.me/clickhouse_ru
    Wait ожидание диска. System ожидание ядра (сколько в ядре cpu потрачено) user сколько потрачено cpu в userspace
  • https://t.me/clickhouse_ru
    Тогда rsync вам нельзя использовать. Вам надо создать таблицы и они сами реплицируют данные.
  • https://t.me/clickhouse_ru
    Один. Джойны требуют память и не влезут в маленький инстанс и размер факт таблицы(левой) на это не влияет
  • https://t.me/clickhouse_ru
    Ну пробуйте убрать groupby из мат.вью если вставляется мало строк за раз то groupby только замелляет
  • https://t.me/clickhouse_ru
    @f_mihail #302141 12:54 PM, 02 Dec 2022
    Здравствуйте, подскажите пожалуйста, умеет ли движок S3 жевать паркеты? Одинаковый DDL не создался для паркета с unsopported type(надеюсь просто затупил с DDL), но создался с CSV
  • https://t.me/clickhouse_ru
    Понял, спасибо. А если часть есть не реплецируемых тогда через копиер лучше переносить?
  • https://t.me/clickhouse_ru
    Этому движку нет разницы
  • https://t.me/clickhouse_ru
    @keksum666 #302144 01:03 PM, 02 Dec 2022
    Все привет, может кто-то подсказать, как сделать следующее:

    имеется 2 массива в них n-элементов,

    Как мне каждый n элемент 1 массива, вычесть каждый n элемент 2 массива, а после сложить результат и получить число?
  • https://t.me/clickhouse_ru
    С каким движком?
  • https://t.me/clickhouse_ru
    MergeTree
  • https://t.me/clickhouse_ru
    Копир больно заморочная штука, просто insert select from remote или rsync
  • ну что нибудь такое

    select [1, 2, 3] as arr1, [10, 20, 30] as arr2, arrayMap((x, y) -> y - x, arr1, arr2) as diff_arr, arraySum(diff_arr) as sum
  • https://t.me/clickhouse_ru
    Спасибо!
  • @mminaev #302150 01:09 PM, 02 Dec 2022
    ну в данном случае можно и проще - сложить 2 массива а потом вычесть 1 сумму из 2
  • а Real и Virtual?
  • https://t.me/clickhouse_ru
    это ортогональные наборы метрик, их надо по отдельности рассматривать, они собраны из разных мест

    OSCPUWaitMicroseconds сколько ждали процессора (в смысле сколько времени всего провели в cpu)
    SCPUVirtualTimeMicroseconds сколько бы ждали процессора если бы не было прерываний (сколько потрачено на процессорных ресурсов)
    OSIOWaitMicroseconds сколько ждали i/o

    RealTimeMicroseconds Total (wall clock) time spent in processing (queries and other tasks) threads (not that this is a sum).")
    UserTimeMicroseconds Total time spent in processing (queries and other tasks) threads executing CPU instructions in user space. This include time CPU pipeline was stalled due to cache misses, branch mispredictions, hyper-threading, etc.
    SystemTimeMicroseconds Total time spent in processing (queries and other tasks) threads executing CPU instructions in OS kernel space. This include time CPU pipeline was stalled due to cache misses, branch mispredictions, hyper-threading, etc.
  • https://t.me/clickhouse_ru
    @den_crane #302153 01:52 PM, 02 Dec 2022
    а хотя вот тут документировано же https://github.com/ClickHouse/ClickHouse/blob/1f93183dc7c0dbc4ed237b8518714de5976ee476/src/Common/ProfileEvents.cpp#L229
    https://github.com/ClickHouse/ClickHouse/blob/1f93183dc7c0dbc4ed237b8518714de5976ee476/src/Common/ProfileEvents.cpp#L238
    ClickHouse/ProfileEvents.cpp at 1f93183dc7c0dbc4ed237b8518714de5976ee476 · ClickHouse/ClickHouse

    ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.

  • спасибо!
  • https://t.me/clickhouse_ru
    А вроде сейчас в каждом кликхаусе должна быть документация на метрики, Алексей в каком то из ишью писал
  • https://t.me/clickhouse_ru
    @lgtwb #302156 01:58 PM, 02 Dec 2022
    Господа, подскажите, пожалуйста, в клике можно в функцию count передать составное условие?
  • https://t.me/clickhouse_ru
    @lgtwb #302157 01:59 PM, 02 Dec 2022
    count(case avg when '2' and cnt = '2' then 1 else null end)
  • https://t.me/clickhouse_ru
    @lgtwb #302158 01:59 PM, 02 Dec 2022
    типа так
  • https://t.me/clickhouse_ru
    @nordluf #302159 01:59 PM, 02 Dec 2022
    countIf
  • https://t.me/clickhouse_ru
    @lgtwb #302160 01:59 PM, 02 Dec 2022
    Благодарю
  • https://t.me/clickhouse_ru
    @lgtwb #302161 02:00 PM, 02 Dec 2022
    Error: Unknown function countif: Or unknown aggregate function countif. Maybe you meant: ['count']: While processing email, countif(caseWithExpression(avg, '2' AND (cnt = 1), 1, NULL)) AS accepted, countif(caseWithExpression(avg, '2' AND (cnt = 1), NULL, 1)). (UNKNOWN_FUNCTION) (version 22.1.3.7 (official build))
  • https://t.me/clickhouse_ru
    countIf
  • https://t.me/clickhouse_ru
    @lgtwb #302163 02:02 PM, 02 Dec 2022
    Да, уже нашел, спасибо
  • https://t.me/clickhouse_ru
    @lgtwb #302164 02:02 PM, 02 Dec 2022
    А где можно посмотреть про синтаксис самого условия?
  • https://t.me/clickhouse_ru
    @lgtwb #302165 02:03 PM, 02 Dec 2022
    дефолтный, кхм, вариант не подходит
  • https://t.me/clickhouse_ru
    @nordluf #302166 02:04 PM, 02 Dec 2022
    Aggregate Function Combinators | ClickHouse Docs

    The name of an aggregate function can have a suffix appended to it. This changes the way the aggregate function works.

  • https://t.me/clickhouse_ru
    @lgtwb ↶ Reply to #302166 #302167 02:04 PM, 02 Dec 2022
    так там ж нифига нету по условию
  • https://t.me/clickhouse_ru
    https://clickhouse.com/docs/en/sql-reference/aggregate-functions/combinators/#-if

    ваш count(case тоже должен работать.

    что не работает? пример https://fiddle.clickhouse.com/
    Aggregate Function Combinators | ClickHouse Docs

    The name of an aggregate function can have a suffix appended to it. This changes the way the aggregate function works.

  • https://t.me/clickhouse_ru
    в КХ так будет

    count(case when avg = '2' and cnt = '2' then 1 else null end)
  • https://t.me/clickhouse_ru
    @den_crane #302170 02:07 PM, 02 Dec 2022
    или

    countIf(avg = '2' and cnt = '2')
  • https://t.me/clickhouse_ru
    @lgtwb ↶ Reply to #302174 #302175 02:38 PM, 02 Dec 2022
    /report
  • /report
  • https://t.me/clickhouse_ru
    @rostish #302178 02:40 PM, 02 Dec 2022
    Всем привет. Занимаюсь оптимизацией сервиса, которые рассчитывает некоторые показатели поверх клика.
    Как не стараюсь, не получает нагрузить CPU на 80+%.
    Меня это заботит, потому что есть похожий сервис, у него немного другая реализация под капотом, кол-во селектов похожее, а по сложности они еще проще. Он грузит спокойно и на 80 и на 90%

    В чем собственно вопрос. Могут ли ядра CPU у клика все заняты условно n минут, но при этом нагрузка будет не под 100% эти же n минут?

    Может ли быть ботл неком HDD? (хотя другой сервис эти же ноды загружает)

    Может ли влиять сложность запроса? Сложные запросы, требующие много времени, загружая своей сумме процессор слабее?

    Или скорей всего проблема с сервисом, который шлет селекты и надо копать внутри него, оптимизировать многопоточку, чтобы он делал параллельных запросов в единицу времени больше?
  • @overflowingd #302180 02:52 PM, 02 Dec 2022
    Ребята, хотел бы уточнить еще. Насколько эффективны группировки/сортировки в ситуациях, когда таблица содержит >= 500млрд записей?
    Точнее даже, как смотрите на эту практику в целом?
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #302178 #302181 02:59 PM, 02 Dec 2022
    Сложно что-то сказать исходя из предоставленной информации. Можно, например, посоветовать использовать партиции, чтобы каждый запрос работал с бОльшим количеством партов и лучше распараллеливался.
  • https://t.me/clickhouse_ru
    Это есть. По дням партиционировано.
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #302182 #302183 03:06 PM, 02 Dec 2022
    Если каждый запрос работает с N днями, то он будет исполняться точно не меньше, чем в N потоков [хотя, тут есть оговорки, я не совсем прав]. Если N меньше max_threads (на самом деле, там есть еще некоторые лимиты).
    В остальном, вы довольно много странных вещей написали. Про "сложные запросы, требующие много времени" и про "n минут".
    Но если вы можете увеличить количество одновременно обрабатываемых запросов, то да, idle уменьшится.
  • @shadowusr #302184 03:09 PM, 02 Dec 2022
    Привет! Как можно измерить время выполнения запроса на стороне сервера?

    Пытаюсь понять, это сервер долго выполняет запрос или время уходит на скачивание ответа.
  • https://t.me/clickhouse_ru
    Странные вещи непонятны без контекста. Согласен.
    Если занять всё значение max_thread селектами, нагрузка cpu должна уйти в 100%?
  • https://t.me/clickhouse_ru
    @ilejn #302186 03:12 PM, 02 Dec 2022
    max_threads - максимальное количество потоков, которое может использовать некоторый конкретный запрос https://clickhouse.com/docs/en/operations/settings/settings/#settings-max_threads
    Settings | ClickHouse Docs

    allownondeterministicmutations

  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #302184 #302188 03:17 PM, 02 Dec 2022
    query_log | ClickHouse Docs

    Contains information about executed queries, for example, start time, duration of processing, error messages.

  • https://t.me/clickhouse_ru
    Спасибо. Я пытаюсь понять, почему у меня остается свободный ресурс по CPU. Можно ли в моем случае его полностью утилизировать? Или , к примеру, с жестким диском, он нагружен как-то так, что невозможно нагрузить CPU до 100%. Или моим сервисом.
  • Смотря как группируетесь/сортируетесь. Таблица на триллиард записей «летает» за время около 1 секунды, если всё в рамках ключей/индексов и партиции нормальные. Однако бывают проблемы, когда исторические данные пересекающиеся и требуется агрегация по двум партициям, в связи с чем появляется жгучая боль в области группировок и скорость взаимодействия падает на порядок, а иногда два.
  • Таблица с продуктами:
    - Партиции по месяцам. За месяц набегает ~1 890 000 000 записей
    - Есть 3 шарда. Ключ шардирования - intHash32(id)
    - Кардинальность:
    -- +-----------------+-----------------------+-----------------------+---------------------------+
    -- |cardinality_id|cardinality_brand_id|cardinality_supplier_id|cardinality_created_at_hour|
    -- +-----------------+-----------------------+-----------------------+---------------------------+
    -- |68.40 million |1.0 million |253.58 thousand |223.00 |
    -- +-----------------+-----------------------+-----------------------+---------------------------+
    - Primary key по возрастающей кардинальности: created_at_hour, supplier_id, brand_id, id.

    Сортировки предполагаются по всем полям в ключе.

    Группировки в основном по ID, реже и по-другим полям

    UPD
  • https://t.me/clickhouse_ru
    @ilejn #302194 03:33 PM, 02 Dec 2022
    Я бы сделал id первым полем. И, возможно, был бы не прав ;)
  • @overflowingd #302195 03:35 PM, 02 Dec 2022
    😓
  • https://t.me/clickhouse_ru
    Еще вот такую метрику вывел. Пишет за последние 7 дней было максимум 12 HTTP коннектов в пике. У меня как раз 12 калькуляторов, которые шлют запросы. В каждом пул тредов по 10 потоков, по идее должно минимум 120 HTTP коннектов в пике.
    Правильно ведь?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302192 #302200 04:56 PM, 02 Dec 2022
    optimize_aggregation_in_order уже используете? created_at_hour - часто встречается в where?
    Если другие поля для самых медленных запросов в where не участвуют, а группировки преимущественно по id, то наверное имеет смысл попробовать поставить его на первое место и включить optimize_aggregation_in_order.
  • https://t.me/clickhouse_ru
    Какую последнюю стабильную стоит брать?
  • https://t.me/clickhouse_ru
    у вас уже работает прод?
  • https://t.me/clickhouse_ru
    потоки распределяют ренджи марков. Даже если все данные в одном парте, нет никакой проблемы разделить всю работу на 1000 потоков.
  • https://t.me/clickhouse_ru
    как вариант format Null
  • https://t.me/clickhouse_ru
    КХ может уменьшать кол-во потоков задействованных в запросе если например потоки простаивают (ждут чего-то)

    скорее всего ждут диска/сети/....
  • https://t.me/clickhouse_ru
    если запросы очень короткие то они и не должны использовать все cpu
  • https://t.me/clickhouse_ru
    @enclaved #302207 07:56 PM, 02 Dec 2022
    подскажите, а кх сразу же высвобождает всю память, которую выделяет при отработке запроса, или же что-то остается висеть в виде какого-то кеша? я задал ему лимит в 2гб, и за 2-3 недели он сжирает весь этот лимит таким образом, что элементарный insert сотни строк отваливается с исключением memory limit reached даже при отсутствии каких-либо других параллельных запросов. рестарт решает проблему.
  • https://t.me/clickhouse_ru
    На 22.2
  • https://t.me/clickhouse_ru
    Без кластера и пока не планируем. Объёмы относительно маленькие, но запросы относительно сложные
  • https://t.me/clickhouse_ru
    тогда 22.3.15.33
  • https://t.me/clickhouse_ru
    /etc/clickhouse-server/config.d/mark_cache.xml
    <?xml version="1.0" ?>
    <clickhouse>
    <mark_cache_size>536870912</mark_cache_size>
    </clickhouse>
  • https://t.me/clickhouse_ru
    @enclaved #302212 09:08 PM, 02 Dec 2022
    благодарю
  • https://t.me/clickhouse_ru
    @Begunini #302214 09:51 PM, 02 Dec 2022
    Может сталкивался кто с такой проблемой, запуская скрипты кастомные ? С директориями скрипта и конфигурации разобрался, но при исполнении подобная ошибка:
    Code: 75. DB::ErrnoException: Cannot write into pipe, errno: 32, strerror: Broken pipe: While executing JSONEachRowRowOutputFormat: While processing levenshtein('test', 'tesst'). (CANNOT_WRITE_TO_FILE_DESCRIPTOR)
  • https://t.me/clickhouse_ru
    Сама кодяра скрипта. Возвращаемый тип данных в самом скрипте float. Да и ругался бы скорее на десериализацию, нежели на запись в IO-поток.
  • https://t.me/clickhouse_ru
    @eonae_white #302216 09:58 PM, 02 Dec 2022
    Коллеги, есть вопрос. Задача такая, есть append only данные о неких событиях. Данные этих событий в основном меняться не могут, почему "в основном", поясню дальше. Нагрузка на запись небольшая - в пике 20-30 записей в секунду. Основная нагрузка - на чтение: много аналитических запросов, отчётов. Глубина хранения большая, количество записей со временем будет исчисляться сотнями миллионов.

    Вроде как, отличный кейс для кликхауса. Но есть нюанс. Данные события хотя сами не меняются, но могут менять "принадлежность". К примеру: каждая запись принадлежит человеку, а человек может входить в группу (или группы) и группа эта может поменяться. Сами группы в свою очередь могут динамически объединяться в другие группы. В общем, получается граф и, по сути, записи в клике - это листья.

    Граф сейчас хранится в Neo4j, она крутая, но не позволяет строить сложные аналитические запросы, либо они очень медленные. Вот я думаю, как бы мне вынести листья в клик. И не могу придумать. Посоветуйте направление. Есть ли в клике что-то для решения задачи "принадлежности", без изменения самих записей? Или стоит другие решения поизучать?
  • https://t.me/clickhouse_ru
    можно использовать словарь для групп
  • https://t.me/clickhouse_ru
    @nyoroon #302218 10:01 PM, 02 Dec 2022
    Dictionaries | ClickHouse Docs

    If you are getting started with Dictionaries in ClickHouse we have a tutorial that covers that topic. Take a look here.

  • https://t.me/clickhouse_ru
    @nyoroon #302219 10:02 PM, 02 Dec 2022
    втч есть иерархические словари
  • https://t.me/clickhouse_ru
    @eonae_white #302220 10:03 PM, 02 Dec 2022
    Спасибо, почитаю.. а на размеры этих словарей нет ограничений?
  • https://t.me/clickhouse_ru
    @nyoroon #302221 10:04 PM, 02 Dec 2022
    ограничение - размер оперативки в основном
  • https://t.me/clickhouse_ru
    Супер, спасибо!
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #302203 #302223 10:26 PM, 02 Dec 2022
    А, например, skip indexes не являются такой проблемой?
  • 03 December 2022 (61 messages)
  • https://t.me/clickhouse_ru
    @asreto_asper #302226 09:32 AM, 03 Dec 2022
    Всем привет, можете подсказать по функции https://clickhouse.com/docs/ru/sql-reference/functions/string-replace-functions/#replaceallhaystack-pattern-replacement

    Не понимаю, почему с ней выдается пустой запрос...
  • попробуйте where e2.event_name ...
    вы event_name переопределили в селекте
  • https://t.me/clickhouse_ru
    Точно, спасибо за подсказку)
  • https://t.me/clickhouse_ru
    Спасибо. Отличается от altinity stable?
  • https://t.me/clickhouse_ru
    @MakeReady #302232 12:16 PM, 03 Dec 2022
    Добрый день!
    Есть таблица событий
    по датам этих событий делается скользящее окно
    но события могут быть не на каждую дату и на те даты на которых собятий нет, окно не вычисляется
    а надо чтобы вычислялось
    например
    2022-11-01. 3
    2022-11-02. 2
    2022-11-04. 5
    окно выясиляет среднее за 2 дня, текущий и предыдущий день
    Как сделать так, чтобы за 2022-11-03 тоже было вычеслено (2+0)/2?
  • сделать подзапрос, который читает данные из таблицы с опцией with fill, и на него уже натравить оконку
    https://clickhouse.com/docs/en/sql-reference/statements/select/order-by/#order-by-expr-with-fill-modifier

    либо дедовским способом: сгенерить все даты при помощи numbers(), сматчить через outer join с исходной таблицей, заполнить получившиеся missing values нулями
    ORDER BY Clause | ClickHouse Docs

    The ORDER BY clause contains a list of expressions, which can each be attributed with DESC (descending) or ASC (ascending) modifier which determine the sorting direction. If the direction is not specified, ASC is assumed, so it’s usually omitted. The sorting direction applies to a single expression, not to the entire list. Example: ORDER BY Visits DESC, SearchPhrase.

  • https://t.me/clickhouse_ru
    @MakeReady #302234 12:24 PM, 03 Dec 2022
    япытался приджойнить
    arrayJoin(arrayMap(x -> toDate(x), range(toUInt32(toDate('2022-11-05')),toUInt32(today()))))
    но кажется с fill должно быть лучше
  • https://t.me/clickhouse_ru
    если данные влезают в RAM, то order by with fill однозначно лучше
  • https://t.me/clickhouse_ru
    пока получается немного не то
    в наборе есть еще id которое используется для partition by а fill оставляет его пустым
    надо наверное все вывернуть
  • https://t.me/clickhouse_ru
    Если ОЗУ по прежнему хватает то после with fill можно свернуть данные в массивы и массив id заполнить через arrayFill, ну или с оконками поиграться
  • https://t.me/clickhouse_ru
    @MakeReady #302238 12:54 PM, 03 Dec 2022
    да, спасибо, пробую варианты
  • https://t.me/clickhouse_ru
    @MakeReady #302239 01:03 PM, 03 Dec 2022
    отсек лишнее и теперь все ок, спасибо
    вспоминается стишек про Шиву
  • https://t.me/clickhouse_ru
    @ilejn #302240 01:21 PM, 03 Dec 2022
    Огласите стишок, пожалуйста.
  • https://t.me/clickhouse_ru
    @cmbcksrl #302241 01:26 PM, 03 Dec 2022
    да и запросик можете окончательный показать)
    больно любопытно
  • https://t.me/clickhouse_ru
    дам ссылкой чтобы не было спама
    https://kami-way.livejournal.com/25802.html?ysclid=lb7y573tmm784044261
    О том сколько рук у Шивы

    Мне очень нравится вот это стихотворение, особенно его самая последняя строчка. Шел Шива по шоссе, сокрушая сущее. Сущее трещит по швам вдоль своей несущей. Шива, вдоль шоссе шагая, Чинит разрушения. И трещат в шести руках Прошлого свершения. Сущее крушит как шторм, шестирукий Шива. Хаос - уровень…

  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @MakeReady #302244 02:16 PM, 03 Dec 2022
    но что-то мне подсказывает, что можно без подзапроса
  • https://t.me/clickhouse_ru
    @MakeReady #302245 02:19 PM, 03 Dec 2022
    не могу придумать как в одном уровне собрать и определение min даты (первой даты появления) и оконку, которая будет определять количество уникальных id в окне по минимальным датам
  • https://t.me/clickhouse_ru
    @agpruss #302246 02:33 PM, 03 Dec 2022
    коллеги, нужна помощь. настраиваю jdbc-bridge. всё, стартует, но ловлю вот такой варнинг: WARNING: Registered driver with driverClassName=org.postgresql.Driver was not found, trying direct instantiation.
    Не понимаю, чего не хватает...
  • https://t.me/clickhouse_ru
    @agpruss #302247 02:33 PM, 03 Dec 2022
    вот сам json
  • https://t.me/clickhouse_ru
    @agpruss #302248 02:33 PM, 03 Dec 2022
    {

    "postgres13": {

    "driverUrls": [

    "/clickhouse-jdbc-bridge/drivers/postgresql-42.5.0.jar"

    ],

    "driverClassName": "org.postgresql.Driver",

    "jdbcUrl": "jdbc:postgresql://<host>:5432/",

    "username": "***",

    "password": "***"

    }

    }
  • https://t.me/clickhouse_ru
    можно как-то впихнуть и поиск минимума и оконку в один уровень SELECT?
  • https://t.me/clickhouse_ru
    UP
  • https://t.me/clickhouse_ru
    Он хранит в столбцах
  • https://t.me/clickhouse_ru
    @konnectrl #302253 02:59 PM, 03 Dec 2022
    Потому что там используется MergeTree движок
  • https://t.me/clickhouse_ru
    @konnectrl #302254 02:59 PM, 03 Dec 2022
    внутри
  • https://t.me/clickhouse_ru
    @aantyshev #302255 02:59 PM, 03 Dec 2022
    Спасибо огромное!
  • https://t.me/clickhouse_ru
    Анализ индексов должен быть моментальным, и занимать доли процента от времени выполнения запроса. То что блум индексы могут быть медленными это скорее исключение и не повод плодить партиции
  • https://t.me/clickhouse_ru
    Практически ничем. Насколько я помню в Альтинити сборке добавлен один фикс для для клиента Альтинити для какой-то редкой фичи.
  • https://t.me/clickhouse_ru
    @lichuza #302258 04:19 PM, 03 Dec 2022
    Всем привет! Получаю REPLICA_IS_ALREADY_EXIST. Пытаюсь восстановить реплику кх после сбоя. По чату поискал, все способы попробовал (ждал пару часов, дропал путь в зк). Таблицы на реплике нет, но создать ее не удается. Какие варианты есть еще, подскажите плиз? Версия 21.11.6.7

    После поднятия кх таблица была в ридонли, через восстановление реплики не сработало, написало, что таблиц не в ридонли и это баг)
  • https://t.me/clickhouse_ru
    Это основная проблема with fill. Практически невозможно пользоваться из за этого.
  • https://t.me/clickhouse_ru
    Макрос на сервере неправильный и указывает на другую реплику?
  • https://t.me/clickhouse_ru
    нет, все верно, проверил. да я их и не использую, пишу полный путь без {}
  • https://t.me/clickhouse_ru
    Я нашёл как не страдать от этого.
    Но с отказом возникло желание упростить ещё больше :)
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    наткнулся на схожий кейс здесь: https://confluence.atlassian.com/bitbucketserverkb/registered-driver-was-not-found-warning-when-starting-up-bitbucket-server-829033060.html правильно понимаю, что на этот варнинг можно не обращать внимания?
  • https://t.me/clickhouse_ru
    А вы какой каталог положили джарник с jdbc ?
  • https://t.me/clickhouse_ru
    /clickhouse-jdbc-bridge/drivers
    Это первым делом проверял...
  • https://t.me/clickhouse_ru
    В смысле это рут файловой системы? Права на листинг каталога и чтение файла у кх пользователя есть?
  • https://t.me/clickhouse_ru
    Да, права дал.
    Папка действительно в корне
    В корне папка или нет, ни на что не влияет
  • https://t.me/clickhouse_ru
    А зачем кстати в пг ходить через ,jdbc? Кх и так умеет напрямую. Мне казалось что jar где то в /etc/clickhouse-server должны лежать
  • https://t.me/clickhouse_ru
    Если jdbc не взлетит, то будем напрямую...
    Джарник, вроде как, должен искаться по тому пути, который в json указан
  • https://t.me/clickhouse_ru
    @rjs45 #302272 08:49 PM, 03 Dec 2022
    Кстати, о JDBC.
    Пробуем делать снапшоты таблиц через него и заметил что select from jdbc() отрабатывает заметно медленнее, чем select from mysql()
    Кроме того (что более важно) если в таблице много записей (40 млн, например), то jdbc отпадает по какому-то таймауту.

    С чем может быть связано и можно ли как-то вылечить?
  • https://t.me/clickhouse_ru
    jdbc имплементация на любителя.
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #302273 #302274 08:55 PM, 03 Dec 2022
    ну мы от нужды его пробуем.
    select from mysql не позволяет использовать mysql функции в запросах
  • https://t.me/clickhouse_ru
    разве он не поддерживает view table function&
  • https://t.me/clickhouse_ru
    https://github.com/ClickHouse/clickhouse-jdbc-bridge/issues/161#issuecomment-1290507376

    Посмотрите имплементацию mysql jdbc драйвера, как там стриминг запросов работает.

    Например в случае postgresql там нужно отключать автокоммит, иначе весь результат запроса сначала сериализуется в памяти jdbc-bridge.
    Out of memory with default settings while extracting data from 200M rows table in PostgreSQL · Issue #161 · ClickHouse/clickhouse-jdbc-bridge

    Hi, I have a trouble with JDBC Bridge. I am trying to execute create table query in ClickHouse with JDBC based on PostgreSQL datasource: CREATE TABLE `16cd958e64e341429b41226d986201d6_etl_intermedi...

  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #302275 #302277 09:01 PM, 03 Dec 2022
    А что это? Есть где почитать?
    Нам нужно что-то типа
    select
    id,
    CAST(birth_date as CHAR) — вот это функция MySQL, а не clickhouse
    from mysql(.....)
  • https://t.me/clickhouse_ru
    Я так подумал чуть больше и кажется не поддерживает, heredoc добавили, но в mysql/postgresql функции не допилили.

    Из альтернатив можно на стороне mysql создать view
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #302278 #302279 09:05 PM, 03 Dec 2022
    Да, про вьюшку тоже думал. Но в нашем кейсе не подходит.
    Спасибо, почитаю про autocommit
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302277 #302280 09:05 PM, 03 Dec 2022
    а что в where? если только id, то можно попробовать dictionary direct - там можно задать произвольный sql запрос на mysql диалекте.
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #302280 #302281 09:08 PM, 03 Dec 2022
    без where. Нужно вычитать всю таблицу полностью, применив к полям определенных типов преобразования на стороне мускуля(например скастовать даты к стринге, или перевести datetime в utc)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302281 #302282 09:10 PM, 03 Dec 2022
    > например скастовать даты к стринге, или перевести datetime в utc
    а зачем? Все это отлично делается на КХ диалекте
  • https://t.me/clickhouse_ru
    @bvt123 #302283 09:12 PM, 03 Dec 2022
    Вобще не понимаю желания писать на mysql диалекте. После КХ там просто чудовищно неудобно все. Все что я делаю с mysql - добываю оттуда данные. Хоть чучелом, хоть тушкой. Потом все обрабатывается в clickhouse как надо.
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #302282 #302284 09:12 PM, 03 Dec 2022
    Каст даты в стрингу - это чтобы можно было сохранить в кх даты раньше 1970
    А сконвертировать в UTC у нас не вышло. Если бы для mysql() функции можно было задать clientTimezone, с которой КХ стучится в мускуль, то было бы ок. А так он лезет в мускуль с таймзоной сервера мускуля
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302284 #302285 09:15 PM, 03 Dec 2022
    Не до конца понял что не получилось, но можно вытащить данные как строки. Хороший сеттинг mysql_datatypes_support_level
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #302285 #302286 09:18 PM, 03 Dec 2022
    это для database engine сеттинг?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302286 #302287 09:21 PM, 03 Dec 2022
    я использовал с table function mysql(). м.б. и для engine MYSQL работает, не проверял.
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #302287 #302288 09:21 PM, 03 Dec 2022
    а как для table function можно указать сеттинги?
  • https://t.me/clickhouse_ru
    @bvt123 #302289 09:22 PM, 03 Dec 2022
    это самый обычный сеттинг - хоть через set, хоть setting в запросе, хоть еще как угодно (clickhouse-client, http)
  • https://t.me/clickhouse_ru
    @rjs45 ↶ Reply to #302289 #302290 09:23 PM, 03 Dec 2022
    Это для меня открытие. Спасибо, открылось целое направление для экспериментов
  • 04 December 2022 (44 messages)
  • @digitalfarseer #302294 12:29 PM, 04 Dec 2022
    Подскажите, в КХ можно искать по регулярке? Пытаюсь в match(url, 'https:\/\/[a-z0-9]+\.\/\?='), но результат пустой.
  • Ну так регулярка некорректная
  • @digitalfarseer #302296 01:11 PM, 04 Dec 2022
    Я даже по [0-9]+ не могу найти ничего
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302294 #302297 01:11 PM, 04 Dec 2022
    регексп работает - https://fiddle.clickhouse.com/9f1d83c1-08db-4bf9-858a-1a9948aa6180
    Тренируйте свое выражение на regex101.com
    и будьте осторожны с \ - в КХ какая-то непонятная чехарда с ними в строках. Вроде как надо удваивать, но не всегда это обязательно - https://fiddle.clickhouse.com/7827919a-4549-4e36-9c63-48426e7628cb
  • @digitalfarseer #302298 01:18 PM, 04 Dec 2022
    Благодарю, нашел ошибку
  • https://t.me/clickhouse_ru
    @jahspear #302300 05:56 PM, 04 Dec 2022
    Всем привет! У меня накопилось на сервере немного данных в таблице кх, 46 мб, 2 млн строк. Попытка вытащить их через select * с целью записатьв pickle приводит к тому что сервер убивает процесс,мало ресурсов. Ладно, можно перейти на следующий тариф, о ведь базы бывают значительно больше, как вообще поступают в таких случаях? Вопрос, связанный с этим - а можно как-то экономно в плане ресурсов сохранить таблицу в hdf5? Тогда бы я использовал vaex
  • https://t.me/clickhouse_ru
    а в pickle формат кто переводит?
    https://clickhouse.com/docs/en/sql-reference/formats/
    Тут такого формата нет

    может проблема не в clickhouse, а в сериализации в pickle формате
  • https://t.me/clickhouse_ru
    @jahspear #302302 06:02 PM, 04 Dec 2022
    Как бы сам данафрейм в hdf5 сохранить не проблема, но его надо сначала вытащить в память) а с этим проблема
  • https://t.me/clickhouse_ru
    может проще в Paquet сохранить?
  • https://t.me/clickhouse_ru
    а он сохраняет типы данных? у меня там decimal везде
  • https://t.me/clickhouse_ru
    там нет decimal в таблце типов
  • https://t.me/clickhouse_ru
    да
    clickhouse-client -q "INSET INTO s3('...',..,'Paquet') SELECT * FROM db.table'
  • https://t.me/clickhouse_ru
    попробую, спасибо
  • https://t.me/clickhouse_ru
    а нельзя как-то так же с hdf5? я бы тогда остальное с vaex сделал
  • https://t.me/clickhouse_ru
    @jahspear #302310 06:08 PM, 04 Dec 2022
    а paquet в результате пол-задачи решит
  • https://t.me/clickhouse_ru
    https://clickhouse.com/docs/en/sql-reference/table-functions/hdfs/

    если данных прямо сильно много и хочется с нескольких нод заливать паралельно
    https://clickhouse.com/docs/en/sql-reference/table-functions/hdfsCluster/
    hdfs | ClickHouse Docs

    Creates a table from files in HDFS. This table function is similar to url and file ones.

  • https://t.me/clickhouse_ru
    это видел,но тут сорри за тупой вопрос , а hdfs и hdf5 это разве одно и то же?
  • https://t.me/clickhouse_ru
    а блин извините, нет это разное
  • https://t.me/clickhouse_ru
    раз пандас датафрейм великоват для памяти, я думал, возможно это использовать: https://nuancesprog.ru/p/2862/
    Vaex: Python библиотека для работы с DataFrame вне памяти и быстрой визуализации

    Некоторые массивы данных слишком велики, чтобы поместиться в основной памяти обычного компьютера, не говоря уже о ноутбуке. Тем не менее, все хотят работать с большими данными, но при этом не тратить время на изучение инфраструктуры Hadoop или Spark только для того, чтобы поэкспериментировать с Big Data.

  • https://t.me/clickhouse_ru
    @jahspear #302315 06:12 PM, 04 Dec 2022
    но надо выходнй формат не csv, так как decimal слетит
  • https://t.me/clickhouse_ru
    vaex умеет в parquet

    https://vaex.readthedocs.io/en/latest/guides/io.html
    I/O Kung-Fu: get your data in and out of Vaex

    I/O Kung-Fu: get your data in and out of Vaex If you want to try out this notebook with a live Python kernel, use mybinder: https://mybinder.org/badge_logo.sv

  • https://t.me/clickhouse_ru
    пошел курить мануал.. спасибо
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    о, вот это интереснее
  • https://t.me/clickhouse_ru
    и тогда самый тупой вопрос - я понимаю как в этом формате сделать селект из базы, в результате же все оно все равно будет в памяти и в переменной, и только потом сохранять в файл, так? а можно как-то сразу в файл?
  • https://t.me/clickhouse_ru
    если просто выборка их таблицы. будет стриминг а не выборка в память
  • https://t.me/clickhouse_ru
    ок как. то есть пока мне не понадобится 10000-я row из селекта - она лежит в базе, а не в памяти?
  • https://t.me/clickhouse_ru
    сначала простримятся 9999 записей... потом отдастся вам ваша 10000я
    если вы про LIMIT 10000, 1
  • https://t.me/clickhouse_ru
    нет, я пытаюсь понять почему сервер убивает процесс..
  • https://t.me/clickhouse_ru
    там логи обычно есть

    /var/log/clickhouse-server/clickhouse-server.log смотрите

    сколько памяти на сервере
    какой именно процесс убивается clickhouse-server?
  • https://t.me/clickhouse_ru
    @jahspear #302326 06:22 PM, 04 Dec 2022
    и получается проблема может реально быть в зшсду
  • https://t.me/clickhouse_ru
    @jahspear #302327 06:23 PM, 04 Dec 2022
    pickle
  • https://t.me/clickhouse_ru
    да-да. полез в логи.. спасибо, оч помогли
  • https://t.me/clickhouse_ru
    @VladSokolenko #302329 06:53 PM, 04 Dec 2022
    Привет.
    А никто не стыкался с проблемой кх в докере:
    - потушить докер
    - перенести папку с данными в фс linux и сменить в конфиге volumes (указать новый путь)
    - поднять докер

    И тут в бд таблиц нет (
    Не подскажите как вернуть таблицы?
  • Посмотри в контейнере, вдруг ты данные там оставил?

    Можно проверить, откатив твои изменения, на пример.
  • https://t.me/clickhouse_ru
    @VladSokolenko #302331 07:05 PM, 04 Dec 2022
    Та данные (data папка) и конфиги точно перевёз.
    Ну попробую откатить. :)
  • https://t.me/clickhouse_ru
    Сервер убивает процесс потому что кх это карьерный экскаватор который не может работать в маленькой песочнице. Для того чтобы сделать простейший селект нужно выделить множество буферов для каждой колонки чтобы очень быстро во множестве потоков распаковывать колонки.
    То что кх может стартовать с 1гб памяти, не значит что он может работать. Если вы почитаете доку там написано что памяти рекомендуется минимум 16, ещё лучше начинать с 64.
    Попробуйте max_threads=16,max_block_size=1000
  • https://t.me/clickhouse_ru
    ок, спасибо попробую. а то голову ломаю. он у меня в песочнице делает все что мне надо, вот только забрать накопанное не могу никак, даже в периоды когда все остальные процессы спят
  • https://t.me/clickhouse_ru
    Я правильно понимаю, это:
    r = client.execute("SET max_threads=16, max_block_size=1000")
    один раз перед всеми селектами?
  • @sovanarelli #302335 07:55 PM, 04 Dec 2022
    Либо в селекте в секции SETTINGS, если это питоновский драйвер то туда можно отдельно передать с ключом client.execute('SELECT... ', settings={'max_threads':16})
  • https://t.me/clickhouse_ru
    @jahspear #302336 07:56 PM, 04 Dec 2022
    ок спасибо, попробую
  • https://t.me/clickhouse_ru
    не помогло.. как же забрать данные, хмм..
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @Dr_kiss666 #302341 09:41 PM, 04 Dec 2022
    Ну очки норм задизайнил, куда писать
  • 05 December 2022 (178 messages)
  • https://t.me/clickhouse_ru
    @den_crane #302344 04:29 AM, 05 Dec 2022
    Human: explain what this SQL does
    SELECT arrayFilter( (z,x) -> not arrayExists(i -> x%i=0 and x<>i, r) , (arrayMap(z->z+2, range(20))) as r,r)

    AI: This SQL statement uses the arrayFilter and arrayMap functions to check for prime numbers in a range from 0 to 20, as well as the arrayExists function to determine if the number is prime. Specifically, it uses the arrayFilter function to filter all numbers that are divisible by any other number besides itself and 1 within the range of 0 to 20. The arrayMap then adds two to each number in the range. Finally, the resulting array is compared to the original range, and the primes are returned.
  • https://t.me/clickhouse_ru
    да я тоже видел как код AI пишет, немного офигел

    https://www.reddit.com/r/rust/comments/zckt2r/openai_speaks_rust_knows_about_crates/
    OpenAI speaks Rust, knows about crates

    So there's all this hype about [ChatGPT](https://chat.openai.com/), the AI chatbot from OpenAI. People are using it to solve the advent of code...

  • https://t.me/clickhouse_ru
    @Begunini #302346 04:58 AM, 05 Dec 2022
    Всем доброе утро ! Подскажите, каким образом и можно ли в ClickHouse реализовать прохождение по массиву с изменением его элементов ? arrayMap создает новый на базе старого, но нельзя обратиться к прошлым индексам нового массива для реализации алгоритма, как и не позволяет осуществлять присвоение элементам старого.
  • https://t.me/clickhouse_ru
    ну никак по обоим пунктам.

    иногда можно придумать как сделать новый массив посчитав каждый элемент без аккумулятора (без обращения к предыдущим элементам).
  • https://t.me/clickhouse_ru
    Понял-принял, благодарю !
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302344 #302349 05:19 AM, 05 Dec 2022
    это не с первого раза или какие-то настройки были дадены? У меня на твой пример оно какую-то фигню пишет, до простых чисел не додумалось.
  • https://t.me/clickhouse_ru
    я фигню всякую спрашивал до этого
    https://pastila.nl/?007be465/d3de5a95c5bfbc14bac3e15963ce7506
  • https://t.me/clickhouse_ru
    кстати по русски ответы тоже внятные весьма
  • https://t.me/clickhouse_ru
    @den_crane #302352 05:30 AM, 05 Dec 2022
    Human: Продолжи сказку, жил был маленький Кликхауз очень жадный до памяти.
    AI: А вот и сказка. Жил-был маленький Кликхауз, которому было необходимо больше памяти, чтобы делать идеи более высокоэффективными и простыми
  • https://t.me/clickhouse_ru
    @aem_ya ↶ Reply to #302352 #302353 05:31 AM, 05 Dec 2022
    И - тормозил?!
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302350 #302354 05:37 AM, 05 Dec 2022
    из фигни он понял что ты интересуешься кликхаусом. По запросу "explain what this clickhouse SQL does" с первого раза додумывается до простых чисел. Ну что-ж, мы находимся здесь - AI теперь не сказки журналистов, а реальность с которой нам жить.
    Но в данном случае есть надежда, что это очередная поисковая система, которая нашла ответ тут - https://github.com/ClickHouse/ClickHouse/issues/17932#issuecomment-741765784
  • https://t.me/clickhouse_ru
    А где-то можно тоже с ним пообщаться?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302355 #302356 05:51 AM, 05 Dec 2022
    прочитайте вот это - https://www.engraved.blog/building-a-virtual-machine-inside/ - и там есть ссылка на GPT3.5 (?) которая еще чуть дальше ушла.

    explain what this clickhouse SQL does SELECT arrayFilter( (z,x) -> not arrayExists(i -> x%i=0 and x<>i, r) , (arrayMap(z->z+2, range(20))) as r,r)

    It creates an array of numbers from 2 to 21 by using the range(20) function, which returns an array of consecutive integers starting from 0 and ending at the specified number (in this case, 20). Then it adds 2 to each element in this array using the arrayMap(z->z+2, range(20)) function, which applies the provided lambda function (in this case, z->z+2) to each element in the given array (in this case, range(20)). This results in an array of numbers from 4 to 23.

    It filters this array using the arrayFilter function, which takes a lambda function and an array as input, and returns a new array containing only the elements for which the lambda function returns true. In this case, the lambda function is (z,x) -> not arrayExists(i -> x%i=0 and x<>i, r), which checks whether the given element (x) is not a prime number. The arrayExists function is used to check whether the element is divisible by any number other than itself (i.e. whether it has any factors other than 1 and itself), and the not operator is used to negate the result (so that the lambda function returns true only for prime numbers).

    The resulting array of prime numbers is then returned by the SQL statement.
  • https://t.me/clickhouse_ru
    Ну получается Denny получил свой код через ИИ ....
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @BarVadim #302360 07:25 AM, 05 Dec 2022
    Доброго времени суток, при rename database перестали работать materialized views (все еще ссылаются на имя прошлой базы Database old_db_name doesn't exist. (UNKNOWN_DATABASE)), подскажите пожалуйста как можно исправить
  • https://t.me/clickhouse_ru
    поменять имя базы в запросе создания матвью

    https://clickhouse.com/docs/ru/sql-reference/statements/alter/view
  • https://t.me/clickhouse_ru
    вью у меня создавались без имени базы
    CREATE MATERIALIZED VIEW IF NOT EXISTS view_name FROM table_name
  • https://t.me/clickhouse_ru
    @cmbcksrl #302363 07:33 AM, 05 Dec 2022
    ну так имя базы то все равно использовалось и для таблицы источника, и для таблицы назначения, и для самого матвью

    имена всех баз можете через SHOW CREATE VIEW посмотреть, там скорее всего для таблиц старое имя базы, тогда надо просто пересоздать матвью с новыми именами бд
  • https://t.me/clickhouse_ru
    пересоздавать, я не помню ни одного механизма ребута MV
  • https://t.me/clickhouse_ru
    @critskiy #302365 07:34 AM, 05 Dec 2022
    как вариант на попробовать можно ручками исправить сам .sql файл, но не помню, принесет ли какие-нибудь результаты. Но лучше посмотреть еще лекцию по MV от @den_crane
  • https://t.me/clickhouse_ru
    @Krisantis #302366 07:39 AM, 05 Dec 2022
    Здравствуйте, подскажите можно как-то проверить, что дата "пустая", кроме как вот таким сравнением?
  • https://t.me/clickhouse_ru
    @cmbcksrl #302368 07:44 AM, 05 Dec 2022
    можно с 0 сравнить или с defaultValueOfTypeName('DateTime')
  • https://t.me/clickhouse_ru
    спасибо, не знал о такой фишке
  • https://t.me/clickhouse_ru
    @cmbcksrl #302370 07:46 AM, 05 Dec 2022
    и кст нижнее значение для DateTime 1970-01-01 00:00:00 на всякий случай
  • https://t.me/clickhouse_ru
    @cmbcksrl #302371 07:46 AM, 05 Dec 2022
    ваше 1900-01-01 00:00:00 к нему и приводится
  • https://t.me/clickhouse_ru
    toDateOrNull попробовать
  • https://t.me/clickhouse_ru
    спасибо
  • https://t.me/clickhouse_ru
    а переименовать их можно? создать бд с старым именем, переименовать вьюхи в новую, удалить старую бд еще раз
  • https://t.me/clickhouse_ru
    Понял, спс
  • https://t.me/clickhouse_ru
    механизма переименования для MV вроде бы нет (поправь меня, @den_crane, если я что-то не так говорю). Если же не хочется прям делать через инструкции show create, то можно поступить способом следующего типа (при наличии datagrip и подобных ей ide):

    show concat(database, '.', name) table_path, engine, create_table_query from system.tables where engine = 'MaterializedView' + добавляете свою фильтрацию на базу и таблицу

    и копируете create_table_query. Как еще один из вариантов, - это скриптос на python, который автоматизирует работу с MV
  • https://t.me/clickhouse_ru
    @phpcode83 #302379 08:14 AM, 05 Dec 2022
    Всем добрый день.
    На сервер с кликхаусом примерно 300 запросов в сек идут запросы. в таблице 600 млн элементов.
    запросы отрабатывают быстро 0,01 сек примерно.
    но бывает примерно через 2-7 сек возникает спонтанная задержка примерно для 30-60 запросов которые подвисают до 1-3 сек
    например выполняя запрос на самом сервере ответ быстрый
    20 rows in set. Elapsed: 0.009 sec. Processed 15.16 thousand rows, 181.93 KB (1.68 million rows/s., 20.13 MB/s.)
    но в момент задержки
    20 rows in set. Elapsed: 1.436 sec. Processed 14.95 thousand rows, 179.35 KB (10.41 thousand rows/s., 124.86 KB/s.)
    запрос один и тот же. только в обычном состоянии скорость 20.13 MB/s а в момент подвисания снижается до 124.86 KB/s.
    на сервере установлена куча метрик, CPU память, сам кликхаус и многое другое только проблемы никак не корелируются с появляющимися тормозами.

    Может кто подскажет в какую сторону смотреть?
  • https://t.me/clickhouse_ru
    @webeaver #302380 08:19 AM, 05 Dec 2022
    кстати вопрос, у меня с MV случилось странное, сделал такую вьюху
    CREATE MATERIALIZED VIEW sparkts_m (`ts` DateTime, `cnt` UInt64)
    ENGINE=MergeTree() ORDER BY ts AS
    SELECT DATE_TRUNC('second', toDateTime(sparkTS)) AS ts, COUNT(*) AS cnt
    FROM mpsiem GROUP BY DATE_TRUNC('second', toDateTime(sparkTS));
    данные полились, решил сверить
    select count(*) from mpsiem where date_trunc('second',sparkTS) = toDateTime('2022-07-19 23:06:01'); дает 114 записей
    select * from sparkts_m WHERE ts=toDateTime('2022-07-19 23:06:01'); дает десятки записей в большинстве которых cnt равно 100000
    как будто записи плодятся сами по себе
    select sum(cnt) from sparkts_m WHERE ts=toDateTime('2022-07-19 23:06:01'); вместо 114 дает под миллион
    чем может быть это вызвано?
  • https://t.me/clickhouse_ru
    я бы начал с таблицы system.query_log

    там находите запросы и смотрите через поля ProfileEvents, там может быть ответ на вопросы
  • https://t.me/clickhouse_ru
    @phpcode83 #302383 08:22 AM, 05 Dec 2022
    спасибо поищу
  • https://t.me/clickhouse_ru
    @cmbcksrl #302384 08:22 AM, 05 Dec 2022
    вот тут пример как использовать эти поля

    https://kb.altinity.com/altinity-kb-useful-queries/query_log/
    Handy queries for a system.query_log

    Handy queries for a system.query_log.

  • https://t.me/clickhouse_ru
    1. Движок не тот посмотрите в семействе MergeTree был движок с суммой, что то вроде SummingMergeTree
    2. Матвью не обновляет старые данные, а производит агрегацию на каждую новую порцию данных. попробуйте добавить в конец запроса final или проводите optimize table - хотя это не очень хорошая практика
  • https://t.me/clickhouse_ru
    @webeaver #302386 08:23 AM, 05 Dec 2022
    пробовал с ним тоже, повторилось
  • https://t.me/clickhouse_ru
    с ним с чем?
  • https://t.me/clickhouse_ru
    @webeaver #302388 08:24 AM, 05 Dec 2022
    с SummingMergeTree
  • https://t.me/clickhouse_ru
    и final тоже делали?
  • https://t.me/clickhouse_ru
    @webeaver #302390 08:25 AM, 05 Dec 2022
    это вот нет
  • https://t.me/clickhouse_ru
    @webeaver #302391 08:34 AM, 05 Dec 2022
    оригинал - mpsiem - тип Distributed на несколько шардов, с этим не может быть связано?
  • https://t.me/clickhouse_ru
    @webeaver #302392 08:35 AM, 05 Dec 2022
    С такой же но MergeTree на другом стенде все ок работает с такими же матвью
  • @110248354 #302393 08:36 AM, 05 Dec 2022
    Добрый день. Подскажите, как подсчитать накопительную сумму уникальных строк от даты1 (общая для всех) до даты2 (каждая из списка дат), имея в качестве источника столбцы 'дата' и строка. Итого будут строки 'дата2' и 'число уникальных строк за период дата1-дата2'. Напрашивается какой-нибудь цикл по датам с условием выборки по датам и уникальным строкам.
  • https://t.me/clickhouse_ru
    можно через массивы, тут пример есть вроде подходящий

    https://kb.altinity.com/altinity-kb-queries-and-syntax/cumulative-unique/#using-arrays
  • https://t.me/clickhouse_ru
    @cmbcksrl #302395 08:39 AM, 05 Dec 2022
    но там еще и другие варианты рассмотрены, которые можете попробовать
  • https://t.me/clickhouse_ru
    ProfileEvents и normalized_query_hash отсутствуют у меня в system.query_log
    либо старая версия кликхауса либо гдето надо включить их?
  • https://t.me/clickhouse_ru
    @cmbcksrl #302397 08:44 AM, 05 Dec 2022
    а какие есть поля тогда? show create table system.query_log;

    и версия за одно какая?
  • https://t.me/clickhouse_ru
    @phpcode83 #302398 08:49 AM, 05 Dec 2022
    CREATE TABLE system.query_log (type Enum8('QueryStart' = 1, 'QueryFinish' = 2, 'ExceptionBeforeStart' = 3, 'ExceptionWhileProcessing' = 4), event_date Date, event_time DateTime, query_start_time DateTime, query_duration_ms UInt64, read_rows UInt64, read_bytes UInt64, written_rows UInt64, written_bytes UInt64, result_rows UInt64, result_bytes UInt64, memory_usage UInt64, query String, exception String, stack_trace String, is_initial_query UInt8, user String, query_id String, address IPv6, port UInt16, initial_user String, initial_query_id String, initial_address IPv6, initial_port UInt16, interface UInt8, os_user String, client_hostname String, client_name String, client_revision UInt32, client_version_major UInt32, client_version_minor UInt32, client_version_patch UInt32, http_method UInt8, http_user_agent String, quota_key String, revision UInt32, thread_numbers Array(UInt32), os_thread_ids Array(UInt32), ProfileEvents.Names Array(String), ProfileEvents.Values Array(UInt64), Settings.Names Array(String), Settings.Values Array(String)) ENGINE = MergeTree PARTITION BY toYYYYMM(event_date) ORDER BY (event_date, event_time) TTL event_date + toIntervalDay(5) SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1
  • https://t.me/clickhouse_ru
    @cmbcksrl #302399 08:50 AM, 05 Dec 2022
    вот эти поля

    ProfileEvents.Names Array(String), ProfileEvents.Values Array(UInt64)
  • https://t.me/clickhouse_ru
    @phpcode83 #302400 08:50 AM, 05 Dec 2022
    version 20.1.4.14 (official build)
  • https://t.me/clickhouse_ru
    @phpcode83 #302401 08:50 AM, 05 Dec 2022
    да ProfileEvents нашел а вот normalized_query_hash где брать?
  • https://t.me/clickhouse_ru
    @cmbcksrl #302402 08:52 AM, 05 Dec 2022
    видимо не завезли тогда еще его, да в принципе можете нужные вам запросы по полю query найти ну и по остальным типа read_rows
  • https://t.me/clickhouse_ru
    это просто поле, чтобы объединить семантически одинаковые запросы, литералы там могут быть разные
  • https://t.me/clickhouse_ru
    @phpcode83 #302404 08:53 AM, 05 Dec 2022
    просто запрос приведенный Вами на странице ругается на отсутсвие этого поля
  • https://t.me/clickhouse_ru
    @cmbcksrl #302405 08:57 AM, 05 Dec 2022
    ну я говорю, что этот запрос делает топ самых тяжелых запросов с разными метриками

    можете убрать группировку, сделать фильтр по дате, когда были ваши запросы и просто раскрыть ProfileEvents без sum, тогда у вас будут все метрики для каждого запроса по отдельности

    что-то типа такого

    https://pastila.nl/?005d86e3/0318ef431f8ffa64ee9beb03c6a2398e
  • https://t.me/clickhouse_ru
    @phpcode83 #302406 08:57 AM, 05 Dec 2022
    ага я понял, спасибо
  • https://t.me/clickhouse_ru
    @cmbcksrl #302407 08:58 AM, 05 Dec 2022
    не ща что
  • Круто, спасибо!
  • https://t.me/clickhouse_ru
    но всеравно было бы интересно добавить такое вот поле которое объединяло бы одинаковые запросы.
  • https://t.me/clickhouse_ru
    @cmbcksrl #302410 09:00 AM, 05 Dec 2022
    обновляйтесь и будет вам счастье)
  • https://t.me/clickhouse_ru
    @phpcode83 #302411 09:01 AM, 05 Dec 2022
    да уже поставил задачу
  • https://t.me/clickhouse_ru
    @Vgrishaeva #302412 10:02 AM, 05 Dec 2022
    Добрый день! Подскажите пожалуйста, как поменять тип данных в ключевом столбце со стринг на int
  • https://t.me/clickhouse_ru
    Никак
  • https://t.me/clickhouse_ru
    ☹️ получается нет обходных путей?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302414 #302415 10:05 AM, 05 Dec 2022
    есть конечно - создать новую таблицу и скопировать данные через insert select
  • @Ghostnsk #302416 10:07 AM, 05 Dec 2022
    ALTER TABLE ... ADD COLUMN
    ALTER TABLE ... UPDATE
    и скрестить пальцы
  • @runTheTable #302418 11:05 AM, 05 Dec 2022
    Привет! В строковом поле содержатся как строковые значения типа "тестовая запись" так и интовые типа 843953537 нет ли возможности написать селект, который бы доставал только интовые значения?
  • @Ghostnsk #302419 11:09 AM, 05 Dec 2022
    регулярки, или конвертирование в число, потом в строку и сравнение с оригиналом
  • спасибо! буду пробовать
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302418 #302421 11:21 AM, 05 Dec 2022
    select toUInt64OrNull(string) as i from table where i is not Null;
  • https://t.me/clickhouse_ru
    листал доку, наткнулся на это

    мб эти функции завезены, но я сомневаюсь, хотя попробовать стоит

    https://clickhouse.com/docs/ru/sql-reference/functions/string-functions#normalized-query-hash
  • Спасибо!
  • https://t.me/clickhouse_ru
    @timofei_melnikov #302424 11:41 AM, 05 Dec 2022
    Пытался пересчитать конкретный день в таблице ReplicatedMergeTree (партицирована по событиям).
    Делал ALTER TABLE table ON CLUSTER cluster DELETE WHERE ... , затем делал INSERT
    Сначала вставилась половина данных, после повторения операции данные вообще не вставились.
    Думал, что не закончилась мутация, подождал несколько часов, делал OPTIMIZE TABLE ... FINAL, в итоге через 12 часов данные в таблице так и не появились.
    Пришлось создать новую таблицу и перезаписать в нее старые данные и добавить новые.
    Почему так может быть? Почему INSERT может не вставлять записи в таблицу?
  • https://t.me/clickhouse_ru
    @BarVadim #302425 11:46 AM, 05 Dec 2022
    Всем привет, сделал rename базы, теперь не пишутся ивенты в базу (берутся из кафки), хотя имя базы везде обновил + datagrip имя меняется базы,
    Если создавать базу с нуля, то пишет все
  • https://t.me/clickhouse_ru
    @Krisantis #302426 12:17 PM, 05 Dec 2022
    здравствуйте, подскажите что за фокус?
    Вычисляю колонку в with и к ней нельзя обратиться больше одного раза в select
    получаю ошибку.
    Если один раз обращаюсь - всё ок
  • https://t.me/clickhouse_ru
    Звучит странно
  • https://t.me/clickhouse_ru
    У вас запятая стоит в конце, уберите её
  • https://t.me/clickhouse_ru
    более чем)
    могу заморочиться скинуть сюда пример
  • https://t.me/clickhouse_ru
    там дальше 1чка
  • https://t.me/clickhouse_ru
    там единичка после нее
  • https://t.me/clickhouse_ru
    @webeaver #302432 12:54 PM, 05 Dec 2022
    а почему алиас не в апострофах?
  • https://t.me/clickhouse_ru
    это не причина проблемы)
  • https://t.me/clickhouse_ru
    @webeaver #302434 12:55 PM, 05 Dec 2022
    везде есть а на таком слове нет, странно
  • https://t.me/clickhouse_ru
    А если без with , будет работать ?
  • https://t.me/clickhouse_ru
    Рестарт кх помогает?
  • https://t.me/clickhouse_ru
    @BarVadim #302437 12:59 PM, 05 Dec 2022
    При RENAME DATABASE не помогает,
    когда создаю чистую с нуля, то оно тоже с начала не пишет, а после рестарта пишет новые только ивенты
  • https://t.me/clickhouse_ru
    Sho create table для всех объектов показывает старое имя базы где-то?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    в таблицах все норм, а вот в materialized view
    CREATE MATERIALIZED VIEW new_db.all_events_v
    TO old_db.all_events
    (
    ...
    AS SELECT
    ...
    FROM old_db.e_stream
    ...
  • https://t.me/clickhouse_ru
    Какой движок у mpsiem?
  • https://t.me/clickhouse_ru
    Distributed
  • https://t.me/clickhouse_ru
    Ну пересозлавайте mv.
  • https://t.me/clickhouse_ru
    А в таблице в которую пишет distributed?
  • https://t.me/clickhouse_ru
    А почему могут новые ивенты не писаться в таблицы?
  • https://t.me/clickhouse_ru
    @webeaver #302446 01:10 PM, 05 Dec 2022
    Я ее не создавал, сейчас гляжу в список, если это то, о чем вы говорите, называется mpsiem_distributed, у нее тип ReplicatedMergeTree
  • https://t.me/clickhouse_ru
    в первом или втором случае?
  • https://t.me/clickhouse_ru
    @BarVadim #302448 01:11 PM, 05 Dec 2022
    в первом при rename database
  • https://t.me/clickhouse_ru
    Так имя базы неправильное
  • https://t.me/clickhouse_ru
    все у вас сделано неправильно. почему движок нерепликейтид у таблицы с мат.вью? Зачем вы в мат. Вью читаете из distributed?
    Но причина скорее всего в том что вы повторяете инсерты в distibuted таблицу
  • https://t.me/clickhouse_ru
    @webeaver #302451 01:16 PM, 05 Dec 2022
    нет, если речь про матвью, то у нее движок MergeTree
  • https://t.me/clickhouse_ru
    Вот именно
  • @1272348401 #302453 01:30 PM, 05 Dec 2022
    Всем привет. Подскажите, пожалуйста, есть ли возможность в КХ сделать табличную функцию? По подобию в t-sql. Где ты передаешь параметр, и по нему из другой таблицы в КХ получаем определенное значение?

    В документации не нашла что-то подобного.
  • https://t.me/clickhouse_ru
    Нет
  • Да, нашла на ГитХабе задачу закрытую с тем же вопросом. Действительно - table-valued функции не поддерживаются.

    Спасибо
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302453 #302456 01:44 PM, 05 Dec 2022
    табличную функцию нельзя, но можно сделать параметризованное view https://kb.altinity.com/altinity-kb-queries-and-syntax/altinity-kb-parameterized-views/
  • https://t.me/clickhouse_ru
    external dictionary source=direct ?
  • https://t.me/clickhouse_ru
    Я подготовил тестовую кверю
    можете попробовать
  • https://t.me/clickhouse_ru
    это баг, но исправлять его не будут.
    он самопочинится когда-нибудь (с выходом нового аналайзер)
  • https://t.me/clickhouse_ru
    Эххх)
  • https://t.me/clickhouse_ru
    @MakeReady #302462 02:25 PM, 05 Dec 2022
    Добрый день! Помню уже было но вылетело из головы
    есть множество строк с повторяющимися данными но радными датами. Как выбрать ту которая с максимальной датой без подзапроса?
  • https://t.me/clickhouse_ru
    кстати если обернуть в materialize, то работает

    SELECT
    toTypeName(bag_field) as type,
    materialize(bag_field) as rrr,
    materialize(bag_field) as bbb,
    1
  • https://t.me/clickhouse_ru
    Оо, спасибо)
  • https://t.me/clickhouse_ru
    @MakeReady #302465 02:26 PM, 05 Dec 2022
    в смысле идентификаторы одинковые значения разные нужно крайнее значение
  • https://t.me/clickhouse_ru
    argMax(data_column, version_column)
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    А в mv заведётся с materialize?
  • https://t.me/clickhouse_ru
    спасибо
  • https://t.me/clickhouse_ru
    не знаю, на самом деле with вам не нужен.

    в КХ можно и нужно объявлять алиасы в любом месте.

    select otherFunc(someFunc() as X) as Y, someFunc1(X), someFunc2(Y)...
  • https://t.me/clickhouse_ru
    @lgtwb #302471 02:30 PM, 05 Dec 2022
    Господа, подскажите. А в запрос create table нельзя передавать settings сразу?
  • https://t.me/clickhouse_ru
    @lgtwb #302472 02:31 PM, 05 Dec 2022
    Вот так ругается
    CREATE TABLE IF NOT EXISTS mnemohuman.a07f6bbe45ef94c7dba329457fc2364be ("status" String, "f7b77656-f771-41ab-87b8-90749e8877af" String, "author" Int32, "id" UUID, "pc" String, "ts" DateTime(), visit_id Int8) ENGINE = ReplacingMergeTree ORDER BY id,author SETTINGS min_bytes_for_wide_part = 0
  • https://t.me/clickhouse_ru
    скобок нет ORDER BY ( id,author )
  • https://t.me/clickhouse_ru
    @lgtwb #302474 02:32 PM, 05 Dec 2022
    Спасибо! В документации кстати примера с settings нет
  • https://t.me/clickhouse_ru
    а как-то без tuple можно?
    мока так, но придется разворачивать
  • https://t.me/clickhouse_ru
    @MakeReady #302476 02:39 PM, 05 Dec 2022
    select
    argMax(tuple(lid.device_id,lid.loyalty_id,lid.base_phone,created_at),
    created_at)
  • https://t.me/clickhouse_ru
    order by date desc limit 1 by id ?
  • https://t.me/clickhouse_ru
    @den_crane #302478 02:45 PM, 05 Dec 2022
    или select argMax(tuple(*), created_at)
  • https://t.me/clickhouse_ru
    о, точно же
  • https://t.me/clickhouse_ru
    @den_crane #302480 02:46 PM, 05 Dec 2022
    >мока так, но придется разворачивать
    а в смысле untuple не хочется
  • https://t.me/clickhouse_ru
    @MakeReady #302481 02:55 PM, 05 Dec 2022
    ))
  • https://t.me/clickhouse_ru
    @dexig #302485 06:05 PM, 05 Dec 2022
    Добрый вечер)
    Подскажите, пожалуйста, как правильно поступать.
    Имеем 4 таблицы, в эти таблицы данные летят с разных компонентов системы, хотим объединять все 4 таблицы в одну, а потом строить графики.

    Как бы мы джойны не крутили, как данные не фильтровали, но в выборках за пару дней наш запрос отъедает 45гб ОЗУ.

    Собственно вопрос, как в таких ситуациях поступают? Или надо все переделывать и писать со всех компонентов в одну таблицу?)))

    Заранее спасибо!)
  • @2070273164 #302486 06:09 PM, 05 Dec 2022
    Сами задали вопрос, сами на него ответили, зачем знак вопроса поставили - непонятно.
  • https://t.me/clickhouse_ru
    сколько у вас данных то если 45Гб за пару дней отжирает?
  • https://t.me/clickhouse_ru
    @m1khal3v #302488 06:13 PM, 05 Dec 2022
    вы FINAL используете в запросе?
  • https://t.me/clickhouse_ru
    @dexig ↶ Reply to #302486 #302489 06:14 PM, 05 Dec 2022
    ну я сначала хотел узнать.)
    на самом деле все выбросить и переделать будет оч сложно, надеюсь найти решение с тем как силами кликача обработать 4 таблицы
  • https://t.me/clickhouse_ru
    а что в этих 4 таблицах?
    все четыре это ивенты но разных типов или это таблица с ивентами и 3 таблицы справочники?
  • https://t.me/clickhouse_ru
    @nataschachu #302491 06:21 PM, 05 Dec 2022
    Разные типы эвентов, то есть сильно разные наборы полей
  • https://t.me/clickhouse_ru
    @m1khal3v #302492 06:22 PM, 05 Dec 2022
    шарды есть? шардируете одинаково? рандомно?
  • https://t.me/clickhouse_ru
    @nataschachu #302493 06:23 PM, 05 Dec 2022
    Шардов пока нет, но вообще хотели бы, наверное
  • https://t.me/clickhouse_ru
    Нет
  • https://t.me/clickhouse_ru
    @m1khal3v #302495 06:27 PM, 05 Dec 2022
    а джоин left или inner?
  • https://t.me/clickhouse_ru
    @dexig ↶ Reply to #302490 #302496 06:28 PM, 05 Dec 2022
    так обманул слегка, таблиц 3.

    все таблицы содержат messageId и по этой колонке клеим сначала две таблицы inner joinом, потом результат клеим с третьей таблицей.
  • https://t.me/clickhouse_ru
    @m1khal3v #302497 06:29 PM, 05 Dec 2022
    FROM t1 INNER JOIN t2 INNER JOIN t3 получается?
  • https://t.me/clickhouse_ru
    @dexig #302498 06:31 PM, 05 Dec 2022
    ух

    SELECT FROM
    (
    SELECT
    FROM default.AAAA
    ) D
    INNER JOIN
    (SELECT
    FROM
    (
    SELECT
    FROM default.BBBB
    INNER JOIN
    (
    SELECT
    FROM default.CCCC
    ) B
    USING messageId, deviceId
    ) C
    USING messageId, deviceId

    сократил как мог для иллюстрации)
  • https://t.me/clickhouse_ru
    @dexig #302499 06:31 PM, 05 Dec 2022
    ну и собственно там еще фильтрация и группировка в каждом селекте
  • https://t.me/clickhouse_ru
    @m1khal3v #302500 06:37 PM, 05 Dec 2022
    фильтры вы же прям в подзапросы прокидываете? данных в таблицах равномерно? я бы делал так

    SELECT FROM
    (
    SELECT
    FROM default.AAAA
    ) A
    INNER JOIN
    (
    SELECT
    FROM default.BBBB
    ) B
    INNER JOIN
    (
    SELECT
    FROM default.CCCC
    ) C

    при этом данных меньше всего должно выгребаться из C и больше всего из A. на сколько я помню клик правую часть держит в памяти полностью
  • https://t.me/clickhouse_ru
    @m1khal3v #302501 06:42 PM, 05 Dec 2022
    также вы можете указать кликхаусу после какого объёма результат группировки сбрасывать из памяти на диск в конце запроса SETTINGS max_bytes_before_external_group_by = и объём в байтах соответственно
  • https://t.me/clickhouse_ru
    @dexig #302502 06:43 PM, 05 Dec 2022
    получается в моем запросе выходит так что мы в подзапросе поджойнили 2 таблицы положили их в память и потом пытаемся результат джойнить в третью и поэтому упираемся?
  • https://t.me/clickhouse_ru
    @dexig #302503 06:43 PM, 05 Dec 2022
    спасибо большое, буду эксперементировать)
  • https://t.me/clickhouse_ru
    сложно сказать, я не могу ваши данные покрутить) варианты куда поковырять прежде чем придумывать самолёт с одной широкой таблицей есть
  • https://t.me/clickhouse_ru
    можете прикинуть/посмотреть, в какой из таблиц после фильтров остается меньше всего данных и в остальных подзапросах добавить к фильтрам еще условие:

    where cityHash64(messageId, deviceId) in (
    select cityHash64(messageId, deviceId)
    from default.XXXX
    where ...
    group by cityHash64(messageId, deviceId)
    )
  • https://t.me/clickhouse_ru
    @m1khal3v #302506 06:50 PM, 05 Dec 2022
    с тем же шардированием если будете думать, то подумайте как одинаково + равномерно все таблицы шардировать, т.е чтобы все таблицы можно было спокойно джоинить в рамках одного шарда, в таком случае можно будет делать distributed_product_mode = 'local' + distributed_group_by_no_merge = 1|2
  • https://t.me/clickhouse_ru
    @dexig #302507 06:55 PM, 05 Dec 2022
    спасибо большое) буду играться)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302496 #302508 07:13 PM, 05 Dec 2022
    если все источники ивентов дают вам общий id, то можно все сделать без join на AggregatingMergeTree. Сделайте одну широкую таблицу order by id с полями SimpleAggregateFunction, и лейте данные из каждого источника в эту таблицу. Там есть некоторая сложность с подбором подходящих функций аггрегаций для каждого столбца, но вопрос в приницпе решаемый. В самом крайнем случае придется применить AggregateFunction(argMax,Nullable(...),DateTime)
  • https://t.me/clickhouse_ru
    @dexig ↶ Reply to #302508 #302509 07:15 PM, 05 Dec 2022
    проблема в том что я не могу изменять источник, надо много команд потревожить, можно как-то из таблицы в таблицу перегонять данные? например по крону? нам не столь важно иметь в реалтайме данные
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302509 #302510 07:17 PM, 05 Dec 2022
    А сами эти 3 таблицы менять можете? order by какой у них? Если тот самый id, то можно попробовать join_algorithm = 'full_sorting_merge'
  • https://t.me/clickhouse_ru
    @dexig #302511 07:17 PM, 05 Dec 2022
    да таблицы можно вертеть
  • https://t.me/clickhouse_ru
    @Sablast #302512 07:17 PM, 05 Dec 2022
    Да проще матвью навесить и слить всё в одну
  • https://t.me/clickhouse_ru
    @bvt123 #302513 07:18 PM, 05 Dec 2022
    ну так выравнивайте order by (если еще не), и пробуйте full_sorting_merge - он ровно для этого и сделан - внутри MV быстро джойнить не пытаясь выжрать память построением хеш таблицы
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302511 #302514 07:21 PM, 05 Dec 2022
    только учтите, что full_sorting_merge требует 22.10 (9?) для нормальной работы
  • https://t.me/clickhouse_ru
    @dexig #302515 07:22 PM, 05 Dec 2022
    order by везде по timestamp скорее всего потому что по отдельным таблицам тоже графики строят
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302515 #302516 07:24 PM, 05 Dec 2022
    тогда воспользуйтесь советом Константина - вешайте MV на каждую из 3-х таблиц, и сбрасывайте все данные в одну AggregatinMT, как я описал выше. Никого не потревожите, но добавите рисков потерь.
  • https://t.me/clickhouse_ru
    @dexig #302517 07:25 PM, 05 Dec 2022
    спасибо будем пробовать)
  • https://t.me/clickhouse_ru
    @nataschachu #302518 07:29 PM, 05 Dec 2022
    Круто, спасибо всем большое!
  • @radiojoh #302519 07:38 PM, 05 Dec 2022
    Доброй ночи. У меня при выборе SELECT citry выдает латиницей города. Подскажите вариант решения на уровне SQL ? CASE? или есть более эстетичное?(Через словарь, который например может тоже запрашиваться из другой БД СLickHouse ) Создал словарь CREATE DICTIONARY dict_ip2loc_city
    (
    `ipstart` UInt32,
    `ipend` UInt32,
    `cntaddr` UInt64,
    `mask` UInt8,
    `prefix` String,
    `country_code` String,
    `country` String,
    `province` String,
    `city` String,
    `lon` Float32,
    `lat` Float32
    )
    PRIMARY KEY prefix
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302519 #302521 07:48 PM, 05 Dec 2022
    Ну выдает латиницей и выдает. Неплохой вариант. А как надо то? На русском?
    Если все что вам надо это конвертнуть 10-20 названий из какой-то строки (и вы задумываетесь про case), то хороший путь это функция transform - https://clickhouse.com/docs/en/sql-reference/functions/other-functions/#transformx-array_from-array_to-default
    Если же у вас все города мира, то таки-да - кладите их в табличку и делайте словарь.
  • @2070273164 #302522 07:53 PM, 05 Dec 2022
    Словарь на весь мир ещё поискать надо.
  • @radiojoh #302523 07:55 PM, 05 Dec 2022
    select distinct (country_code, province, city) from dict_ip2loc_city заполнил словарь, у меня в нем все тоже латиница. Соответствено RU латиница
  • @radiojoh #302524 07:56 PM, 05 Dec 2022
    например
  • https://t.me/clickhouse_ru
    Вы пытаетесь донести какую-то свою боль считая её очевидной. Каким образом iso code по вашему должен быть связан с названием города?
  • @2070273164 #302526 07:56 PM, 05 Dec 2022
    У maxmind вроде есть локализация на русский, вы не их данными пользуетесь?
  • Я нет, бэкенд, который отливает мне данные - видимо да, но на латинице без кирилицы. Но, не в моей власти изменить на кирилицу. Подумал создать второй словарь с ключом на первый в латинице ... но, тут я "приуныл" )
  • https://t.me/clickhouse_ru
    Попросите чтобы вам отдавали и на русском тоже
  • Я хочу сложный путь )
  • @2070273164 #302531 08:06 PM, 05 Dec 2022
    Хотя бы пусть колонку cityId в формате geoname id выгружают, тогда можно маппинг сделать по открытым данным отсюда http://www.geonames.org/
  • https://t.me/clickhouse_ru
    Скачайте словарь maxmind версии free и сделайте себе маппинг en-ru, а дальше как планировали сделать второй словарь
  • @radiojoh #302533 08:12 PM, 05 Dec 2022
    Спасибо за рекомендации
  • 06 December 2022 (144 messages)
  • https://t.me/clickhouse_ru
    спасибо за ответы!
  • https://t.me/clickhouse_ru
    @runiverse_hiker #302540 07:41 AM, 06 Dec 2022
    Добрый день. Подскажите пожалуйста - как добавить колонку в таблицу с движком EmbeddedRocksDB?
  • https://t.me/clickhouse_ru
    Привет! Для уточнения. Правильно ли я понял, что для того, чтобы удалялись дубли, нужно обновиться на 22.11, и использовать min_age_to_force_merge_on_partition_only=true, опцию, а не только min_age_to_force_merge_seconds на 22.10 ?
    Пробовали на 22.10 только с первой опцией, и ничего не сработало. Дубли не удалились.
  • https://t.me/clickhouse_ru
    @skinka83 #302545 09:00 AM, 06 Dec 2022
    Добрый день! Наткнулся на такое поведение при запросе что в иннер джоин добавляется хевинг с условием из основного условия. из-за этого получается ошибка т.к. иннер запрос не знает о тех полях которые используются в основном условии
  • https://t.me/clickhouse_ru
    @skinka83 #302546 09:00 AM, 06 Dec 2022
    я понимаю что это какаето внутренняя оптимизация! но как сделать что он так не делал не могу понять
  • https://t.me/clickhouse_ru
    @MakeReady #302547 09:05 AM, 06 Dec 2022
    Добрый день!
    как в КХ решается такая задача?
    SELECT tr.*
    FROM tr
    JOIN tr2 on tr.uid = tr2.uid and tr.age > tr2.age;
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    Добрый день! Вероятно тут будет полезно немного рассказать о топологии таблиц, участвующих в джойне( распределенные они или нет, какой ключ распределения) + привести пример запроса, чтобы понять как ключ распределения(если есть) коррелирует с условием в джойне и полями группировки
  • https://t.me/clickhouse_ru
    А разве условия типа больше или меньше не должны быть в секции WHERE?
  • https://t.me/clickhouse_ru
    спасибро, слона то я и не заметил )
  • https://t.me/clickhouse_ru
    в обычном случае должны
    но не всегда это подходит
    да и дороже
  • https://t.me/clickhouse_ru
    "спасибро" - а это "спасибо бро" или "спаси бро":) Понравилось слово:)
  • https://t.me/clickhouse_ru
    :)) первое
  • https://t.me/clickhouse_ru
    таблицы в разных базах данных
    поля для пересечения uint64
    ```

    SELECT
    p.a,
    p.b,
    l.a
    FROM
    db_49985.table as p
    inner JOIN (
    SELECT
    l.a,
    l.ch64
    FROM
    (
    SELECT
    COUNT() AS a,
    ch64
    FROM
    db_18665.table l
    WHERE
    b > 1
    GROUP BY
    ch64) as l ON
    l.ch64 = p.ch64
    WHERE
    p.b = 100
    LIMIT 100

    ```
    запрос примерно вот такой
  • https://t.me/clickhouse_ru
    @skinka83 #302556 09:18 AM, 06 Dec 2022
    ошибку получаю плана

    SQL Error [47] [07000]: Code: 47. DB::Exception: Missing columns: 'b while processing query: 'SELECT
    l.a,
    l.ch64
    FROM
    (
    SELECT
    COUNT() AS a,
    ch64
    FROM
    db_18665.table l
    WHERE
    b > 1
    GROUP BY
    ch64 HAVING b = 100
    AS l WHERE p.b = 100
  • https://t.me/clickhouse_ru
    WHERE
    b > 1
    GROUP BY
    ch64 HAVING b = 100
    AS l WHERE p.b = 100
    тут несколько странно написано. потеряны скобки? зачем в принципе b в HAVING если вы его уже задаете в WHERE? и зачем ещё раз WHERE p.b = 100?
  • https://t.me/clickhouse_ru
    @skinka83 #302559 09:31 AM, 06 Dec 2022
    так у меня тотже вопрос
  • https://t.me/clickhouse_ru
    @skinka83 #302560 09:31 AM, 06 Dec 2022
    это текст ошибки
  • https://t.me/clickhouse_ru
    @skinka83 #302561 09:32 AM, 06 Dec 2022
    скобку да я мог пропустить когда менял свой запрос на пример
  • https://t.me/clickhouse_ru
    @skinka83 #302562 09:33 AM, 06 Dec 2022
    но штука в том что он делает оптимизацию и добавляет в подзапрос иннер хевинг притом что он отбрасывает конструкцию пересечения которая находится в ON
  • https://t.me/clickhouse_ru
    @skinka83 #302563 09:34 AM, 06 Dec 2022
    вот тут както обмануть чтобы он не делал оптимизацию
  • https://t.me/clickhouse_ru
    @skinka83 #302564 09:34 AM, 06 Dec 2022
    и вообще зачем он ее делает если там нет этих полей
  • @eperesadka #302565 09:35 AM, 06 Dec 2022
    кто-0нибудь знает что-то про MaterializedMySQL? ее уже можно в какой-то приемлимом виде использовать?
  • https://t.me/clickhouse_ru
    как же вы любите select внутри select... Ну разбейте вы это дело на 3 подзапроса в cte - и отладка будет проще в разы.

    with
    q1 as (select....),
    q2 as (select....)
    select .. from q1 inner.... q2
  • https://t.me/clickhouse_ru
    @skinka83 #302568 09:37 AM, 06 Dec 2022
    это не я люблю а ОРМ любит
  • https://t.me/clickhouse_ru
    ну я, например, за годы пользования КХ привык что CTE не работают нормально и подзапросы это clickhouse way)))
  • https://t.me/clickhouse_ru
    @SuperBatmanHere #302571 09:50 AM, 06 Dec 2022
    https://pastebin.com/4gQ3gFr3

    От чего зависит данное поведение у фунцкии neighbor?
    bf78aad018b0 :) select date, formatReadableSize(tx) as tx, formatReadableSize(rx - Pastebin.com

    Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.

  • @716762776 #302572 09:52 AM, 06 Dec 2022
    так CTE в clickhouse это просто именованный подзапрос и разницы в работе не должно быть. Нет ?
    А так да, для отладки CTE удобней
  • https://t.me/clickhouse_ru
    @mikemugen #302574 10:03 AM, 06 Dec 2022
    Коллеги, подскажите вопрос новичка - сделал таблицу StripeLog, записал данные а select попеременно возаращает разные данные. (видимо из разных 4х нод). Это я записал неправильно или выбираю неправильно?
  • @belesev #302575 10:05 AM, 06 Dec 2022
    Привет!
    Не смог найти в документации инструкции: есть ли возможность мигрировать данные с собственной инсталляции Clickhouse в Cloud?
    Нашёл только про переезд из Google Bug Query
  • https://t.me/clickhouse_ru
    нужны: описания движков таблиц, есть ли поверх distributed, как вставляли, как селектили, конфигурация кластера - тогда можно будет дальше гадать
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    4 пода:
    2 шарда и 2 реплики

    CREATE TABLE default.Document
    (
    .......
    )
    ENGINE = StripeLog
    COMMENT 'Документы';

    импорт csv файла через dbeaver с дефолтными настройками.
  • https://t.me/clickhouse_ru
    стоит балансер перед кх? chproxy?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    о оно. гранд мерси!
  • https://t.me/clickhouse_ru
    а нет. не оно. все равно не выдал все таблицы. (
  • Спасибо!
    Первое, правда, судя по документации не рекомендуется для миграции (из-за большого потока данных)
    Второе выглядит как то, что нужно!
  • https://t.me/clickhouse_ru
    а покажите тогда селект, который возвращает разные данные
  • https://t.me/clickhouse_ru
    SELECT * FROM default.Document ORDER BY DateUpdate
  • https://t.me/clickhouse_ru
    @cmbcksrl #302586 10:26 AM, 06 Dec 2022
    то есть вы делаете селект из одной таблицы StripeLog с сортировкой, а данные каждый раз разные падают? делаете на одной и той же ноде?
  • https://t.me/clickhouse_ru
    @Gena12M #302587 10:29 AM, 06 Dec 2022
    Всем привет
    столкнулся вот с такой ошибкой
    DB::Exception: Method getDefault() is not implemented for data type Object('json'). (NOT_IMPLEMENTED)

    когда селекчу в клике из пг
  • https://t.me/clickhouse_ru
    да вот мне подсказывают, что это балансир постоянно кидает на разные поды и как собрать данные воедино - непонятно
  • https://t.me/clickhouse_ru
    поменяйте движок таблиц на MergeTree, поверх сделайте Distributed
  • https://t.me/clickhouse_ru
    @cmbcksrl #302590 10:34 AM, 06 Dec 2022
    ну если у вас прописан ваш кластер в remote_servers, то можно попробовать обернуть ваши таблицы Distributed
  • https://t.me/clickhouse_ru
    @cmbcksrl #302591 10:34 AM, 06 Dec 2022
    вот да
  • https://t.me/clickhouse_ru
    @mikemugen #302592 10:35 AM, 06 Dec 2022
    Ща
  • @1272348401 #302593 10:43 AM, 06 Dec 2022
    Всем привет.
    Коллеги, подскажите, возможно ли через ODBC https://clickhouse.com/docs/ru/engines/table-engines/integrations/odbc/
    Из кликхауса настроить insert в MSSQL БД?
    Если судить по задачам на гитхабе и в документации, то работает он работает для КХ только на Импорт, но не на Экспорт. Верно понимаю?
    ODBC | ClickHouse Docs

    table-engine-odbc}

  • https://t.me/clickhouse_ru
    тут первое, что напрашивается сделать, так это для первой таблицы тоже подзапрос с условием WHERE p.b = 100
    написать и поведение станет более предсказуемым
    + тут есть проблема с алиасами в запросе:
    когда внутри запрос:
    SELECT
    COUNT() AS a,
    ch64
    FROM
    db_18665.table l
    WHERE
    b > 1
    GROUP BY
    ch64

    то правильнее будет написать l.b > 1, если хочется отфильтровать по полю b из таблицы db_18665.table
  • https://t.me/clickhouse_ru
    @philipbu #302595 11:00 AM, 06 Dec 2022
    Добрый день!
    В кликхаусе есть возможность создать иерархические словари
    https://clickhouse.com/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-hierarchical/

    При их использовании я столкнулся с проблемой, что у одного потомка может быть только один родитель!
    т/е случай с регионами работает нормально:
    0 (Common parent)

    ├── 1 (Russia)
    │ │
    │ └── 2 (Moscow)
    │ │
    │ └── 3 (Center)

    └── 4 (Great Britain)

    └── 5 (London)

    а случай с семейным древом не работает:

    0 grandFather1

    ├── 2 father ──────┐
    │ │
    1 grandMother1 │

    ├── 6 child

    3 grandFather2 │
    │ │
    ├── 5 mother ──────┘

    4 grandMother2

    и для 6 child формируется только одна случайная связь, то же самое происходит для каждого из его прямых родителей 2 father, 5 mother

    Мне требуется по таким деревьям перемещаться обычно сверху вниз, например ищу всех детей для узла.

    Может кто-то сталкивался с подобными ситуациями и может поделиться опытом?

    В моем случае кол-во узлов в графе от 100К до 1М.
    Глубина графа динамическая и может быть от 2 до 30.
    Hierarchical Dictionaries | ClickHouse Docs

    ClickHouse supports hierarchical dictionaries with a numeric key.

  • https://t.me/clickhouse_ru
    @philipbu #302596 11:01 AM, 06 Dec 2022
    пример с потомками я специально упростил до одного ребенка, думаю вариации с многодетными семьями вы сможете легко себе представить)
  • @K_katerina73 #302597 11:08 AM, 06 Dec 2022
    #вакансия #DBA #ClickHouse

    Вакансия: Администратор баз данных ClickHouse
    Компания: Wildberries
    Формат: удаленка или гибрид
    ЗП от 300-400 net;

    Команда Антифрод-решений занимается поиском/анализом пользовательской информации на предмет возможных мошеннических/аномальных действий на маркетплейсе.
    Основная цель - вычленить негативные сущности (пользователей, поставщиков, изображения) и одним из методов обезвредить их.

    📌 Задачи:
    • Администрирование, оптимизация, автоматизация БД;
    • Мониторинг БД; Резервное копирование и восстановление, управление правами доступа;
    • Участие в расширении технологического стека;
    • Написание базы знаний о БД.

    📌 Требования:
    • Опыт работы с БД Clickhouse;
    • Опыт работы с высоконагруженными БД и большими по объему БД;
    • Знания принципов работы СУБД, схем баз данных, запросов, индексов;
    • Опыт работы с системами мониторинга.

    Контакты:
    - Телеграмм: @K_katerina73
    - Почта: kiseleva.e23@wb.ru
  • https://t.me/clickhouse_ru
    @lexkozhev #302599 11:25 AM, 06 Dec 2022
    Привет всем! Подскажите пожалуйста, может кто сталкивался. При запуске N параллельных запросов их скорость деградирует в несколько раз. Загрузка по CPU, памяти, диску и iops меньше чем 50%.

    Для теста запускал один тяжелый запрос в 10 потоков.
  • https://t.me/clickhouse_ru
    Ну да, ожидаемо для Clickhouse
  • https://t.me/clickhouse_ru
    Подскажете чем это может быть вызвано? И можно ли с этим что то сделать
  • https://t.me/clickhouse_ru
    По дефолту для запроса кх использует половину ядер, вот и считайте так сказать что будет если их 10
  • https://t.me/clickhouse_ru
    @lgtwb ↶ Reply to #302602 #302603 11:36 AM, 06 Dec 2022
    А как это кстати мониторить? Смотреть cpu wait?
  • https://t.me/clickhouse_ru
    а можете ссылку на это в исходниках закинуть? чтобы более подробно вопрос изучить
  • https://t.me/clickhouse_ru
    SELECT * FROM system.settings WHERE name = 'max_threads';
  • https://t.me/clickhouse_ru
    Спасибо! В таком случае это не должно отображаться в виде высокого CPU Utilization или LA? Такое ощущение что CH не очень оптимально утилизирует ресурсы.

    Имеет ли смысл редактировать параметр max_threads, или процессорное время будет и так справедливо делиться.
  • https://t.me/clickhouse_ru
    В таком случае это не должно отображаться в виде высокого CPU Utilization или LA?

    Должно, скорее вы все таки во что то да упираетесь.

    > Имеет ли смысл в таком случае редактировать параметр max_threads, или процессорное время будет и так справедливо делиться.

    Если у вас очень много легких запросов (или просто параллельных) бывает смысл выкрутить max_threads в 1, тогда можно выжать 10-20% QPS
  • https://t.me/clickhouse_ru
    48 ядер с гипер трейдингом. Десятки параллельных маленьких запросов и единицы параллельных аналитических (2-8 qps).
  • https://t.me/clickhouse_ru
    Ну для маленьких запросов можете поставить max_threads в 1
  • https://t.me/clickhouse_ru
    Попробуем, спасибо!
  • https://t.me/clickhouse_ru
    @nordluf #302611 11:55 AM, 06 Dec 2022
    Господа, можете меня ткнуть в контакт человека который пишет докерфайлы для КХ? Я бы хотел продолжить вчерашнюю митапную дискуссию
  • https://t.me/clickhouse_ru
    Felixoid - Overview

    Russian Hydrometcenter → Yandex LLC → Yandex.Market Lab LLC → InnoGames GmbH → LINK Mobility GmbH → ClickHouse Inc. - Felixoid

  • https://t.me/clickhouse_ru
    @nordluf #302614 12:30 PM, 06 Dec 2022
    (Вангую, что это он @Felixoid)
    Насколько я вижу, сейчас собирается любая версия кипера с конкретным бинарником:
    https://github.com/ClickHouse/ClickHouse/blob/master/docker/keeper/Dockerfile#L31
    https://github.com/ClickHouse/ClickHouse/blob/22.10/docker/keeper/Dockerfile#L31
    https://github.com/ClickHouse/ClickHouse/blob/22.9/docker/keeper/Dockerfile#L31
    https://github.com/ClickHouse/ClickHouse/blob/22.8/docker/keeper/Dockerfile#L31

    С одной и той-же версией 22.4.1.917
    В докер-хабе тоже самое: https://hub.docker.com/layers/clickhouse/clickhouse-keeper/22.9.6-alpine/images/sha256-ce7b538862e1e2c667dd00d384dcdc1f853c928e3f61108d158c7a6357d5bc36?context=explore

    Ты говорил что у тебя берутся разные бинарники из артефактов сборки. А можешь показать где это делается, а то я не могу понять механизма

    (и да, если что - я готов уйти в личку если это тут оффтоп)
    Felixoid 🚜🇩🇪

    Гоблин без страны, зато с богатым багажом опыта.

  • @nine11ven #302617 12:46 PM, 06 Dec 2022
    Привет!
    Подскажите, пожалуйста, если кто-то встречался с подобным – буду безмерно благодарен.

    При попытке ренейма колонки, участвующей в сортировке (DDL), вылетает вот такая ошибка (скрин – пытаюсь поменять регистр с id на ID).

    Мб есть какой-нибудь действенный воркараунд? Гугл не помог(
  • https://t.me/clickhouse_ru
    PRIMARY KEY поля нельзя в clickhouse трогать

    воркараунд
    новая таблица
    и INSERT INTO new_table SELECT * FROM old_table
  • https://t.me/clickhouse_ru
    @GenRockeR #302619 12:56 PM, 06 Dec 2022
    Всем добрый день.

    Пытаюсь настроить сбор данных их ClickHouse c NiFi. Прочилал документацию вот тут https://clickhouse.com/docs/en/integrations/nifi-and-clickhouse/

    У меня по какой-то причине не проходит соединение в DBCPConnectionPool, ругается на учетку и ошибку AUTHENTICATION_FAILED.

    Запрос курлом работает с этой учеткой.

    Учетка только для чтения.

    Может кто подсказать, куда нужно копать дополнительно?

    ListDatabaseTables[id=07221abe-33cc-13d2-4ce4-55fa83aaabb8] Processing failed: org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: Cannot create PoolableConnectionFactory (Code: 516. DB::Exception: nifi: Authentication failed: password is incorrect or there is no user with such name. (AUTHENTICATION_FAILED) (version 22.5.1.2079 (official build))
    , server ClickHouseNode [uri=https://HOSTNAME:8123/kuma, options={sslrootcert=/opt/nifi/nifi-current/conf/kuma/ca-cert.pem,sslcert=/opt/nifi/nifi-current/conf/kuma/cert.pem,sslkey=/opt/nifi/nifi-current/conf/kuma/private_pkcs8.pem,sslmode=STRICT}]@-1020150139)
    - Caused by: java.sql.SQLException: Cannot create PoolableConnectionFactory (Code: 516. DB::Exception: nifi: Authentication failed: password is incorrect or there is no user with such name. (AUTHENTICATION_FAILED) (version 22.5.1.2079 (official build))
    , server ClickHouseNode [uri=https://HOSTNAME:8123/kuma, options={sslrootcert=/opt/nifi/nifi-current/conf/kuma/ca-cert.pem,sslcert=/opt/nifi/nifi-current/conf/kuma/cert.pem,sslkey=/opt/nifi/nifi-current/conf/kuma/private_pkcs8.pem,sslmode=STRICT}]@-1020150139)
    - Caused by: java.sql.SQLException: Code: 516. DB::Exception: nifi: Authentication failed: password is incorrect or there is no user with such name. (AUTHENTICATION_FAILED) (version 22.5.1.2079 (official build))
    , server ClickHouseNode [uri=https://HOSTNAME:8123/kuma, options={sslrootcert=/opt/nifi/nifi-current/conf/kuma/ca-cert.pem,sslcert=/opt/nifi/nifi-current/conf/kuma/cert.pem,sslkey=/opt/nifi/nifi-current/conf/kuma/private_pkcs8.pem,sslmode=STRICT}]@-1020150139
    - Caused by: java.io.IOException: Code: 516. DB::Exception: nifi: Authentication failed: password is incorrect or there is no user with such name. (AUTHENTICATION_FAILED) (version 22.5.1.2079 (official build))
    Connect Apache NiFi to ClickHouse | ClickHouse Docs

    Stream data into ClickHouse using NiFi data pipelines

  • Понял. Спасибо за ответ)
  • https://t.me/clickhouse_ru
    запрос curl работает с этой учеткой запущенный внутри того же хоста \ контейнера в котором NiFi поднят?
  • https://t.me/clickhouse_ru
    @GenRockeR #302622 01:08 PM, 06 Dec 2022
    нет, с соседнего хоста. С того же хоста, где развернут контейнер NiFI.
  • https://t.me/clickhouse_ru
    @GenRockeR #302623 01:10 PM, 06 Dec 2022
    учетку создавал в sql: Create user. Ограничения на подсеть у неё нет. Есть ограничение, что эта учетка readonly.
  • https://t.me/clickhouse_ru
    а вам не 8443 порт нужен?
  • https://t.me/clickhouse_ru
    @GenRockeR #302625 01:13 PM, 06 Dec 2022
    продукт настроен так. Выключен http интерфейс и включен только https интерфейс, но порт установили 8123 для него
  • https://t.me/clickhouse_ru
    а там нигде не надо выставить включение SSL явно?

    jdbc:ch:https://HOSTNAME:8443/default?ssl=true

    эта строка навела на мысль
  • https://t.me/clickhouse_ru
    @GenRockeR #302630 02:07 PM, 06 Dec 2022
    ну включен этот параметр
  • https://t.me/clickhouse_ru
    @GenRockeR #302631 02:09 PM, 06 Dec 2022
    jdbc:ch:https://HOSTNAME:8123/kuma?ssl=true&sslrootcert=/opt/nifi/nifi-current/conf/kuma/ca-cert.pem&sslcert=/opt/nifi/nifi-current/conf/kuma/cert.pem&sslkey=/opt/nifi/nifi-current/conf/kuma/private_pkcs8.pem
    Пробовал в url передать пользователя и пароль и в uri тоже

    &user=nifi&password=XXX
  • https://t.me/clickhouse_ru
    @GenRockeR #302632 02:10 PM, 06 Dec 2022
    В логе клика вижу ошибки, видимо где-то не передается логин и пароль:

    2022.12.06 14:05:27.662891 [ 1915109 ] {} <Error> Access(user directories): from: 172.20.21.8, user: nifi: Authentication failed: Code: 36. DB::Exception: Credentials required. (BAD_ARGUMENTS), Stack trace (when copying this message, always include the lines below):
    2022.12.06 14:05:27.663099 [ 1915109 ] {} <Error> DynamicQueryHandler: Code: 516. DB::Exception: nifi: Authentication failed: password is incorrect or there is no user with such name. (AUTHENTICATION_FAILED), Stack trace (when copying this message, always include the lines below):
  • https://t.me/clickhouse_ru
    Эта ошибка для любой проблемы auth одинаковая, чтобы не раскрывать детали проблемы интрудеру
  • https://t.me/clickhouse_ru
    Понятно.

    Варианты закончились у меня )) Если только попробовать включить опять http интерфейс и так проверить
  • https://t.me/clickhouse_ru
    У вас сертификаты лежат в /opt каталоге , я не уверен что jdbc такое умеет
  • https://t.me/clickhouse_ru
    @Maria_OzonTech #302636 02:23 PM, 06 Dec 2022
    #jobs #вакансия #ClickHouse

    Привет!

    Сейчас мы в поиске эксперта для усиления нашей команды ClickHouse в Ozon Tech.

    В Ozon около 100 инсталяций ClickHouse. Есть кластер с объемом данных более 2.5 петабайт. Мы часто сталкиваемся с неочевидными проблемами, требующими понимания внутреннего устройства ClickHouse, принципов его взаимодействия с системным уровнем. Внутренней экспертизы не всегда хватает для решения подобных случаев.

    🔹Нужно будет заниматься:

    - Развивать инструменты и платформу управлениям кластерами Clickhouse;
    - Обеспечивать отказоустойчивость кластеров в разных ситуациях (бэкапы, миграции, восстановление данных);
    - Находить способы повышения производительности и отказоустойчивости кластеров, разбирать инциденты

    🔹Что мы ожидаем от вас:

    - Знание SQL и устройства БД, движков, индексов.
    - Опыт работы с Git, Kubernetes, Docker, Kafka, Zookeeper, Ansible/Terraform/Helm.
    - Понимание внутренностей Unix/Linux систем и инструментов отладки (strace и т.д.)

    🔹Будет бонусом:

    - Опыт работы с NoSQL базами данных;
    - Знание методологии CI/CD

    📲Контакт для связи https://t.me/Maria_OzonTech
    Mary

    IT рекрутер Ozon Tech 💚 Platform

  • https://t.me/clickhouse_ru
    судя по коду умеет.

    options.put(ClickHouseClientOption.SSL_ROOT_CERTIFICATE, rootCaFile);
    options.put(ClickHouseClientOption.SSL_CERTIFICATE, certFile);
    options.put(ClickHouseClientOption.SSL_KEY, keyFile);
  • https://t.me/clickhouse_ru
    SSL_MODE("sslmode", ClickHouseSslMode.STRICT,
    "verify or not certificate: none (don't verify), strict (verify)"),
    /**
    * SSL root certificiate.
    */
    SSL_ROOT_CERTIFICATE("sslrootcert", "", "SSL/TLS root certificates."),
    /**
    * SSL certificiate.
    */
    SSL_CERTIFICATE("sslcert", "", "SSL/TLS certificate."),
    /**
    * SSL key.
    */
    SSL_KEY("sslkey", "", "RSA key in PKCS#8 format."),
  • https://t.me/clickhouse_ru
    А каким пользователь Линукс nifi запускается?
  • https://t.me/clickhouse_ru
    @GenRockeR #302640 02:32 PM, 06 Dec 2022
    в контейнере 1000:1000. Права на JAR аналогичные
  • https://t.me/clickhouse_ru
    @den_crane #302641 02:33 PM, 06 Dec 2022
    Я написал однострочник на джаве и попробовал без nifi
  • https://t.me/clickhouse_ru
    @GenRockeR #302643 02:34 PM, 06 Dec 2022
    без ssl? Я думаю тут затык в том, что обязательно нужен ssl сертификат и логин и пароль.

    Так как политика STRICT, то без ssl обрыв соединения идет.
  • https://t.me/clickhouse_ru
    @GenRockeR #302644 02:55 PM, 06 Dec 2022
    включил http для клика. Логин и пароль подходит, но теперь ошибка в другой части:
    DB::Exception: Cannot modify 'max_execution_time' setting in readonly mode. (READONLY) (version 22.5.1.2079 (official build)) , server ClickHouseNode
  • https://t.me/clickhouse_ru
    @GenRockeR #302645 03:20 PM, 06 Dec 2022
    Видимо баг все же. По http все работает нормально, а с https проблемы с пользователем и паролем
  • https://t.me/clickhouse_ru
    @Begunini #302646 03:28 PM, 06 Dec 2022
    Добрый вечер ! Вопрос такой: executable UDF, тип данных задан JSONCompact, poolsize скрипту поставил единицу, но CH все равно бьет на чанки запрос из базы данных и кусками по 16384 записи кидает на скрипт, вызывая его многократный запуск (что дает просадку по производительности), вместо отправки всего содержимого. Может знает кто, как заставить CH сразу весь объем данных кидать в UDF ? До смены формата на нативный/бинарный еще доберусь, понять бы тут логику. Или это ограничение stdin/out ?
  • https://t.me/clickhouse_ru
    Ну никак, КХ обрабатывает записи блоками.
  • https://t.me/clickhouse_ru
    Спасибо ! Значит в рамках текущих ограничений лавировать по оптимизации. Вопрос тогда другой - есть ли возможность прервать выполнение скрипта, если выполняется какое-то условие ? Аналог while/break
    К примеру, у меня 2 миллиона многомерных массивов, но совпадение может быть условно в первых ста. Чтобы не обрабатывать последующие.
  • https://t.me/clickhouse_ru
    каким образом? Скрипт должен для всех строк вернуть результат.
  • https://t.me/clickhouse_ru
    Ага, понял. В теории можно в рамках блока по 16384 записи в своей скрипте возвращать значение раньше, не выполняя вычисление для остальных. Условно при результате 1 для свех остальных отдать 0.
  • https://t.me/clickhouse_ru
    @den_crane #302651 03:35 PM, 06 Dec 2022
    >но совпадение может быть условно в первых ста.
    нет такого понятия первые сто.
  • https://t.me/clickhouse_ru
    Для скрипта же есть своя логика. К примеру, произвести вычисление и получить значение дробное. Если единица, то 100% совпадение, дальше считать не нужно и можно возвращать результат, заполнив для всех остальных дефолтным значением.
    Костыль, но все же.
  • https://t.me/clickhouse_ru
    Писать результат работы скрипта в отдельное место, а в скрипт передать query_id и попросить его сделать kill query по условию)
  • https://t.me/clickhouse_ru
    Вообще интересный подход, но в данном случае не подойдет - вызов идет из вложенного селекта, parent не поймет такого ) Спасибо !
  • https://t.me/clickhouse_ru
    @didenko #302656 04:31 PM, 06 Dec 2022
    ALTER TABLE tbl_replica_local ON CLUSTER sharding_2shard_2repl
    UPDATE val = dictGetString('temp_dict', 'enrichment_value', id) WHERE 1

    А почему этот запрос вызывает такую ошибку на половине нод? При этом результата от нее нет совсем.
    Code: 36. DB::Exception: ALTER UPDATE/ALTER DELETE statements must use only deterministic functions. Function 'dictGetString' is non-deterministic. (BAD_ARGUMENTS) (version 22.5.1.2079 (official build))

    Делал опираясь на https://kb.altinity.com/altinity-kb-schema-design/backfill_column/

    Что-то сообразить не могу...
  • https://t.me/clickhouse_ru
    In case of a replicated / sharded setup you need to have the dictionary and source table (dict_table / item_dict) on all nodes and they have to all have EXACTLY the same data. The easiest way to do this is to make dict_table replicated.

    In this case, you will need to set the setting allow_nondeterministic_mutations=1 on the user that runs the ALTER TABLE. See the ClickHouse docs for more information about this setting.

    Внизу приписка
  • https://t.me/clickhouse_ru
    Среди основ реляционных баз данных: порядок (хранения) строк значения не имеет
  • https://t.me/clickhouse_ru
    Это не про sql
  • https://t.me/clickhouse_ru
    слово deterministic ключевое,
    оно не на половине реплик такое должно давать, а на всех.... ну и словарь должен быть одинаков

    настройка есть, которая позволяет такое поведение сделать

    просто у тебя будет проблема для недетерминируемых мутаций, что на выходе получатся разные данные и непонятно как это реплицировать...
  • https://t.me/clickhouse_ru
    Так и мы речь не про реляционную базу данных ведем.
  • https://t.me/clickhouse_ru
    @didenko #302662 04:36 PM, 06 Dec 2022
    У меня под словарем Distributed таблица. Всё по логике должно быть deterministic.
    Т.е. мне просто явно сказать клику, что у меня всё детерминистик, делай уже?
  • https://t.me/clickhouse_ru
    > настройка есть, которая позволяет такое поведение сделать

    Она позволяет пропустить сейфти чек, а не сделать поведение. поведение ручками делать придется
  • https://t.me/clickhouse_ru
    @MakeReady #302664 04:36 PM, 06 Dec 2022
    А про какую? Иерархическую что ли?
  • https://t.me/clickhouse_ru
    Да,
  • https://t.me/clickhouse_ru
    @didenko #302666 04:38 PM, 06 Dec 2022
    блин. до последнего не верил в это.
    Спасибо! заработало как надо!
  • https://t.me/clickhouse_ru
    ну вообще не факт, если вдруг запрос из dictGet будет разное возвращать ... (небольшое расхождение в репликах на репликацию допустимо в distributed) то мутации на разных репликах разное будут делать и это плохо

    и вообще если, ты собираешься эти мутации фигачить регулярно, ты встаешь на скользкий путь "творю с кликом фигню, для которой он слабо предназначен" =)

    мутации для GDRP изначально делались, типа редкое удаление по запросу ...
  • https://t.me/clickhouse_ru
    Вот у меня дата-инженеры хотят такой сценарий:
    * раз в час например брать срез событий из клика, которые не обогощены еще
    * дистинктом выдергивать из них уникальные идентификаторы
    * по этим идентификатором из тругого медленного стораджа доставать данные
    * после этого напихивать в клик во временную табличку эти данные, делать поверх нее справочник
    * и в конце alter table local_table on cluster ... value = dictGet() where условие по дате за последний час.

    Я подозреваю, что это потенциальная проблема, как ты говоришь, но детально не осознаю этого, т.к. не понимаю достаточно глубоко механику работы клика в этой части. Кажется тут переписывать будет только одна партиция и больно будет только если событий в партиции будет реально много больше часового объема.

    Они начали это делать через joinGet, но он не работает с Distributed, ЕМНИП...
  • https://t.me/clickhouse_ru
    @didenko #302670 04:51 PM, 06 Dec 2022
    Я сделал такую схему, чтобы не огрести с евенчуальной целостностью при репликации:
    * завел кластер, которые без репликации
    * С ним сделал табличку temp_dict_table_local
    * сделал табличку на всех нодах temp_dict_table AS temp_dict_table_local ENGINE Ditributed
    * поверх temp_dict_table (distributed) делаю словарик

    CREATE DICTIONARY temp_dict ON CLUSTER sharding_4shard_1repl (
    join_key UInt64,
    enrichment_value String
    )
    PRIMARY KEY join_key
    SOURCE(CLICKHOUSE(TABLE temp_dict_table DB 'heap'))
    LAYOUT(DIRECT());
  • https://t.me/clickhouse_ru
    да это проблема, основная в том что миграции переписывают парты, полностью
    соответсnвенно у тебя повышенная нагрузка на диск
    плюс миграции конкурируют внутри за background_pool_size треды. максимум миграций одновременно 8 штук. можно тюнить но упираешься в итоге в диск...

    не очень понятно почему у вас данные не обогащенные попадают в клик... почему нельзя обогощать до того как в клик вставите?
    данные "медленном сторадже" появляются позже? насколько?

    может быть лучше как то отследить что данные есть
    и делать в клике вместо мутаций
    INSERT INTO enriched_table SELECT *, dictGet() FROM not_enriched_table ?
  • https://t.me/clickhouse_ru
    @didenko #302672 04:52 PM, 06 Dec 2022
    ну и из словарика уже делаю ALTER UPDATE
  • https://t.me/clickhouse_ru
    @didenko #302673 04:56 PM, 06 Dec 2022
    Я думаю мы решим вопрос с тем, чтобы обогащать до клика, но на данный момент хотят такое offline обогащение.
    Данных очень дофига, чтобы их держать в горячем сторадже на входе (до клика) и на лету обогащать ими. Но это решаемо.
  • https://t.me/clickhouse_ru
    @didenko #302674 04:58 PM, 06 Dec 2022
    Поинт про увеличение объема миграций понял. Это кажется неизбежно. т.к. при увеличении входящего объема в единицу времени неизбежно придется масштабировать оффлайн обогащение и мы просто упремся.
    Спасибо что натолкнул на конкретные потенциальные проблемы!
  • https://t.me/clickhouse_ru
    Если у вас таблица содержит в себе только id записей для обогащения, то несколько неожиданно, что вы решили её сделать distributed, а не replicated
    С replicated будет проще жить на любом узле имхо, пока вы делаете этот ворэраунд...
    Ну а вообще лучше обогатить данные до вставки
  • https://t.me/clickhouse_ru
    речь про таблицу, которая под словарь используется?
  • https://t.me/clickhouse_ru
    вы скажите своим дата инженерам что нужно усилием вывернуть свое сознание, и подходить к базе с осознанием что данные immutable.
  • @5724851801 #302680 05:03 PM, 06 Dec 2022
    ✅ Вы ищите сервис для флуда почт?
    Рады вам представить сервис с удобной веб панелью и отличным инбоксом! Пробиваем GMAIL на УРА!📤

    ❓ Зачем нужен флуд почт?
    Необходимо, чтобы кто-то пропустил очень важное письмо, которое должно прийти на email (будь это ваш конкурент, неприятель или вы просто решили подшутить над другом?)

    💴 Стоимость услуги:
    25рублей за 30 минут флуда (около 400 сообщений в инбокс)

    ❤️ Ссылка на сервис: FLOOD-STUDIO. COM (ПРОБЕЛ УБРАТЬ ПОСЛЕ ТОЧКИ)
    БЕСПЛАТНЫЙ ТЕСТ!

    🆗 Теги для продвижения:
    email flood, email spam, email spam bot, bomb email, email bomber, mail bomb, email flooder, email floods, flood email, email flooding, email flooder online, flood-studio email bomber, flood-studio, flood email spam, email bombing, flooding your inbox, flooding inbox, spam inbox, spam bombed, online email flooder, email flooder online, email flooded with spam, email bomber free online, email bomb services, mail bomb killer
  • https://t.me/clickhouse_ru
    Да, из которой словарь данные берет
  • https://t.me/clickhouse_ru
    Я еще не достаточно авторитетен в клике, чтобы так заявлять, хотя и понимаю это поверхностно, но теперь у меня есть повод ссылаться на этот тезис, т.к. он от экспертов.
  • https://t.me/clickhouse_ru
    > * по этим идентификатором из тругого медленного стораджа доставать данные

    Насколько медленное?
  • https://t.me/clickhouse_ru
    Это как-то ускорит (упростит) процесс? мне кажется нет.
    Но т.к. репликация асинхронная, то подход с репликацией может не везде и не все данные обновить
  • https://t.me/clickhouse_ru
    Hadoop
  • https://t.me/clickhouse_ru
    @banofbot
  • https://t.me/clickhouse_ru
    Мг

    Вообще подобный подход (или модифицированный) имеет место быть.
    Но как сказал denny желательно такое делать до кликхауса
  • https://t.me/clickhouse_ru
    Упростит, потенциально можно вообще словарём не пользоваться, а просто работать с таблицей
    И вовсе не делать delete, а обойтись только insert'ом, используя какой-нибудь replicatedcollapsingmergetree

    Будете писать значения в таблицу с флагом 0 до обогащения, после обогащения записывайте сюда тот же id с флагом -1 и периодически делайте optimize
  • https://t.me/clickhouse_ru
    @ivan_klass #302689 05:22 PM, 06 Dec 2022
    Всем привет!
    Подскажите, пожалуйста, про partition key - в документации противоречивая информация. С одной стороны, читаю и кажется что оно нам надо (низкая кардинальность партиций и во всех запросах будет явное условие по ней), с другой стороны явно написано - Don't partition your data by client identifiers or names. Что за client identifier тут? Имеется ли ввиду в документации конечный пользователь? Просто в нашем случае как раз напрашивается идея разделить данные по клиентам. Но клиент для нас - одна из немногих организаций, внутренние сотрудники которых пользуются нашим продуктом. Т.е. кардинальность таких партиций в самом лучшем случае на ближайшее время - десятки, в течении ближайших лет - сотни. И абсолютно подавляющее большинство запросов по аналитике будет в рамках одного конкретного клиента. Имеет ли в таком случае смысл партицирования по клиенту?
  • https://t.me/clickhouse_ru
    Я тоже за это. Но настаивют. Буду выворачивать сознание коллегам 🙂
  • https://t.me/clickhouse_ru
    С оптимайзом и движками типа replacing и подобными тоже есть нюансы.
    На самом деле таблица то у нас широкая. Это я просто на простых табличках эксперименты ставлю.
  • https://t.me/clickhouse_ru
    Широкая после обогащения или до?
  • https://t.me/clickhouse_ru
    До. Там обогащается может 1% полей только
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    если кратко используйте PARTITION BY
    только если для ваших запросов будет работать partition prunning

    то есть вставка всегда в одну или две партиции
    чтение всегда из 1-10 партиций
    всего партций на таблицу до пары сотен...

    партиция это логическое разбиение дата партов по группам, парты из разных партиций между собой не мержатся после вставки
  • https://t.me/clickhouse_ru
    спасибо большое!
  • https://t.me/clickhouse_ru
    >Просто в нашем случае как раз напрашивается идея разделить
    >данные по клиентам. Но клиент для нас - одна из немногих организаций,

    вот именно про это и написано. Десятки это слишком много.

    https://youtu.be/DP7l6Swkskw
    ClickHouse Meetup Amsterdam, June 8, 2022

    Slides: https://github.com/ClickHouse/clickhouse-presentations/tree/master/meetup59

  • https://t.me/clickhouse_ru
    Спасибо большое! Смутили немного примеры с партицированием по месяцам, там ведь несколько лет и уже тоже десятки ) Думаю тогда для нашего случая понятно, что не нужно партицированием усложнять, просто первой колонкой в order by клиента сделаем. Спасибо всем ещё раз
  • https://t.me/clickhouse_ru
    в кликстриме в любой день месяца там только одна партиция заливается, ну или две, но очень недолго
  • https://t.me/clickhouse_ru
    @ivan_klass #302700 06:07 PM, 06 Dec 2022
    К сожалению, не знаю, что такое кликстрим 🤷‍♂
  • https://t.me/clickhouse_ru
  • 07 December 2022 (200 messages)
  • Дмитрий, словарь шардировал, но непонятно как его весь подтягивать к фактовой, а не с 1 шарда.
  • https://t.me/clickhouse_ru
    Что-то задумался с утра, а как Clickhouse работает в этом кейсе:

    ALTER TABLE tbl_replica_local ON CLUSTER sharding_2shard_2repl
    UPDATE val = dictGetString('temp_dict', 'enrichment_value', id) WHERE 1

    Query id: b52cc0c1-49f1-4532-9804-bdb5d15ececa

    ┌─host─┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
    │ s22 │ 9000 │ 0 │ │ 3 │ 0 │
    │ s12 │ 9000 │ 0 │ │ 2 │ 0 │
    │ s21 │ 9000 │ 0 │ │ 1 │ 0 │
    │ s11 │ 9000 │ 0 │ │ 0 │ 0 │
    └──────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘

    Тут s11+s12 - это две реплики одного шарда, s21+s22 - две реплики другого шарда.
    Я делаю ALTER UPDATE. Судя по статусу команда успешно отрабатывает на всех нодах.
    При этом если одни и те же изменения производятся на двух репликах одного шарда, то в последующем в логах я должен увидеть запись про дублирующие изменения?
    Или клик производит изменения только в одной реплике, а от остальных просто получает безошибочный ответ?
  • https://t.me/clickhouse_ru
    поставит запрос в ZK в distributed_ddl_queue
    и выполнит на каждой реплике
    ALTER TABLE tbl_replica_local UPDATE ... WHERE 1

    ВСЕ ПАРТЫ на всех репликах будут переписаны, для каждой строки вызовется dictGetString во время переписывания...
    если в temp_dict будут разные значения на разных репликах для id или не будет для каких то id вообще
    получишь разные val на разных репликах и будет куча replication part fetches если таблица tbl_relica_local имеет engine ReplicatedMergeTree

    в общем если данных дохрена =) кластер не лажет
    но сама миграция будет копошиться в фоне ДОЛГО (8 тредов одновременно на каждой ноде под миграции)
  • https://t.me/clickhouse_ru
    @didenko #302714 06:44 AM, 07 Dec 2022
    > будет куча replication part fetches если таблица tbl_relica_local имеет engine ReplicatedMergeTree

    да, именно такой Engine. Правильно ли я понял, что в этом случае клик сделает так:
    1. на всех 4ех нодах применит эту мутацию
    2. по мере отработки мутации обе реплики будут перекрестно стягивать друг у друга изменения и тем самым переписывать только что изменившиеся данные, если они уже успели измениться на этой ноде.

    Я исхожу из того, что dict у меня на всех нодах одинаковый, т.к. он построен на базе Distributed таблицы без репликации, в которой 4 шарда на 4ех нодах и данные записаны только на одной ноде, к которой подключился ETL процесс. Т.е. в этом плане мутации ожидаю одинаковые на всех нодах.

    Про where 1 это у меня тесты. Разумеется на реальных данных там будет ограниченая выборка.
  • https://t.me/clickhouse_ru
    @kiri3L #302715 06:59 AM, 07 Dec 2022
    Коллеги, хочу для нагрузочного тестирования отключить кэширование данных, чтобы гонять один и тот же запрос много раз
    правильно я понимаю, что нужно установить параметр
    mark_cache_size в 0 и все? (в запросе используется только mergeTree таблицы)
  • https://t.me/clickhouse_ru
    @ilejn #302716 07:00 AM, 07 Dec 2022
    Интересно про UPDATE и реплики, спасибо за поднятие темы.
    Поведение дикое, но как его улучшить - так сразу и не скажешь.
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #302715 #302717 07:03 AM, 07 Dec 2022
    Не правильно.
    Во-первых, данные будут в кэше ОС.
    Во-вторых, отсутствие кэша засечек - ситуация не совсем нормальная.

    Полученный результат тестирования будет максимально бесполезен.
  • https://t.me/clickhouse_ru
    @kiri3L ↶ Reply to #302717 #302718 07:21 AM, 07 Dec 2022
    спасибо!

    А как бы вы поступили в данной ситуации. У меня для теста есть пока только одни запрос, а в будущем будет несколько десятков запросов
  • https://t.me/clickhouse_ru
    можно clickhouse-benchmark использовать
  • https://t.me/clickhouse_ru
    @yatoba ↶ Reply to #302715 #302720 07:32 AM, 07 Dec 2022
    А что именно хотите протестировать? Логически
  • https://t.me/clickhouse_ru
    @kiri3L ↶ Reply to #302720 #302721 07:34 AM, 07 Dec 2022
    как этот самый запрос будет работать, когда другие, на данный момент неизвестные запросы, будут нагружать кластер.
  • https://t.me/clickhouse_ru
    @yatoba ↶ Reply to #302721 #302722 07:36 AM, 07 Dec 2022
    Что в вашем понимании значит "как запрос будет работать"? Что вы хотите увидеть, что сравнивать
  • https://t.me/clickhouse_ru
    @abstractbreazy #302723 07:36 AM, 07 Dec 2022
    Доброго времени суток,
    Подскажите, пожалуйста, какие есть способы для переноса данных из одной таблицы в другую?
    насколько мне известно select-insert не применим для больших таблицы и одним запросом это сделать не выйдет.
    Имеется Distributed таблица и локальная, данные распределены на трех шардах.

    Цель в том, чтобы добавить к новой таблице новые колонки и забить их нужными данными.
    Подозреваю, что такой пайплайн не особо жизнеспособен: создать новую таблицу => перенести данные со старой => добавить нужные колонки => заполнить колонки
  • https://t.me/clickhouse_ru
    @Krisantis #302724 07:36 AM, 07 Dec 2022
    подскажите, агрегатная функция any может выдать в качестве результата null?
    при наличии в группе nul и not null значений?
  • https://t.me/clickhouse_ru
    Отдельно стоит выделить, что ключ шардирования, primary key - не меняются, это такая же таблица, в которой меняются лишь часть колонок.
  • https://t.me/clickhouse_ru
    Наверное бы хотели, что бы кликхаус всегда читал данные с диска без кэша, то вот этот параметр это делает как я помню. То есть по идее ставите 1 и всегда Clickhouse будет читать с диска https://clickhouse.com/docs/en/operations/settings/settings/#settings-min-bytes-to-use-direct-io
    Settings | ClickHouse Docs

    allownondeterministicmutations

  • https://t.me/clickhouse_ru
    @kiri3L ↶ Reply to #302726 #302727 07:49 AM, 07 Dec 2022
    спасибо, вы правы, это то что мне нужно!
  • https://t.me/clickhouse_ru
    @yatoba ↶ Reply to #302727 #302728 07:54 AM, 07 Dec 2022
    А почему вы считаете что это то что вам нужно? У вас никогда не будет горячих данных в кэше?
  • https://t.me/clickhouse_ru
    я думаю в бенчмарках, главное получить воспроизводимость результатов. Это хоть не полностью, но может помочь.
    Иначе 1 запрос будет долгий .... У меня лично если включить настройку запрос работает 17 секуд, если выключить 1.4 секунды ...
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #302721 #302730 07:59 AM, 07 Dec 2022
    Тогда помимо вашего запроса нужно сделать запрос, достающий кучу данных, вымывающих кэш.
    И замешивать их друг с другом.
    Кажется, что так будет наиболее реалистично.
  • https://t.me/clickhouse_ru
    @kiri3L ↶ Reply to #302728 #302731 08:04 AM, 07 Dec 2022
    будут.
    Но, если при тестировании система будет работать медленнее, чем на проде, это же не так страшно
  • @Gr00d #302733 08:25 AM, 07 Dec 2022
    Добрый день, столкнулись с проблемой при использовании executable словарей. Используем executable словарь с командой jq, для теста ошибок удалили ей и ожидали получить ошибку загрузки словаря в логах либо в таблице system.dictionaries, но в логах пусто, а статус словаря LOADED без ошибок. Нормальное ли это поведение? и как в таком случае ловить ошибки, что словарь перестал работать из за удаления какого либо пакета на сервере?
  • https://t.me/clickhouse_ru
    @zagirnur #302734 08:29 AM, 07 Dec 2022
    Добрый день! У меня вопрос:
    - Как выполняется мутация?
    Слашал версию что данные на самом деле не меняются, а рядом просто записываются все изменения, это верно?
    Если так, то насколько замедляется выборка из таблицы над которой выполнялась мутация?
  • https://t.me/clickhouse_ru
    Ну по идее у вас запрос dictGet к словарю не выполнится
  • @Gr00d ↶ Reply to #302735 #302736 08:30 AM, 07 Dec 2022
    выполняется и пробует как раз загрузить словарь
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302734 #302737 08:33 AM, 07 Dec 2022
    Не верно. Измененные данные записываются заново, и в таблице лежит полный комплект данных, без всяких incrementals. Поэтому на скорость после не влияет. Но в процессе увеличивает нагрузку на диск.
  • https://t.me/clickhouse_ru
    Спасибо большое)
  • @QueueTime #302739 08:52 AM, 07 Dec 2022
    Всем привет. Может кто-нибудь знает, можно ли как-то встроенными средствами в клике партицию из одного шарда с "горячими" данными в другой с "холодными" перекидывать раз в месяц?
  • https://t.me/clickhouse_ru
    @critskiy #302740 08:55 AM, 07 Dec 2022
    Привет, есть вопрос. На ClickHouse версии 20.5.4.40 ради интереса выполняю конструкцию on cluster (кластер состоит из двух машин) для реплицированных таблиц:

    create table if not exists test_db.test_replica ON CLUSTER 'test_shard'
    (
    test_string String default ''
    ) engine = ReplicatedMergeTree('/clickhouse/tables/test_shard/{database}/{table}','{replica}')
    order by test_string
    settings index_granularity = 8192;

    И получаю в ответ такое вот:

    ┌─host──────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
    │ localhost │ 9000 │ 0 │ │ 1 │ 0 │
    └───────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘

    И зависает при 49%. Окей, отменяю. При этом таблица создалась на двух машинах кластера, и со вставкой тестовой проблем нет. Насколько успела поресерчить тут, num_hosts_remaining - это сколько не выполнили задание нод (или машин). Но таблица создалась на двух машинах кластера. Это поведение норм или не норм, какие подводные камни имеются?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    Допустим, тогда стоит ли игнорировать в логах сообщение уровня Warning с текстом DDLWorker: ZooKeeper NONODE error during startup, зная при этом, что таблицы создались, и единственно верное решение - это обновление КХ?
  • https://t.me/clickhouse_ru
    DDLWorker: ZooKeeper NONODE error during startup

    Это при старте кх?
  • https://t.me/clickhouse_ru
    @yatoba ↶ Reply to #302731 #302745 09:11 AM, 07 Dec 2022
    я про то что с чего вы взяли что вы правильно имитируете окружение системы? вероятно что на проде будет работать еще медленнее)
  • https://t.me/clickhouse_ru
    нет, при создании таблицы, при этом в system.zookeeper по query одна из веток в статусе waiting, другая finished, но на двух машинах кластера опять же, есть таблица.
  • https://t.me/clickhouse_ru
    Хм, ну есть issue на эту тему, и версия около вашей. (и она действительно довольно старая)

    https://github.com/ClickHouse/ClickHouse/pull/9927#ref-commit-89037df
    Fix a race between DDLWorker and DDLWorkerClnr during startup by garneja · Pull Request #9927 · ClickHouse/ClickHouse

    … that causes DDLWorker to exit because of ZooKeeper NONODE error. I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): Bug Fix...

  • https://t.me/clickhouse_ru
    Пасибо
  • https://t.me/clickhouse_ru
    ALTER TABLE xx FETCH PARTITION
  • https://t.me/clickhouse_ru
    @kiri3L ↶ Reply to #302745 #302750 09:17 AM, 07 Dec 2022
    я исхожу из того, что это будет худший случай, когда все запросы не будут совпадать по данным

    дальнейшие тесты буду делать при разработке. Сейчас задача прикинуть конфигурацию кластра имея 1 запрос и зная кол-во пользователей, которые могут одновременно запускать запросы
  • Это да, я думал может кроме этой команды можно где-то в конфигах задать и забыть.
  • https://t.me/clickhouse_ru
    Нет, такого нет
  • https://t.me/clickhouse_ru
    @rostish #302753 09:50 AM, 07 Dec 2022
    Привет всем.
    Такой вопрос.
    Предположим, у меня 20 пользователей параллельно что-то считают на ноде клика.
    Я вижу на графике, что CPU под 80%.
    Могу ли я сделать какую-то метрику, которая покажет какой вклад дает каждый пользователь? Чтобы на графике красиво строилась кривая для каждого?
  • https://t.me/clickhouse_ru
    @fenogentov #302754 09:54 AM, 07 Dec 2022
    у меня гошный код выдает ошибку
    "code: 170, message: Requested cluster 'xxx-qa' not found"
    Кластер создается в конфиге на сервере?
    Или при создании таблиц/баз это надо было указывать?
  • https://t.me/clickhouse_ru
    @zak1996lesn #302755 10:05 AM, 07 Dec 2022
    Всем привет! Пытаюсь использовать
    ReplicatedSummingMergeTree
    .
    1.) Вставляю полные дубликаты (по всем полям) в
    SummingMergeTree
    он их складывает, всё ок.
    2.) Вставляю полные дубликаты в
    ReplicatedSummingMergeTree
    он вставляет 1 раз, а всё остальное игнорирует (не выполняет операцию insert into).

    Никто с таким не сталкивался? Это ожидаемое поведение или я что - то делаю не так?

    create table if not exists db.table on cluster cluster
    (
    `Period` DateTime('UTC'),
    `Column1` UUID,
    `Column2` UUID,
    `Value1` Nullable(Decimal(15, 2)),
    `Value2` Nullable(Decimal(15, 3)),
    `Value3` Nullable(Decimal(15, 2)),
    `Value4` Nullable(Decimal(15, 2))
    )
    engine = ReplicatedSummingMergeTree
    partition by toYYYYMM(`Period`)
    order by (`Period`, `Column1`, `Column2`)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302755 #302756 10:11 AM, 07 Dec 2022
    а не надо вставлять полные дубликаты. КХ проверяет контрольные суммы блоков и выкидывает дубликаты. Меняйте количество строк. По умолчанию для non-replicated это выключено, а для replicated - включено. Называется insert deduplication - ищите в документации и на kb.altinity.com
  • https://t.me/clickhouse_ru
    Понял, спасибо за равернутый ответ.
  • https://t.me/clickhouse_ru
    @hiko098L #302759 10:24 AM, 07 Dec 2022
    друзья есть маленький вопрос. В кликхаусе если мне нужны id и связь мени ту мени. мне лучьше использовать uuid или создавать id и как то вручную инкрементировать ?
  • https://t.me/clickhouse_ru
    прочитайте про snowflake id в гугле
  • https://t.me/clickhouse_ru
    ок спасибо
  • https://t.me/clickhouse_ru
    @hiko098L #302762 10:36 AM, 07 Dec 2022
    хмм, получается uuid правильнее но больше места занимает.
  • https://t.me/clickhouse_ru
    @ivolake #302764 10:50 AM, 07 Dec 2022
    Привет всем
    подскажите пожалуйста, как установить allow_experimental_object_type = 1
  • set allow_experimental_object_type = 1;
  • https://t.me/clickhouse_ru
    @ivolake #302767 10:54 AM, 07 Dec 2022
    что-то не работает
  • у вас запросы в рамках разных сессий проходят
    попробуйте через консольный клиент
  • https://t.me/clickhouse_ru
    @ivolake #302769 10:55 AM, 07 Dec 2022
    это он и есть
  • https://t.me/clickhouse_ru
    @ivolake #302770 10:56 AM, 07 Dec 2022
    перезагрузился
    запрос завис на running
  • https://t.me/clickhouse_ru
    @ivolake #302771 10:57 AM, 07 Dec 2022
    или вы имеете в виду клиент cli?
  • @mminaev #302772 10:57 AM, 07 Dec 2022
    тогда можно попробовать describe table bla settings allow_experimental_object_type = 1;
  • https://t.me/clickhouse_ru
    clickhouse-client в интерактивном режиме
  • https://t.me/clickhouse_ru
    я все правильно написал?..
  • @mminaev #302775 10:59 AM, 07 Dec 2022
    без set
  • @mminaev #302776 10:59 AM, 07 Dec 2022
    либо же можно поменять настройки поключения
  • @mminaev #302777 10:59 AM, 07 Dec 2022
    Settings Overview | ClickHouse Docs

    There are multiple ways to make all the settings described in this section of documentation.

  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    мб в вашем клиенте в настройках подключения можно установить session_id
  • https://t.me/clickhouse_ru
    это вэб-сайт облака
  • https://t.me/clickhouse_ru
    почитаю, спасибо
  • https://t.me/clickhouse_ru
    Консольный это clickhouse-client , а не сайте яндекса :)
  • https://t.me/clickhouse_ru
    да вот уже понял)
  • https://t.me/clickhouse_ru
    а curl'ом можете дергать?
  • https://t.me/clickhouse_ru
    @ivolake #302785 11:02 AM, 07 Dec 2022
    конечно
  • https://t.me/clickhouse_ru
    @ivolake #302786 11:02 AM, 07 Dec 2022
    имеется вообще настроенный скрипт на питоне для общения с кх
  • https://t.me/clickhouse_ru
    Дак оно ещё в конце добавила формат .... Короче clickhouse-client, datagrip вам помогут
  • @denya133 #302788 11:04 AM, 07 Dec 2022
    всем привет. 👏
    нужна помощь (совет).
    вот такая ошибка
    Too many parts (10092)
    Да. искал ответы в чате, но мне не подходят эти ответы.
    партиционирование классическое по PARTITION BY toYYYYMM(parseTime)
    запрос на вставку вот такой примерно
    Insert into table select ...много кода...
    пачка формируется отностительно большой (колок 100к строчек +-)
    воркеров которые это делают много 160 - следовательно 160 одновременных запросов.
    в секунду завершается от 1 до 5 запросов (следовательно 1-5 паралельных вставок).
    Нет буферную таблицу не использую, вставки идут в основную. когда-то делал через буферную, но это работает очень плохо и не стабильно.
  • @denya133 #302789 11:05 AM, 07 Dec 2022
    и удивляет то, откуда такое количество партов (10000+)
    при том что интервал 30 дней - т.е. должно вставиться максимум в 2 партиции (ноябрь, декабырь)
  • https://t.me/clickhouse_ru
    Дак вам нужно вставлять в одну партицию, а не в сотни
  • https://t.me/clickhouse_ru
    @konnectrl #302791 11:06 AM, 07 Dec 2022
    А у вас вообще мержи работают ?
  • https://t.me/clickhouse_ru
  • @serlex777 #302793 11:08 AM, 07 Dec 2022
    Добрый день! Подскажите, не появился ли в кликхаусе эффективный способ подсчета сессий по событиям (есть id пользователя и время). Соответственно начало конец сессии это какое-то константное время между смежными событиями. Понятно, что можно использовать стриминг и формировать id сессий перед записью в КХ. Но может есть какой-то способ использовать агрегируемые таблицы или функционал rockdb, чтобы делать это в запросе КХ и не пожирать слишком память.
  • https://t.me/clickhouse_ru
    спасибо
  • на некоторых репликах да (много мержей), на некоторых мало, есть парочка в которых в текущй момент мержей не идет.
  • @denya133 #302796 11:12 AM, 07 Dec 2022
    настройки стоят, чтобы конкурентрых мержей не было на этой таблице на разных репликах.
  • https://t.me/clickhouse_ru
    Из разряда бреда: Может зукипер тормозит ?
  • @denya133 #302798 11:13 AM, 07 Dec 2022
    думаю он не особо напрягается. (там кликхаус кипер на 3х нодах в кластере) нагрузка визуально на уровне плинтуса...
  • https://t.me/clickhouse_ru
    Да, есть ... "Пожирать слишком памяти" звучиит странно, но да массивы будут хотеть памяти чтобы вычислить сессию
  • 3 ноды кипера по 4 ядра, на каждой нагрузка колеблется от 10 до 30%
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #302714 #302801 11:20 AM, 07 Dec 2022
    Думаю, что правильный админ должен сконфигурировать полу-кластер (или 1/3-кластер), в котором будет по одному хосту из каждой шарды (из каждого набора реплик) и выполнить ALTER ... UPDATE над таким кластером.
    Update. Денис рассказал (см. ниже), что ClickHouse справляется с этим сам.
  • https://t.me/clickhouse_ru
    @yelrik #302803 12:10 PM, 07 Dec 2022
    коллеги, подскажите ARRAY JOIN можно использовать вместе с обычными джоинами или нужно сначала распаковать массивы во временную таблицу, например, и уже потом навешивать обычные джоины на распакованные строки?
  • https://t.me/clickhouse_ru
    @kleinenberg #302804 12:24 PM, 07 Dec 2022
    Привет всем.
    Подскажите. я создал роль , через SQL( CREATE ROLE) . Могу ли я теперь эту роль назначить на пользователя в user.xml ? не нашел директивы. или так не выйдет?
  • кажется у меня возникала в этой ситуации ошибка на уровне выполнения запроса "одновременно с ARRAY JOIN не допускаются дополнительные джойны"
    но если есть несколько массивов, их можно перечислить через запятую в одном ARRAY JOIN
  • https://t.me/clickhouse_ru
    это точно правильный ответ? Как это решение сохраняет отказоустойчивость в случае выхода из строя какой-то реплики какого-то шарда?
  • https://t.me/clickhouse_ru
    @Luckmarat #302807 12:45 PM, 07 Dec 2022
    Добрый день! При использовании leadInFrame в случае когда следующей строки нет, выдается java.lang.NullPointerException. В других бд обычно выдается NULL. Это высвечивается как предупреждение, это предупреждение как то надо/можно обрабатывать?
    Заранее спасибо помощь!
  • https://t.me/clickhouse_ru
    Дак вам на github в jdbc драйвер
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #302806 #302809 12:57 PM, 07 Dec 2022
    Думаю, что да.
    Пользователи, которым не критичен результат UPDATE, ничего не заметят.
    Если одна из реплик упадет во время UPDATE, а потом поднимется, то в моем варианте будет сильно лучше.
  • https://t.me/clickhouse_ru
    При on cluster только одна из реплик в каждом каждом шарде получит alter. Положит в зк в tasks. Все реплики начнут выполнять эту мутацию, если в конце контр.сумма итогово парта совпадет то все закончится, если не совпадет то реплики которые закончили позже первой попытаются снова мутировать исходный парт, после 3 попыток они скачают с реплки которая закончила первой и создала контр.сумму первой.
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #302810 #302811 01:02 PM, 07 Dec 2022
    О как ... круто, спасибо.
  • https://t.me/clickhouse_ru
    По умолчанию нет. Все агрегатные функции пропускают null. Но может если значений не null в колонке нет.
    если использовать any (tuple(column)) то Tuple скроет наличие null
  • https://t.me/clickhouse_ru
    Только вручную по system.query_log
  • https://t.me/clickhouse_ru
    Спасибо за детальное объяснение!
  • https://t.me/clickhouse_ru
    Кх это mpp база. Весь исходный датасет режется на части и каждая часть обрабатывается отдельно, результаты сливаются и финализируются. Поэтому тяжело сделать так как вы хотите.
    Хотя у window funtions делали какую-то оптимизацию чтобы использовать индекс таблицы для рассчета окна.
  • Спасибо
  • https://t.me/clickhouse_ru
    @kleinenberg #302818 01:42 PM, 07 Dec 2022
    Ребят. День как с кликхаусом познакомился)
    Более общий вопрос, не понял из документации.
    Вариант с управлением через файлы конфигурации(config/users) полноценный?
    можно ли через файлы создавать базы, таблицы, вешать роли,гранты на пользователей?

    В основном хочется понять можно ли через файлы полноценно управлять пользователями и их привилегиями и автоматизировать это, через тот же ансибл.
  • Можно. Если нужен join по самому массиву - попробуйте join (select arrayJoin(..) v) on ...
  • https://t.me/clickhouse_ru
    Нет
  • https://t.me/clickhouse_ru
    Создание пользователей через файлы это легаси. Там неполноценные grant-ы.
    Нельзя в общем. Все делайте через sql
  • https://t.me/clickhouse_ru
    Нельзя
  • https://t.me/clickhouse_ru
    Это в каком jdbc драйвере так? Jdbc драйвер не знает какой sql выполняли, ему пофиг.
  • https://t.me/clickhouse_ru
    Кипер на техже нодах с кх?
  • нет. на других впсках в той же сети
  • https://t.me/clickhouse_ru
    В system.part_log можно увидеть сколько партов создается (type=New) Посмотрите как запрос плодит парты.
  • https://t.me/clickhouse_ru
    Спасибо. Если поднять вопрос автоматизации конфигурации. Модуля КХ для ансибла нет. У КХ есть mysql интерфейс, предполагаю что можно использовать модуль mysql ансибла для управления или может есть другие варианты управления конфигурацией KX?
  • спасибо. гляну. в данный момент не могу, потому что воркеры которые обрабатывали это - уже не работаеют (зкаончили джобы)
  • https://t.me/clickhouse_ru
    ClickHouse JDBC Driver clickhouse-jdbc 0.3.2 (revision: 1795272)
  • https://t.me/clickhouse_ru
    Хм.. Выглядит как надёжный план угробить кластер.
  • https://t.me/clickhouse_ru
    Да пока кластер то не кластер) а какой основной подход, подключаться и выполнять необходимые SQL?
    Пока пытаюсь понять возможно ли автоматизировать и стоит ли.
  • https://t.me/clickhouse_ru
    На самом деле, всё не так плохо. Сырой SQL можно через любой интерфейс выполнять.
    Но конфигурирование сервера — это же не только SQL. Там куча кликоспецифичных настроек, явно мускульные не подойдут. Как и готовые запросы, и настройки запросов (если они генерируются).
  • https://t.me/clickhouse_ru
    Да возможно можно. Там неполная реализация протокола MySQL. Но консольный mysql клиент работает
  • https://t.me/clickhouse_ru
    @konnectrl #302834 02:35 PM, 07 Dec 2022
    Вроде почти у всех управляющих команд есть on cluster
  • https://t.me/clickhouse_ru
    @mustdie_green #302835 03:00 PM, 07 Dec 2022
    Подскажите, пожалуйста, а в кликхаузе есть способы работать с json-списками такого формата?
    [{"key":"firebase_screen_id","value":{"string_value":null,"int_value":-2431518002154509284,"float_value":null,"double_value":null}},{"key":"virtual_currency_name","value":{"string_value":"resources/soft","int_value":null,"float_value":null,"double_value":null}}]
    Сценарий — я тяну данные из BigQuery, там это называется nesting, выглядит это вот так (на скрине). В BQ это решается что к нестингу делается подзапрос как мини-таблице в ячейке, в кликхаузе хочется либо так же, либо хоть как-нибудь иметь возможность вытащить, например int_value для firebase_screen_id, чтобы это стало отдельным столбцом (на втором скрине).
    То есть мне нужно «найти в списке жсонов тот, где key == firebase_screen_id, достать из него value.int_value и положить это в отдельный столбец»

    Если знаете, чем можно тянуть данные из BigQuery в Clickhouse так, чтобы облегчить эту работу с жсонами или вообще сделать все красиво, тоже буду супер рад советам
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302835 #302837 03:05 PM, 07 Dec 2022
    хороший правильный json. В КХ есть новый тип данных для этого. https://clickhouse.com/docs/en/guides/developer/working-with-json/json-semi-structured/
  • @aabezverkhikh #302838 03:23 PM, 07 Dec 2022
    Привет! Кто-нибудь знает способ получить зависимости для view - все таблицы, которые в нём используются.
  • Но есть один нюанс. Приведенный JSON - это массив объектов, а КХ не умеет работать с таким, так как он ожидает для каждой записи отдельную строку с объектом JSON.
  • https://t.me/clickhouse_ru
    select dependencies_database, dependencies_table from system.tables where database = ... and name = ....
  • Для view у меня так
  • 21.11.11.1 Возможно надо обновиться?
  • https://t.me/clickhouse_ru
    Да, вот я как раз хотел написать, что у меня не жсон с жсонами, а массив с жсонами, что все сильно усложняет
    Получается, в КХ с этим ничего не сделать?
    А можете посоветовать что-нибудь тогда в моей ситуации? Может, можно как-то тянуть и преобразовывать данные, чтобы КХ с ними норм работал? Или лучше уже выбрать другую бд?..
  • https://t.me/clickhouse_ru
    а на треугольничек нажать? не ?

    │ dependencies_database │ Array(String)
    │ dependencies_table │ Array(String)
  • https://t.me/clickhouse_ru
    если есть возможность выбрать другую бд, берите другую. КХ слишком сложен.
  • Неужели у вас показывает? Нужно именно для VIEW
  • https://t.me/clickhouse_ru
    у меня тоже у 99% записей эти поля пустые
  • https://t.me/clickhouse_ru
    А можешь кратко +- алгоритм рассказать?
    Я так понимаю через данные профилирования можно. Там довольно развернутая информация. Каких свойств будет достаточно?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302839 #302849 03:40 PM, 07 Dec 2022
    угу. В том числе потому и experimental. Придется добавить старых добрых JSONExtract - https://fiddle.clickhouse.com/ff844f98-f7d6-4ecb-b802-92b358d7fd35
  • https://t.me/clickhouse_ru
    ну я не проверял, это странно, эти поля именно для этого
  • https://t.me/clickhouse_ru
    а где не пустые?
  • https://t.me/clickhouse_ru
    sum(`ProfileEvents.Values`[indexOf(`ProfileEvents.Names`, 'UserTimeMicroseconds')]) AS userCPU

    https://kb.altinity.com/altinity-kb-setup-and-maintenance/who-ate-my-cpu/
    Who ate my CPU

    Queries to find which subsytem of Clickhouse is using the most of CPU.

  • https://t.me/clickhouse_ru
    штучные таблицы с движками Distributed, ReplicatedReplacingMergeTree и Kafka
  • https://t.me/clickhouse_ru
    Супер. Спасибо
  • Да и для view они не заполнены. Я и спрашивал про какой-нибудь более изощрённый метод получения этого списка)
  • @457900023 #302859 04:04 PM, 07 Dec 2022
    Добрый вечер. Может кто сталкивался уже с таким, объясните, пожалуйста, в чем может быть дело. Периодически теряем данные при записи в кликхаус. Проверил system.query_log и обнаружил, что а определенные моменты времени количество инсерт запросов с QueryStart больше чем с QueryFinish. На клиенте никаких ошибок не появляется, только количество записанных строк равно 0. Пишем в распределенную таблицу с insert_distributed_sync=1
  • https://t.me/clickhouse_ru
    Последний на сегодня вопрос.
    У меня все юзеры ходят в бд на уровне сервиса под одной учеткой productNameUser. Я могу при запросе в клик как-то формировать id запроса, получать его при выполнении селекта, а потом по нему находить в system.query_log информацию, а на стороне метрик сервиса уже разбираться какой это был пользователь. Мапить пользователя на его query_id.
    Не хочется внутри сервиса для каждого пользователя свою учетку держать.
  • https://t.me/clickhouse_ru
    не знаю, возможно какой-то из explain умеет показывать
  • https://t.me/clickhouse_ru
    грепайте лог КХ по query_id
  • https://t.me/clickhouse_ru
    можно задавать либо query_id
    можно через log_comment
    для http можно задавать в user_agent

    в log_comment можно что угодно написать
    `select * from numbers(10) settings log_comment='{"user":"x"}';
    select type from system.query_log where log_comment='{"user":"x"}';
    ┌─type────────┐
    │ QueryStart │
    │ QueryFinish │
    └─────────────┘`
  • https://t.me/clickhouse_ru
    @MakeReady #302864 04:13 PM, 07 Dec 2022
    Может кто сталкивался
    Запрос работает 1-2с
    Он же выполняемые в ДатаЛенс 15-20, повторное выполнение в нем же 1.5-3, но стоит поменять дату в условии отбора, снова 15-20
    При аналогичных манипуляциях через родного клиента неизменно 1-2с
  • https://t.me/clickhouse_ru
    даталенс смотрит напрямую в КХ? перед КХ не стоит chproxy?
  • https://t.me/clickhouse_ru
    @MakeReady #302866 04:19 PM, 07 Dec 2022
    Напрямую
  • https://t.me/clickhouse_ru
    @MakeReady #302867 04:19 PM, 07 Dec 2022
    Но в запросе есть и left join и join array
  • https://t.me/clickhouse_ru
    @MakeReady #302868 04:19 PM, 07 Dec 2022
    Но нуллов нет
  • https://t.me/clickhouse_ru
    @Sablast #302869 04:20 PM, 07 Dec 2022
    скорее всего даталенс кэширует результат запроса по контрольной сумме от самого запроса, и время уходит именно на то чтобы положить результат в кэш
  • https://t.me/clickhouse_ru
    @MakeReady #302870 04:24 PM, 07 Dec 2022
    Да даже если это просто всего 20 значений результата
  • https://t.me/clickhouse_ru
    @nyoroon #302871 04:24 PM, 07 Dec 2022
    добрый вечер! а можно как-то сгенерить сетку datetime? подждойнить с arrayJoin(range(...))?
  • https://t.me/clickhouse_ru
    Понял, спасибо за совет
  • https://t.me/clickhouse_ru
    select arrayJoin(arrayMap(x->now()+x,range(30)))
  • https://t.me/clickhouse_ru
    я про сгенерить сетку и сгруппировать по ней
  • https://t.me/clickhouse_ru
    пока не понятно)
  • https://t.me/clickhouse_ru
    @nyoroon #302877 04:27 PM, 07 Dec 2022
    есть у меня дыры в данных. если я сделаю просто group by toStartOfXXX(timestamp), то будут пропуски. хочу что бы там 0 было
  • @sula_lfc #302878 04:28 PM, 07 Dec 2022
    Всем привет, такой вопрос глупый, какие мощности(характеристики) потребуются для бд на кликхаусе, с постоянным коннектом 60 человек и с не самыми оптимальными запросами от них? Данные примерно на 5-10 тб, возможно увелечение через пол года еще на 10-20
  • https://t.me/clickhouse_ru
    ORDER BY time with fill step 1
  • https://t.me/clickhouse_ru
    посмотрю, спасибо
  • https://t.me/clickhouse_ru
    https://kb.altinity.com/altinity-kb-setup-and-maintenance/cluster-production-configuration-guide/hardware-requirements/

    если есть возможность, то чем больше ОЗУ тем лучше
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302860 #302882 04:54 PM, 07 Dec 2022
    сделайте комментарий перед запросом -- or /* */ и пишите туда все что захотите. Оно попадет в query_log
  • https://t.me/clickhouse_ru
  • Большой рахмет
  • https://t.me/clickhouse_ru
    спасибо! всем кто ответил)
  • https://t.me/clickhouse_ru
    Вы можете поступить проще и добавлять в query логин пользователя из системы через комментарий
  • https://t.me/clickhouse_ru
    Вы платите бабки ... Пишите тем кому вы платите :) Никто не знает как там всё устроено :(
  • https://t.me/clickhouse_ru
    :) туда написал, это понятно
    Но мало ли может кто сталкивался и знает куда копать
  • @dj_mixer #302891 06:13 PM, 07 Dec 2022
    @den_crane а можете поделится скриптом которые насоздавали для КХ клауд для того чтобы он очень долго стартовал. А то одни товарищи не верят что будет плохо на 5-10 млн партах... спасибо
  • @dj_mixer #302892 06:19 PM, 07 Dec 2022
    @den_crane ещё вы говорили на митапе про детач/аттач из/в таблицы с разным партиционированием. есть по этому поводу новости?
  • https://t.me/clickhouse_ru
    create table test ( id Int64, d Int64 )
    Engine=MergeTree partition by (intDiv(d, 1000)) Order by id;

    set max_partitions_per_insert_block=0;

    insert into test select number, number from numbers(1e8);

    я как-то пробовал 500 тыс. партов сделать. Там любой селект делает прунинг 500мс
  • @dj_mixer #302894 06:20 PM, 07 Dec 2022
    а про долгий стартап?
  • https://t.me/clickhouse_ru
    зависит от диска. На 100тыс. партов уже долго. Можно detach table / attach table проверять
  • https://t.me/clickhouse_ru
    https://github.com/ClickHouse/ClickHouse/pull/39507

    КХ команда не горят желанием мержить
    Allow to attach partition from table with different partition expression when destination partition expression doesn't re-partition by arthurpassos · Pull Request #39507 · ClickHouse/ClickHouse

    Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Allow partitions from tables with different partition exp...

  • вот прям жалко
  • https://t.me/clickhouse_ru
    @den_crane #302898 06:27 PM, 07 Dec 2022
    в клауде долгий старт скорее всего из-за блок стораджа
    у очень частая проблема с AWS EBS , там лимитированные iops. Регулярно у клиентов наблюдаю старт КХ по 40 минут.
  • https://t.me/clickhouse_ru
    ну напишите там в коментах что очень надо, ну очень. Обещаете тестировать вдоль и поперек.
    Алексей наверное не хочет мержить потому что страшно.
  • > Регулярно у клиентов наблюдаю старт КХ по 40 минут.

    сколько там итого партов/таблиц?
  • https://t.me/clickhouse_ru
    видел такое у клиента с 15тыс. таблиц, в каждой по ~12 партиций, всего было <100 тыс. партов.

    и скорее всего при большом кол-ве колонок будет хуже (я не уверен, надо теститьт).
  • https://t.me/clickhouse_ru
    Ну тут gp3, 10к иопсов за глаза должно быть, имхо
  • https://t.me/clickhouse_ru
    Кстати, в clickhouse cloud задран размер компакт парта до 512мб, тоже должно немного помочь
  • кстати, искал в чате, но не нашел (возможно, плохо справился): есть ли где-то техническое овервью, как клауд работает? какого типа инстансы поднимаются, как скейлятся от нагрузки, какие лимиты и есть ли они, где хранятся данные и так далее
  • ахаха, и эти люди будут запрещать мне ковыряться в носу? ))))

    https://github.com/ClickHouse/ClickHouse/issues/32241#issuecomment-1283169958
    RENAME COLUMN on compact parts may take advantage of using hard links for non-changed files · Issue #32241 · ClickHouse/ClickHouse

    Describe what's wrong Rename table in compact parts is supposed to use hard-linking as it does for wide-parts. However, it does not. Does it reproduce on recent release? yes How to reproduc...

  • https://t.me/clickhouse_ru
    Ну теперь можете поднять клауд инстанс, залить ваши данные, а потом начать делать RENAME COLUMN и писать тикеты в поддержку :)
  • https://t.me/clickhouse_ru
    хаха , мы только что обсуждали что не Final не работает если сделать select ... from left join right FINAL и я предложил сделать акк. cloud и попросить починить.
  • https://t.me/clickhouse_ru
    Уже починили в новом аналайзере
  • https://t.me/clickhouse_ru
    ОК
  • https://t.me/clickhouse_ru
    Нужно посмотреть блоги и вебинары.
    А так по памяти, все данные хранятся на S3 диске, используется write through /read cache disk поверх этого. Возможно инстансы шарятся между тенантами (в system.async_metrics там по 64 ядра и +-8 дисков видны, по памяти они не сильно жирные 256ГБ макс (те на каждое ядро по 4гб памяти)).
    3 реплики в трех AZ, шардирования нет.

    Ну и многие потенциально опасные фичи выключены.
    Крутится все в k8s емнип. (ну хостнеймы там .svc.cluster.local)
  • а в бесплатном триале есть нормальная поддержка? )
  • https://t.me/clickhouse_ru
    Ну, там точно есть звонок с специалистом по переносу, можете пожаловаться ему, думаю :)
  • Я так понимаю, если интересны более специфические вопросы и опасения (из разряда «хотим налить 5/10/50тб, не лопнет один шард?»), то лучше сразу в суппорт идти с конкретикой?
  • https://t.me/clickhouse_ru
    Да, ну 50ТБ на один шард по нашему мнению многовато.

    Мы клиентам нашего облака, обычно говорим до 8ТБ на шард.(для облаков)

    Впрочем у нас есть клиенты и с 24ТБ на шард. (там возникают некоторые сложности с временем бекапом этого, но мы сейчас думаем над решением этого)
  • Ну мы вообще по 2 держим, правда шарды потоньше. Но вы пишете, что шардирования нет - его совсем нет, или при желании есть? :)
  • https://t.me/clickhouse_ru
    Ну, пока нет совсем, может будет в будущем.

    Просто шардирование это Distributed таблицы и понимание топологии кластера.
    Как мне кажется, в clickhouse cloud они хотят, что бы люди не задумывались по поводу Distributed таблицы и тд, поэтому там этого нет.

    Может сделают некие ShardedMergeTree таблицы, но это очень большая работа, сейчас бы хотя бы zero copy replication s3 стабилизировать
  • Понял, спасибо!
  • @5735362232 #302919 07:12 PM, 07 Dec 2022
    Понял, спасибо!
  • @5735362232 #302920 07:12 PM, 07 Dec 2022
    Ну, пока нет совсем, может будет в будущем.

    Просто шардирование это Distributed таблицы и понимание топологии кластера.
    Как мне кажется, в clickhouse cloud они хотят, что бы люди не задумывались по поводу Distributed таблицы и тд, поэтому там этого нет.

    Может сделают некие ShardedMergeTree таблицы, но это очень большая работа, сейчас бы хотя бы zero copy replication s3 стабилизировать
  • @5735362232 #302921 07:12 PM, 07 Dec 2022
    Ну мы вообще по 2 держим, правда шарды потоньше. Но вы пишете, что шардирования нет - его совсем нет, или при желании есть? :)
  • @5735362232 #302922 07:12 PM, 07 Dec 2022
    Да, ну 50ТБ на один шард по нашему мнению многовато.

    Мы клиентам нашего облака, обычно говорим до 8ТБ на шард.(для облаков)

    Впрочем у нас есть клиенты и с 24ТБ на шард. (там возникают некоторые сложности с временем бекапом этого, но мы сейчас думаем над решением этого)
  • @5735362232 #302923 07:12 PM, 07 Dec 2022
    Я так понимаю, если интересны более специфические вопросы и опасения (из разряда «хотим налить 5/10/50тб, не лопнет один шард?»), то лучше сразу в суппорт идти с конкретикой?
  • @5735362232 #302924 07:12 PM, 07 Dec 2022
    Ну, там точно есть звонок с специалистом по переносу, можете пожаловаться ему, думаю :)
  • 08 December 2022 (178 messages)
  • https://t.me/clickhouse_ru
    @dimkas78 #302928 05:01 AM, 08 Dec 2022
    Коллеги, здравствуйте!

    Ситуация - есть таблица с движком ReplacingMergeTree и полем типа "дата" на первой позиции ключей сортировки.
    После даты в списке ключей сортировки идут другие поля с более высокой кардинальностью.
    Таблица заполнена историей за последние 3 года. Общий размер невелик - около 500 миллионов строк.

    Изредка в эту таблицу нужно повторно перезалить часть данных (менее 1 %), начиная с 2020 года.
    И что-то этот процесс в последнее время стал сильно тормозить, 1000 строк может вставляться 1 минуту.

    Вопрос - могла ли скорость вставки упасть из-за того что мы повторно вставляем старые данные 2020 года,
    которые как бы в самом начале таблицы?
  • @5635886016 #302931 06:00 AM, 08 Dec 2022
    ⛔️Приветствую⛔️

    Мы с ребятами зарабатываем арбитражем криптовалют

    ‼️Новая тема заработка на просадках бирж‼️

    Нашей командой было принято решение собрать единомышленников и увеличить наши ряды, так как проводить все сделки мы сами не успеваем

    Совершенно новая тема заработка💰

    Мы готовы дать возможность заработать, индивидуальное обучение каждому желающему, в замен на процент с чистого заработка который составляет 15%

    🛑Деньги за обучение не берём и переводить нам ничего не нужно, только процент с прибыли после обучения🛑

    Если ты заинтересован крутиться в теме криптовалют, напиши нам, все предельно чисто и прозрачно✔️

    ⚜️После обучения, самых перспективных пригласим в наши команды⚜️

    Пишите: @simvolMWO
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302928 #302932 06:03 AM, 08 Dec 2022
    какой partition by в этой таблице?
  • /report
  • @Dmitry_Pereverzev #302934 06:40 AM, 08 Dec 2022
    приветствия
    такая проблема: подкючил движок кафки как из примераhttps://clickhouse.com/docs/en/integrations/kafka/kafka-table-engine/ Добавил мат вьюху для записи ошибок. В кафку сообщения приходят, консюмер клика к кафке цепляется . Но во вьюхах и таблице записей нет. Запущено в докере. Логи клика и кафки пустые. Подскажите в какую сторону копать
  • https://t.me/clickhouse_ru
    по месяцам той самой даты
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302935 #302936 06:51 AM, 08 Dec 2022
    "которые как бы в самом начале таблицы" - там нет начала таблицы. Когда вы вставляете старые данные порождается несколько крошечных партов по вашим месяцам. Если данные размазаны по времени, то партов могут быть десятки. это конечно не повод тормозить на минуту, но я бы для начала посмотрел в system.part_log
  • https://t.me/clickhouse_ru
    спасибо, буду искать,
    пока считаю данные в соседнюю таблицу,
    чтобы потом вставить всю пересчитанную историю за 1 раз, а не 1000 insert'ов выполнять
  • @packofopinions #302939 07:21 AM, 08 Dec 2022
    Здравствуйте. Использую структуру вида Buffer -> MergeTree -> несколько MATERIALIZED VIEW для записи в Distributed таблицы. Есть основания пологать, что некоторые записи теряются, а некоторые дублируются. Проблему с дублями еще пытаюсь локализовать, но может вы подскажете очевидные проблемы такой схемы
  • https://t.me/clickhouse_ru
    system.query_views_log включен?

    откуда считаете что "данные теряются"?

    engine=Distrbuted - мониторите сколько там DistributedFilesToInsert
    оно точно успевает распихивать по шардам?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302937 #302941 07:34 AM, 08 Dec 2022
    стойте, а что такое 1000 инсертов? Должен быть один. Если сами не буфферизируете, то можно тот-же Buffer не применить
  • https://t.me/clickhouse_ru
    пересчёт истории за 3 года это примерно 1000 дней - каждый день рассчитывается отдельно, получает условную 1000 строк и вставляет ее в таблицу
    эта порочная практика работала полгода, и вот сейчас перестала
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302942 #302943 07:36 AM, 08 Dec 2022
    Ну так примените Buffer, он для таких кейсов и сделан.
  • https://t.me/clickhouse_ru
    спасибо за идею, пойду читать про Buffer
  • system.query_views_log не включен, еще таким не пользовался. Файлы не копятся, с этим все хорошо. По потерям прогнал пачку сообщений через ab, пару раз словил момент, что в Distrbuted оказалось меньше записей. Я в первую очередь хотел посоветоваться на счет рабочая ли подобная схема, а по ошибкам сейчас с дублями воюю, на потери чисто наткнулся в тестовой среде, пытаясь воспроизвести дубли
  • https://t.me/clickhouse_ru
    @809096964 #302946 07:43 AM, 08 Dec 2022
    Мир Михаила Онуфриенко

    Не вижу в Мире Великой Руси.Пока... По вопросам рекламы: @KristinaTGmarketing

  • https://t.me/clickhouse_ru
    там под Distributed что стоит ? ReplicatedMergeTree?
    там дедупликация на уровне блоков

    если ваша пачка запросов вставляет одинаковые данные то они скипнутся по контрольной сумме
  • верно, ReplicatedMergeTree. Просто при записи тестовой пачки записи одинаковые и подавляющее количество раз в Distributed доходят все. Забыл про дедупликацию, может у меня как раз в этом и проблема, спасибо
  • @Kamil_any #302950 08:23 AM, 08 Dec 2022
    Всем доброе утро!
    Подскажите кто-то сталкивался с проблемой, когда пытаешься создать MATERIALIZED VIEW c движком MergeTree и указанием POPULATE не получается записать все данные из-за переполнения оперативы. Может кто знает как этот процесс правильно проводить, может есть вариант при котором получиться агрегировать все данные и записать, может можно как-то разделить процесс на этапы
  • https://t.me/clickhouse_ru
    не использовать POPULATE)
  • https://t.me/clickhouse_ru
    @cmbcksrl #302952 08:28 AM, 08 Dec 2022
    можно просто создать матвью без POPULATE и загружать данные из таблицы источника в таблицу назначения через INSERT ... SELECT, где селект - это выражение при создании матвью
  • https://t.me/clickhouse_ru
    @cmbcksrl #302953 08:29 AM, 08 Dec 2022
    в этом выражении можете фильтр добавить, чтобы по частям загрузить данные, например, по 1 партиции
  • https://t.me/clickhouse_ru
    @cmbcksrl #302954 08:29 AM, 08 Dec 2022
    типа такого

    CREATE MATERIALIZED VIEW mv_source2target TO target
    AS SELECT ... FROM source WHERE cond > ...

    INSERT INTO target SELECT ... FROM source WHERE cond < ...
  • https://t.me/clickhouse_ru
    взял отсюда, если интересно, тут можете что-то еще полезно мб для себя найти

    https://kb.altinity.com/altinity-kb-schema-design/materialized-views/
  • Спасибо
  • @Kamil_any #302957 08:30 AM, 08 Dec 2022
    сейчас буду изучать пробовать)
  • https://t.me/clickhouse_ru
    тут вообще в этой беседе часто на вопросы по мат вью кидают в ответ этот видос, тоже посоветовал бы глянуть

    https://www.youtube.com/watch?v=1LVJ_WcLgF8&list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597s
  • https://t.me/clickhouse_ru
    @158113026 #302961 08:39 AM, 08 Dec 2022
    Добрый день, всем. Вопрос про CollapsingMergeTree.

    В документации есть такая строка:
    select * from UAct final; // старайтесь не использовать final (он подходит только для тестов и маленьких таблиц)

    Однако не пояснено, это относится только к тому, когда запрос идет ко всей таблице или для любого запроса. А как final поведет себя при ограниченной выборке?
    select * from UAct final where [условие выбирающее несколько сотен записей]
    Тоже не стоит использовать final и свертывать вручную или в таком случае final допустим?
  • https://t.me/clickhouse_ru
    @VBelyshev #302962 08:40 AM, 08 Dec 2022
    Всем привет. Подскажите, запросы с async_insert не попадают в query_log или это настраивается где то отдельно? верситя КХ 21.11.4.14
  • https://t.me/clickhouse_ru
    Про то, что не нужно использовать POPULATE Вам уже выше написали, ну и в доке про это есть
    А если хочется решение как залить данные, то всегда можно посмотреть какая таблица под матвью
    наприм так:
    select * from system.tables where name in (
    select '.inner_id.' || toString(uuid) from system.tables where database ='название бд' and name = 'название таблицы'
    )а дальше загрузить данные в эту таблицу в необходимом объеме
    Ну либо сделать матвью с секцией TO table_name и самостоятельно управлять процессом
  • Спасибо
  • @Kamil_any #302965 08:50 AM, 08 Dec 2022
    Ну вопрос скорее в том, что ретроспективные данные очень сильно нужны, а до этого я собирал их при помощи populate
  • https://t.me/clickhouse_ru
    отличие в любом из предложенных вариантов будет только в том, что тебе придется этот шаг сделать вручную и позаботиться о порциях данным, внутри которых происходит аггрегирование, ключи, партиционирование и тд
  • https://t.me/clickhouse_ru
    оно будет медленнее в зависимости от того, сколько в запросе участвует партиций, и в зависимости от того, насколько у вас данные уже смерджились, тк FINAL делает мерджи вне зависимости от партиционирования

    лучше сделать, как доке написано, искусственное схлопывание удаленных строк через SUM(... * sign) ... HAVING SUM(sign) > 0, оно менее затратно
  • https://t.me/clickhouse_ru
    Там где агрегация да, понятно что надо SUM(... * sign). Но тут в том-то и дело, что запрос без агрегации. Надо просто записи извлечь без схлопываемых.
  • @111010502 #302969 09:04 AM, 08 Dec 2022
    Ребят, есть структура у поля вида Map(String, Tuple(a Int64, b Float64)), но при дергании в селекте field[‘f’].a падает ошибка (мол поля нет такого), хотя по .1 все работает. Бага?
  • https://t.me/clickhouse_ru
    @cmbcksrl #302972 09:18 AM, 08 Dec 2022
    так я и говорю

    пусть у вас есть таблица
    CREATE TABLE test
    (
    user_id UInt8,
    event_id UInt8,
    sign Int8
    ) ENGINE = CollapsingMergeTree(sign) ORDER BY a

    то есть для каждого юзера может обновляться event_id

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

    SELECT user_id FROM test GROUP BY user_id HAVING SUM(sign) > 0
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302967 #302973 09:44 AM, 08 Dec 2022
    не совсем так. Недавно появился сеттинг do_not_merge_across_partitions_select_final который значительно ускоряет именно описываемый Александром кейс. Так что я попробовал бы оба варианта на конкретных схемах таблиц, данных и запросах.
  • https://t.me/clickhouse_ru
    @cmbcksrl #302974 09:45 AM, 08 Dec 2022
    ну да, согласен
    чет забыл о настройке
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302969 #302975 09:45 AM, 08 Dec 2022
    фича. все уже привыкли.
  • как обходить красивее всего?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302976 #302977 09:58 AM, 08 Dec 2022
    я пишу .1 Это чуть менее понятно, но терпимо. Наверное можно что-то намутить с временными табличками - https://clickhouse.com/docs/en/sql-reference/data-types/tuple/#addressing-tuple-elements
  • https://t.me/clickhouse_ru
    @nataschachu #302978 10:05 AM, 08 Dec 2022
    Привет!! Подскажите, пожалуйста, как правильно сделать копию таблицы прямо с данными? Чтобы можно было поиграть в ней с индексами и потом смело удалить, вот так CREATE TABLE КОПИЯ ENGINE = MergeTree() AS SELECT * FROM ОРИГИНАЛ получится?
  • https://t.me/clickhouse_ru
    устарело это в документации, использовать final можно

    смотрите
    CollapsingMergeTree
    он схлопывает строки для одинакового набора значений колонок из ORDER BY
    в момент вставки парта и в момент мержа двух партов (парты из разных партиций не мержатся)

    соответсвенно FINAL работает точно также но на этапе SELECT
    то есть мы через WHERE определяем какие парты мы читаем
    читаем, фильтруем и схлопываем их

    слопывание дополнительно жрет CPU и раньше было не паралельным поэтмоу давало пинальти x2-x5 к запросам без FINAL
    теперь это где то 20% накладных
  • https://t.me/clickhouse_ru
    можно сделать таблицу с точно такой же структурой и сделать ATTACH PARTITION ... FROM <таблица исходник> несколько партиций
  • https://t.me/clickhouse_ru
    О спасибо! Интуитивно и по синтетическим тестам, которые написал у меня именно так и получалось, что не сильно влияет. Но смущала документация.
  • https://t.me/clickhouse_ru
    то есть будет как бы ненастоящая копия? а что-то типа симлинка? можно ли будет потом сделать drop table и не удалятся ли данные?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    нет, настоящая
    https://clickhouse.com/docs/en/sql-reference/statements/alter/partition/#attach-partition-from
    Manipulating Partitions and Parts | ClickHouse Docs

    The following operations with partitions are available:

  • https://t.me/clickhouse_ru
    но возможно "копирование" будет сделано через механизм hard link
  • https://t.me/clickhouse_ru
    можно еще AS SELECT * FROM original WHERE ...

    это гибче если у вас структура другая и другой ORDER BY \ PARTITION BY ...
  • https://t.me/clickhouse_ru
    @nataschachu #302987 10:16 AM, 08 Dec 2022
    нет, не другая, ровно такую же таблицу хочу)
  • @DenisGee #302988 10:16 AM, 08 Dec 2022
    CREATE TABLE | ClickHouse Docs

    Creates a new table. This query can have various syntax forms depending on a use case.

  • https://t.me/clickhouse_ru
    @nataschachu #302989 10:17 AM, 08 Dec 2022
    спасибо, дорогие ❤️
  • понял. у меня вообще задача с кафки map со значением из нескольких типов подгрузить без танцев. но все равно спасибо
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302990 #302991 10:33 AM, 08 Dec 2022
    тип JSON уже пробовали? У меня он именно для этих целей - быстро и "без танцев".
  • пробовали. есть проблема одна. то что он дефолтные значения для типов использует, если значение не задано. для всех строк.
  • @111010502 #302993 10:35 AM, 08 Dec 2022
    то есть в одной строке может быть x: 1, в другой y: 2 и если считать avg(x) то будет 0.5
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #302993 #302994 10:37 AM, 08 Dec 2022
    да, это все понятные недоделки. Null хоть и редко, но нужен. avg тяжелый случай. если там у вас нуля не бывает, то avgIf(x,x>0)
  • 0 возможен к сожалению. вот я и думал через Map(String, Tuple(Nullable(Int64), …)) обойтись, но цифорки немного не удобно
  • https://t.me/clickhouse_ru
    @ksevostyanov #302997 10:58 AM, 08 Dec 2022
    Добрый день.
    Скажите пожалуйста в чем проблема может быть:
    Забираю месседжи из kafka через JSONEachRow
    Для данных типа:
    "row1": {"id": "19167", "type": 2}
    работает row1 Map(String, Int64)

    Но для "row2": {"url_name": "https://wwww.google.ry/?utm_referrer=ya.ru", "urle_type": 1}
    почему то не работает row2 Map(String, Int64),

    ParsingException: Cannot parse input: expected '"' before: 'https://wwww.google.ry/?utm_referrer=ya.ru", "url_type": 1}}': (while reading the value of key row2):
  • https://t.me/clickhouse_ru
    потому что у вас там Map с разными типами... ключ строка, а значения то строка то число... и работать не будет так
  • https://t.me/clickhouse_ru
    для "row1": {"id": "19167", "type": 2}, где значение первого ключа - строка, второго - число прекрасно работает

    во втором поле все аналогично
    "row2": {"url_name": "https://wwww.google.ry/?utm_referrer=ya.ru", "urle_type": 1}
  • https://t.me/clickhouse_ru
    она не строка, она число, в JSON числа могут быть в кавычках
  • https://t.me/clickhouse_ru
    @ksevostyanov #303003 11:59 AM, 08 Dec 2022
    о как..выхода нет?
  • https://t.me/clickhouse_ru
    во втором поле у вас не все аналогично url_name это строка

    Map(String, Int64) первый параметр тип ключа второй тип значения

    попробуйте Map(String, String)
    но не факт что сработает, все таки у вас числа явно заданы...

    еще есть встроенный тип JSON
    https://clickhouse.com/docs/en/sql-reference/data-types/json
    JSON | ClickHouse Docs

    Stores JavaScript Object Notation (JSON) documents in a single column.

  • https://t.me/clickhouse_ru
    @ksevostyanov #303005 12:01 PM, 08 Dec 2022
    нет, Map(String, String) пробовал, не работает, попробую JSON
  • https://t.me/clickhouse_ru
    clickhouse_sinker?
  • https://t.me/clickhouse_ru
    json тоже не сработал
    ParsingException: JSON should start from opening curly bracket: (while reading the value of key row2)
  • https://t.me/clickhouse_ru
    в каком формате вставляете ?
    JSONEachRow ?
  • https://t.me/clickhouse_ru
    @ksevostyanov #303009 12:09 PM, 08 Dec 2022
    да
  • https://t.me/clickhouse_ru
    как полностью строка выглядит?
  • https://t.me/clickhouse_ru
    там если у вас в одном ключе микс из разных типов, скаляров объектов и массивов. то это не однородные данные с таким JSON сложно работать

    сохраняйте отдельно в строку json_string String CODEC(ZSTD(3))
    и потом добавляйте поля отдельно через DEFAULT JSONExtract(json_string)
  • https://t.me/clickhouse_ru
    CreateTime:1670499123340 null {"datetime": 1670498941, "row1": {"id": "83", "type": 1}, "row2": {"url_name": "https://wwww.google.ry/?utm_referrer=ya.ru", "url_type": 4}}
  • https://t.me/clickhouse_ru
    Очень интересно, спасибо за информацию. А по поводу ReplacingMergeTree такая же история?
  • https://t.me/clickhouse_ru
    да, собственно вся разница в движках *MergeTree семейства
    это то как обрабатываются строки с одинаковым ORDER BY значениями колонок при мерже
  • https://t.me/clickhouse_ru
    это не JSON от слова вообще
    он не валидный

    CreateTime:1670499123340 null
    вот этот кусок это не JSON
  • https://t.me/clickhouse_ru
    или у вас там три поля?

    тогда у вас TSV формат а не JSONEachRow
  • https://t.me/clickhouse_ru
    TabSeparated?
  • https://t.me/clickhouse_ru
    для Replacing Будет замена, то есть выбор рандомной строки
    либо строки с максимальным значением поля которое указано как Version
  • https://t.me/clickhouse_ru
    спасибо за пояснение!
  • https://t.me/clickhouse_ru
    да
  • https://t.me/clickhouse_ru
    Немного уточню, что без использования ver колонки строка будет не рандомная, а строка из более "нового" блока
  • https://t.me/clickhouse_ru
    так совсем все плохо...с JSONEachRow я бОльшую часть данных вытаскиваю, кроме "row2": {"url_name": "https://wwww.google.ry/?utm_referrer=ya.ru", "url_type": 4}
  • https://t.me/clickhouse_ru
    а остальные строки как вышлядят?

    скиньте кусок данных на pastebin ?
  • https://t.me/clickhouse_ru
    {
    "row1": 1,
    "row2": 1670501941,
    "row3": 4,
    "row4":
    {
    "id": "546",
    "type": 1
    },
    "row5": 12,
    "row6":
    {
    "url_name": "https://www.gooele.com/?utm_referrer=ya.ru",
    "url_type": 4
    }
    }

    CREATE TABLE queue_kafka_topic (
    row1 Int64,
    row2 DateTime('Europe/Moscow'),
    row3 Int64,
    row4 Map(String, Int64),
    row5 Int64, row6 Map(String, Int64) ) ENGINE = Kafka('{kafka_address}:9092', 'topic_name', 'cosumer-group', 'JSONEachRow') settings kafka_thread_per_consumer = 0, kafka_num_consumers = 1;")
    до row6 все попадает в ch.

    https://pastebin.com/KMdtxhLZ
    { "row1": 1, "row2": 1670501941, "row3": 4, "row4": { "id - Pastebin.com

    Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.

  • https://t.me/clickhouse_ru
    а... это парсинг из кафки вообще

    попробуйте сделать
    row6 String

    а в MATERIALIZED VIEW в целевую таблицу добавить row6 Object('json')
  • https://t.me/clickhouse_ru
    Cannot parse JSON string: expected opening quote: (while reading the value of key row6)
  • https://t.me/clickhouse_ru
    @utkinmaximand #303029 01:22 PM, 08 Dec 2022
    Ребят подскажи , как создать корректно mat.view с движком aggregatingmergetree над распределённой таблицей , почему то distributed над ней не хочет работать в mat.view а если тянуть с шардов то агрегация не корретна.
  • Над distributed никак - она данные в себе не хранит. Нужно создавать над локальными табличками и над ними делать еще 1 дистрибьютед
  • https://t.me/clickhouse_ru
    А как сделать агрегацию корректно ведь если сделать над локальными нужно делать агрегацию над ними, чтобы было правильно, просто собрать результаты в дистрибьют - не даст правильную агрегацию.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303032 #303033 01:43 PM, 08 Dec 2022
    Что значит не даст? Простое чтение тоже не даст. Никто не гарантирует что агрегация завершится. Всегда надо доагрегировать во время запроса. То-же самое и с Distributed. Да, вам соберут с шардов что-то не до конца аггрегированное. Пишите group by и применяете свои функции агрегации.
  • https://t.me/clickhouse_ru
    @YephimS #303034 01:47 PM, 08 Dec 2022
    Привет! подскажите пытаюсь джойнить таблички по условию startsWith(gr.full_path, grhl.full_path) clickhouse ругается Unsupported JOIN ON conditions. Что то пока не соображу как по другому сделать.
  • https://t.me/clickhouse_ru
    @brbrbr ↶ Reply to #303033 #303035 01:48 PM, 08 Dec 2022
    MV на дистрибьютед сделать всё же можно, но данные будут пойманы только на том сервере, на котором происходила вставка в дистрибьютед таблицу. Если MV вешать на локальные, то данные будут ловиться на тех серверах, куда дистрибьютед таблица их отправит согласно ключу шардирования.

    Если делать MV на локальные таблицы или если MV на дистрибьютед, в которую идёт вставка на разных серверах, то агрегационная таблица, в которую будут писать MV, должна быть либо одна реплицированная и тогда вы забираете результат из неё на любом сервере, либо она на каждом сервере, но поверх есть своя дистрибьютед таблица, через которую забираете данные.
    Если делать MV на дистрибьютед и вставка в неё только на одном сервере, то и агрегационная нужна только на нём.
  • https://t.me/clickhouse_ru
    @brbrbr ↶ Reply to #303034 #303036 01:49 PM, 08 Dec 2022
    По идее так:

    select *
    from gr, grhl
    where startsWith(gr.full_path, grhl.full_path)
  • https://t.me/clickhouse_ru
    @m1khal3v #303037 01:50 PM, 08 Dec 2022
    Всем привет. А есть какая-нибудь хитрая настройка, которая заставит FINAL работать именно как мерджи, а именно не мерджить данные из разных партиций?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303037 #303038 01:52 PM, 08 Dec 2022
    вы бы читали историю чата. хотябы за сегодня. Только что обсуждали - https://t.me/clickhouse_ru/302973
    Boris in ClickHouse не тормозит

    не совсем так. Недавно появился сеттинг do_not_merge_across_partitions_select_final который значительно ускоряет именно описываемый Александром кейс. Так что я попробовал бы оба варианта на конкретных схемах таблиц, данных и запросах.

  • https://t.me/clickhouse_ru
    Благодарю. Не всегда есть возможность читать историю, но обычно я стараюсь
  • https://t.me/clickhouse_ru
    @m1khal3v #303040 01:54 PM, 08 Dec 2022
    В 22.8 есть, ляпота, ещё раз спасибо
  • https://t.me/clickhouse_ru
    что то сложное написано, ну или я туплю =) - вроде нет никакой проблемы сделать MV поверх Distributed, а саму MV TO другую дистриб таблицу, главное ключ шардирования правильный указать
  • Да - нужно доагрегировать во время селекта. Но нужно понимамать что оно будет нормально работать только в случае есть у вас простые функции агрегации(типо max, min, avg). Если вы хотите так считать uniq - то работать это будет плохо(конечно еще зависит от объемов)
  • https://t.me/clickhouse_ru
    @ilejn #303043 02:01 PM, 08 Dec 2022
    Добрый день,
    пытаюсь апгрейдиться с 20.3.12.112 до 22.8
    Получаю
    2022.12.08 10:21:04.877150 [ 1 ] {} <Error> Application: Caught exception while loading m
    etadata: Code: 48. DB::Exception: Data directory for system database exists, but metadata
    file does not. Probably you are trying to upgrade from version older than 20.7. If so, y
    ou should upgrade through intermediate version. (NOT_IMPLEMENTED), Stack trace (when copy
    ing this message, always include the lines below):
    ...
    4. DB::loadMetadataSystem(std::__1::shared_ptr<DB::Context>) @ 0x151bb022 in /usr/bin/cli
    ckhouse

    Чистая правда, older than 20.7
    Но все же хочется сапгрейдится.

    Стер data и metadata для system, получил

    Caught exception while loading m
    etadata: Code: 48. DB::Exception: Data directory for default database exists, but metadat
    a file does not.

    Ну то есть теперь проблема с default, который я не готов стирать. Правильно ли я понимаю, что у меня есть два варианта

    1. конвертировать все Ordinary в Atomic по инструкции https://kb.altinity.com/engines/altinity-kb-atomic-database-engine/how-to-convert-ordinary-to-atomic/
    2. признать поражение и апгрейдится через 21.8
    ?

    Меня смущает, что я вижу в исходниках всякое convertDatabasesEnginesIfNeed и даже ставлю флаг convert_ordinary_to_atomic, но это не помогает .
    How to Convert Ordinary to Atomic

    Clickhouse Howto Convert Ordinary to Atomic

  • @5272136899 #303048 02:12 PM, 08 Dec 2022
    Добрый вечер. Каким-то образом можно оптимизировать поиск по Array(String)?
  • https://t.me/clickhouse_ru
    А какой именно поиск по нему идет?
  • https://t.me/clickhouse_ru
    @brbrbr ↶ Reply to #303041 #303051 02:24 PM, 08 Dec 2022
    Кстати да. Я просто наступил пару раз на вставку через дистрибьютед и больше так стараюсь не делать)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303048 #303052 02:31 PM, 08 Dec 2022
    построить bloom_filter skip index
  • https://t.me/clickhouse_ru
    Если делать aggMerge над distributed, то возвращается несколько результатов и те странные
  • https://t.me/clickhouse_ru
    Только 2, автоматически сконвертировать можно только после апгрейда на новую версию.
    Ещё есть вариант 3 — прочитать код и самому поправить метаданные так, чтобы было совместимо и 22.8 запустилась, но по понятным причинам это не рекомендуется.
    И там ещё могут быть похожие ошибки в ReplicatedMergeTree при обновлении с очень старых версий
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303054 #303055 03:06 PM, 08 Dec 2022
    Ок, спасибо, будем апгрейдится через 21.8
  • https://t.me/clickhouse_ru
    @seriych #303057 03:22 PM, 08 Dec 2022
    Привет. Пишу/читаю в/из S3 - никаких проблем с TSV/CSV.
    Делаю тоже самое с parquet - не читает обратно:

    insert into function s3('path/test.parquet', 'key', 'key', 'Parquet')
    select 'test' as test1
    ;
    select *
    from s3('path/test.parquet', 'key', 'key', 'Parquet', 'test1 String')
    ;
    Code: 36. DB::Exception:
    Invalid: Parquet file size is 0 bytes:
    While executing ParquetBlockInputFormat:
    While executing S3.
    (BAD_ARGUMENTS) (version 22.3.8.39 (official build))

    Если как RawBLOB этот test.parquet прочитать - кракозябры читаются.
    Качаю ручками этот test.parquet и закидываю в clickhouse-client - всё норм читается.
    Это как-то лечится?
    Видел пару похожих вопросов, но ответов не нашел.
  • https://t.me/clickhouse_ru
    А если попробовать записать ваш файл в другой ключ?
  • https://t.me/clickhouse_ru
    @unamedrus #303059 03:27 PM, 08 Dec 2022
    >
    Invalid: Parquet file size is 0 bytes:

    Что там с размером файла на S3?
  • @denya133 #303060 03:28 PM, 08 Dec 2022
    парни, вот какой вопрос:
    (может это подробно где то написано в документации и я не заметил)
    по какому принципу формируется количество партов в партиции? - т.е. какое количество этих партов должно быть минимум?
    в моих реалиях вставки идут крупные (по 100к примерно)
    коррелирует ли количество партов с количством уникальных первичных ключей на партицию? - т.е. если по первичному ключу получается например 10 уникальных значений - должно ли быть с этим количеством связано количество партов?
  • https://t.me/clickhouse_ru
    Кол-во партов при вставке зависит от:

    В сколько партиций вы пишете данные. (каждая отдельная партиция это новый парт)

    Плюс кх нарезает парты по 1 млн строк, те если вы в 1 партицию пишете больше 1 млн строк, то кх создат несколько партов

    https://kb.altinity.com/altinity-kb-queries-and-syntax/atomic-insert/
  • https://t.me/clickhouse_ru
    каждый INSERT в таблицу создает один парт в одной партиции минимум, дальше зависит от кол-ва строк внутри INSERT и вашего выражения PARTITION BY

    > т.е. какое количество этих партов должно быть минимум?
    минимум 0
    максимум 300 на партицию (PARTITION BY)

    нормально 10-50 партов на партицию

    > коррелирует ли количество партов с количством уникальных первичных ключей на партицию?

    вообще никак не коррелирует

    парт просто отсортированный по первичному ключу кусок данных получаемый из INSERT \ Materialized view
  • понял спасибо 👍
  • https://t.me/clickhouse_ru
    aws ls говорит 292 байта, как и у скачанного файла. В другое место права просить надо, но на чтение есть другие бакеты, и на любой паркетник получаю Parquet file size is 0 bytes. Собственно для этого тестовый и завел, чтобы свой файл через КХ записать, который по идее должен был точно корректно прочитаться, и где я точно знаю структуру.
  • @denya133 #303065 03:38 PM, 08 Dec 2022
    второй вопрос - дано:
    2 реплики, воркеры на запись работают только с одной репликой (вставка новых данных, вставка скорректированных данных с -1 и новых с +1).
    эта реплика загружена можно считать 100% времени.
    какие то мержи идут, но с муравьиной скоростью.
    вторая реплика - синхронизирует данные из первой, с ней никакие воркеры не работают совсем. - нагрузка почти нулевая.
    вопрос - можно ли ее принудительно заставить заниматься слияниями так, чтобы она использвала все доступные ресурсы для этого?
  • https://t.me/clickhouse_ru
    А если убрать схему паркета, тоже не читает?
  • https://t.me/clickhouse_ru
    Code: 636. DB::Exception: Cannot extract table structure from Parquet format file. Error: Invalid: Parquet file size is 0 bytes. (CANNOT_EXTRACT_TABLE_STRUCTURE) (version 22.3.8.39 (official build))
  • https://t.me/clickhouse_ru
    > вопрос - можно ли ее принудительно заставить заниматься слияниями так, чтобы она использвала все доступные ресурсы для этого?

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

    Только если мерж очень старый, или парт уже помержен, то тогда кх попытается его скачать, а не мержить.

    Те сделать некоторый offload нагрузки на вторую реплику не получиться. (можете распределить вставки между двух реплик)
  • https://t.me/clickhouse_ru
    вы занимаетесь преждевременной оптимизацией,
    пишите рандомно на обе реплики
    выбирайте куда писать в приложении
    можно для начала просто round robin

    потом что нибудь более умное докрутите...
  • https://t.me/clickhouse_ru
    Попробуйте поднять 22.8 кх локально и попробовать дернуть этот же паркет, там были баги в автоопределении схемы, но у вас и со схемой вылезает бага
  • это были просто пример - чтобы задать вопрос.
  • https://t.me/clickhouse_ru
    вы не контроллируете процесс слияний

    максимум можете background_fetch_pool_size увеличить, чтобы парты между репликами быстрее тягать...
  • @denya133 #303073 03:44 PM, 08 Dec 2022
    ситуация в том, что есть несколько реплик на которые итак идет запись паралельно, на них же крутстся скрипты питона (дергаются хранимки). слияния на них идут итак медленно (почти не идут).
    можно добавить 1-2 реплики, на которые не будет такой нагрузки на запись.
    поэтому вопрос - как заставить кх заниматься на 100% слияниями а не гоняниями лысого)
  • https://t.me/clickhouse_ru
    попробую, но думаю дело не в определении схемы. Я если просто через cat этот файл скармливаю, то норм всё: cat test.parquet | clickhouse-client --query="insert into ... FORMAT Parquet"
  • https://t.me/clickhouse_ru
    слияния реплицируется не финальный парт
    а само слияние, и оно повторной проводится на целевой реплике

    посмотрите
    https://clickhouse.com/docs/en/operations/system-tables/replication_queue/
    replication_queue | ClickHouse Docs

    Contains information about tasks from replication queues stored in ClickHouse Keeper, or ZooKeeper, for tables in the ReplicatedMergeTree family.

  • https://t.me/clickhouse_ru
    @fenogentov #303076 05:13 PM, 08 Dec 2022
    Есть куча данных, они агрегируются и записываются в клик.
    А потом через какое то время прилетают данные, которые предназначены для этой кучи.
    В клике нет update.
    Кто нибудь решал такую задачу?
  • https://t.me/clickhouse_ru
    @fenogentov #303077 05:14 PM, 08 Dec 2022
    агрегированная куча - это одна запись
  • https://t.me/clickhouse_ru
    AggregatingMergeTree | ClickHouse Docs

    The engine inherits from MergeTree, altering the logic for data parts merging. ClickHouse replaces all rows with the same primary key (or more accurately, with the same sorting key) with a single row (within a one data part) that stores a combination of states of aggregate functions.

  • https://t.me/clickhouse_ru
    я совсем хреново разбираюсь в клике, только начинаю
    если я правильно понял, там описано как сделать чтоб клик сам агрегировал?
    у меня агрегация в редисе, и задача как перегреировать "запоздавшие" данные и заменить в базе запись
  • https://t.me/clickhouse_ru
    ну тогда начните с нуля
    https://clickhouse.com/docs/en/quick-start
    и тут
    https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replacingmergetree
    https://clickhouse.com/docs/en/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources/#redis
    ClickHouse Cloud Quick Start | ClickHouse Docs

    The quickest and easiest way to get up and running with ClickHouse is to create a new

  • https://t.me/clickhouse_ru
    @fenogentov #303081 05:27 PM, 08 Dec 2022
    большое спасибо, очень кстати
  • https://t.me/clickhouse_ru
    @fenogentov #303082 05:28 PM, 08 Dec 2022
    но это все-таки не обясняет как можно решить эту задачу. и можно ли вообще
  • https://t.me/clickhouse_ru
    можно, ссылки я привел. их стоит прочитать
  • https://t.me/clickhouse_ru
    @yelrik #303084 05:46 PM, 08 Dec 2022
    коллеги, есть кейс, когда я из формы забирают список значений от пользователя и использую их как фильтр в запросе через конструкцию IN. Таких полей несколько, соотвественно запрос выглядит как SELECT ... FROM WHERE col IN ( ... ) AND col2 IN (...) и т.д. Можно в качестве аргумента в IN передать что-то,чтобы это означало отсутствие фильтра?
  • https://t.me/clickhouse_ru
    Не у компьютера, проверить не могу, но может попробовать астериск поставить через конструкцию if ? Хотя кажется, что пожалуется на разные типы данных или что такое не поддерживается.
  • https://t.me/clickhouse_ru
    Но в другом случае можно попробовать через join на таблицу значений по предшествующему селекту, где уже определенную логику выборки связующих значений можно организовать.
  • https://t.me/clickhouse_ru
    @yelrik ↶ Reply to #303086 #303087 05:53 PM, 08 Dec 2022
    ну накостылить я и сам могу, я задался найти элегантное решение :)
  • https://t.me/clickhouse_ru
    @yelrik #303088 05:53 PM, 08 Dec 2022
    в других субд можно использовать конструкцию WHERE col1 IN (col1)
  • https://t.me/clickhouse_ru
    @yelrik #303089 05:54 PM, 08 Dec 2022
    В Клике такое не катит
  • https://t.me/clickhouse_ru
    Так через join и будет работать, не надо даже in
    Right join в помощь
  • https://t.me/clickhouse_ru
    @yelrik ↶ Reply to #303090 #303091 05:56 PM, 08 Dec 2022
    а пример можно, я чего то не соображу :)
  • https://t.me/clickhouse_ru
    Честно, не у компа просто. Там адекватные примеры.

    https://clickhouse.com/docs/ru/sql-reference/statements/select/join
  • https://t.me/clickhouse_ru
    @yelrik ↶ Reply to #303092 #303093 05:57 PM, 08 Dec 2022
    спасибо, конечно, но я джойнить умею, вопрос же о другом задавался
  • https://t.me/clickhouse_ru
    Так ваша задача через join и решается нативным способом. Тут использование IN уже костыль скорее.
  • https://t.me/clickhouse_ru
    @yelrik #303095 05:58 PM, 08 Dec 2022
    причем тут JOIN вообще?
  • https://t.me/clickhouse_ru
    Вам нужно сделать выборку по совпадениям значения в диапазоне. Чем не задача родного правого джойна ?
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303084 #303097 06:01 PM, 08 Dec 2022
    Кажется, что вам нужен OR

    SELECT 'aaa' WHERE (2 IN (2, 3) AND 33 IN (3, 9) OR ('ALLOWED'='ALLOWED'))
  • https://t.me/clickhouse_ru
    @yelrik ↶ Reply to #303097 #303098 06:02 PM, 08 Dec 2022
    нет мне как раз нужно, чтобы все условия выполнялись, просто когда пользователь ничего не передал, то этот фильтр не использовался
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303098 #303099 06:03 PM, 08 Dec 2022
    Вот "когда пользователь ничего не передал" вы и установите в true альтернативное условие и добьетесь того, чтобы "фильтр не использовался".
  • https://t.me/clickhouse_ru
    @yelrik ↶ Reply to #303099 #303100 06:05 PM, 08 Dec 2022
    как это должно выглядеть? Вот запрос SELECT ...FROM ... WHERE col1 IN (%s) AND col2 IN (%s) AND col3 IN (%s) . Вместо %s будет приходить значения, которые пользователь заполнил в форме. Если для col1 и col2 значения придут, а для col3 нет, то запрос вернет пустой результат
  • https://t.me/clickhouse_ru
    Кстати, хороший вариант. Если OR в клике работает по принципу невычисления правого выражения, то рабочий варик.
  • https://t.me/clickhouse_ru
    SELECT ...FROM ... WHERE col1 IN (%s) AND col2 IN (%s)  AND (some_boolean OR col3 IN (%s))

    Вроде бы так, чтобы не нарушать группировку логических операторов
  • https://t.me/clickhouse_ru
    @yelrik ↶ Reply to #303102 #303103 06:16 PM, 08 Dec 2022
    что должно прийти в качестве условия для col1, чтобы вернулось True, при условие, что значения такого нет в col1? :)
  • https://t.me/clickhouse_ru
    @yelrik #303104 06:16 PM, 08 Dec 2022
    ну т.е. по факту col1 юзер не заполнит и мне нужно что-то передать, чтобы первое условие вернуло True
  • https://t.me/clickhouse_ru
    @xoradd #303105 06:17 PM, 08 Dec 2022
    Господа, планируется создание таблицы, в которую будут постоянно вставляться строки, у которых только 1 поле будет изменяться.
    А "читальщику" будет интересна только самая последняя (актуальная) строка.

    Вот и думаю что применить, для экономии места:
    1) CollapsingMergeTree
    2) lightweight DELETE

    Ваши советы?
  • https://t.me/clickhouse_ru
    А что за значение в поле и как это значение будет дальше использоваться
  • https://t.me/clickhouse_ru
    @unamedrus #303107 06:18 PM, 08 Dec 2022
    И сколько колонок вообще
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303107 #303108 06:19 PM, 08 Dec 2022
    5 колонок все инты (ссылки на записи в других таблицах).
  • https://t.me/clickhouse_ru
    а читальщику будет интересно получать последнюю версию 5ой колонки в разрезе других 4х колонок?
  • https://t.me/clickhouse_ru
    А сколько строк в секунду?
  • https://t.me/clickhouse_ru
    (length(%s) > 0 AND IN(%s))
    Хотя синтаксис может быть иной, если не строка, а массив. В любом случае, это костыль, потому что парсинг по типу данных надо добавить, как и создание массива, если это он.

    Но мне кажется, вы решаете вопрос пользовательской и серверной валидации через базу данных, если %s это якоря для форматирования запроса строками пользовательского ввода. Мой внутренний безопасник возмущен )))
    Проще тогда куски запроса в серверном коде скомпоновать по пользовательским данным, чтобы не вычислять эти выражения на стороне базы и не делать громоздкий запрос.
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303110 #303112 06:21 PM, 08 Dec 2022
    думаю что не более 5 строк в секунду, т.к. чаще отображать результат не требуется
  • https://t.me/clickhouse_ru
    Ну попробуйте ReplacingMergeTree и читать с FINAL
  • https://t.me/clickhouse_ru
    @unamedrus #303114 06:22 PM, 08 Dec 2022
    Кажется, что у вас не так много данных будет.
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303114 #303115 06:24 PM, 08 Dec 2022
    Ну да. В этой таблице просто будет формироваться маршрут по обходу древовидной структуры. И читальщик-рисовальщик будет периодически читать инфу о том, что готово к отрисовки.

    Можно было RPC сообщения реализовать, но попробуем это через ClickHouse ))
  • https://t.me/clickhouse_ru
    А зачем такое хранить в КХ?
  • https://t.me/clickhouse_ru
    @unamedrus #303117 06:25 PM, 08 Dec 2022
    У вас вообще сколько строк получается тогда?
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303116 #303118 06:31 PM, 08 Dec 2022
    возможно потребуется повторное прохождение маршрута для повторной отрисовки
  • https://t.me/clickhouse_ru
    @xoradd #303119 06:32 PM, 08 Dec 2022
    И лишние шаги не нужны. Нужна только инфа по поворотам.
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303113 #303120 06:40 PM, 08 Dec 2022
    А ключ сортировки у ReplacingMergeTree может быть составным? (несколько столбцов UInt*)
  • Через кортеж может быть
  • https://t.me/clickhouse_ru
    Да, конечно ORDER BY (key_a, key_b)
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303122 #303123 06:43 PM, 08 Dec 2022
    спс
  • https://t.me/clickhouse_ru
    @good_developer #303124 07:47 PM, 08 Dec 2022
    echo srvr | nc localhost 2181 | egrep "version|count"
    ClickHouse Keeper version: v22.11.2.30-stable-28f72d8ab09ed385570fe76c37047512de58f8a5
    Node count: 1516
    А что значит Node count? Вот у меня честно-честно нет 1516 инстансов кипера
  • В Кипере, как и в Зукипере древовидная схема данных
    Node - узел в этом дереве
  • 09 December 2022 (181 messages)
  • https://t.me/clickhouse_ru
    Релизные образы собираются этим скриптом https://github.com/ClickHouse/ClickHouse/blob/master/tests/ci/docker_server.py

    Пример команды запуска надо смотреть для релизов. Например, вот https://github.com/ClickHouse/ClickHouse/actions/runs/3647841745/jobs/6160549152#step:5:4

    Бинарь скачивается из s3 ниже, конкретно для коммита тега, https://github.com/ClickHouse/ClickHouse/actions/runs/3647841745/jobs/6160549152#step:5:1822 тут
    ClickHouse/docker_server.py at master · ClickHouse/ClickHouse

    ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    Странно, мне не пришло уведомление...
  • https://t.me/clickhouse_ru
    @xoradd #303133 04:02 AM, 09 Dec 2022
    Господа, вот раздумываю о том сделать поле String Nullable или не стоит.
    Для кликхауса что эффективнее работает:
    1) WHERE field_str IS NOT NULL
    2) WHERE length(field_str) != 0

    Даст ли профит optimize_functions_to_subcolumns = 1 ?
  • https://t.me/clickhouse_ru
    второе быстрее

    Null значения хранятся в отдельной битмаске в парте

    сравнение по битмаск сильно медленнее чем сравнение со скаляром
  • https://t.me/clickhouse_ru
    А разве клик не будет делать перебор всех значений из всех партов ? Потому что там используется длина String ?
  • подстроки в строках массива
  • https://t.me/clickhouse_ru
    так оно и в первом и во втором случае будет колонку вычитывать и сравнивать...
    не помню точно, но длина строки хранится в колонке...

    optimize_functions_to_subcolumns
    точно должен помочь
    да

    надо сравнить
  • https://t.me/clickhouse_ru
    https://pastila.nl/?00481a37/9f51ba935e44557fa1e1b20b8cdb1df7

    да, isNull с optimize самый быстрый
  • https://t.me/clickhouse_ru
    Ого, прикольно :) Но Null все равно плохо :)
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303138 #303140 06:23 AM, 09 Dec 2022
    Спс
  • https://t.me/clickhouse_ru
    @keksum666 #303142 08:54 AM, 09 Dec 2022
    Всем привет, можно как-то перенести данные с 1 сервера CH, на другой?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    Спасибо
  • https://t.me/clickhouse_ru
    Спасибо, всё ясно-понятно!
  • https://t.me/clickhouse_ru
    @1675646290 #303149 10:29 AM, 09 Dec 2022
    Добрый день. В логах встречаю такую ошибку при получении посылки от очереди с помощью таблицы с движком RabbitMQ. Информация из посылки успешно кладется в целевую таблицу. Хотелось бы узнать может у кого был опыт и поделится причиной этой ошибки в логах: <Error> void DB::StorageRabbitMQ::streamingToViewsFunc(): Code: 49. DB::Exception: Pos in empty own buffer: While executing RabbitMQ. (LOGICAL_ERROR)
  • https://t.me/clickhouse_ru
    @1675646290 #303150 10:30 AM, 09 Dec 2022
    версия клика 22.3.2.1
  • https://t.me/clickhouse_ru
    @xoradd #303151 10:31 AM, 09 Dec 2022
    Господа, ClickHouse в HTTP ответе возвращает такой хидер:

    x-clickhouse-summary: {.....,"result_rows":"0","result_bytes":"0"}

    result_rows и result_bytes всегда содержат ноль.
    И не могу по этим значениям найти информацию в документации.
    Может кто знает для чего эти поля?
  • https://t.me/clickhouse_ru
    @ya_griganton #303154 11:02 AM, 09 Dec 2022
    Всем привет! Подскажите пожалуйста, что делать если мутация залипла в обшибках, и kill mutation не отрабатывает за лимит своего времени?
  • https://t.me/clickhouse_ru
    @minto_o #303155 11:04 AM, 09 Dec 2022
    в SummingMergeTree или AggregatingMergeTree можно выполнить сумму, взяв знак с другой колонки?
    исходная таблица
    key, sign, value
    агрегированная
    key, sum(sign * value)
  • https://t.me/clickhouse_ru
    до 22.8 последней обновитесь
    https://github.com/ClickHouse/ClickHouse/issues/38061
    и проверьте что RabbitMQ вообще работает
    RabbitMQ engine and MsgPack: Pos in empty own buffer · Issue #38061 · ClickHouse/ClickHouse

    Faced with the following error when trying to use RabbitMQ engine and MsgPack codec: 2022.06.14 19:37:30.170094 [ 567510 ] {} <Error> void DB::StorageRabbitMQ::streamingToViewsFunc():...

  • https://t.me/clickhouse_ru
    Попробую
  • https://t.me/clickhouse_ru
    какая версия clickhouse?
    по идее это значения должны быть идентичны тому что в system.query_log вставляется по завершении вашего запроса
    https://clickhouse.com/docs/en/operations/system-tables/query_log/

    запррос у вас SELECT или какой то другой?
    query_log | ClickHouse Docs

    Contains information about executed queries, for example, start time, duration of processing, error messages.

  • https://t.me/clickhouse_ru
    ну вы как из исходной таблицы в аггрегированную лить собираетесь? если через MV, то на уровне селекта это домножение делайте. а если вы одну таблицу другой заменить хотите, то непонятно зачем вам в новой sign тогда, историчность изменений всё равно помёрджится
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303158 #303160 11:15 AM, 09 Dec 2022
    22.11.1.1360 (official build)
    В любых запросах нули
  • https://t.me/clickhouse_ru
    запрос какой ? SELECT или какой то другой?
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303161 #303162 11:16 AM, 09 Dec 2022
    в любых
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303158 #303163 11:19 AM, 09 Dec 2022
    кстати, принудительно я не включал вывод в хидеры summary
  • https://t.me/clickhouse_ru
    попробуйте ?send_progress_in_http_headers=1 в ваши запросы добавить
    https://clickhouse.com/docs/en/operations/settings/settings/#settings-send_progress_in_http_headers
    Settings | ClickHouse Docs

    allownondeterministicmutations

  • https://t.me/clickhouse_ru
    А как понять стримиться запрос или нет? Я правильно понимаю, что стриминг это когда данные от остальных нодов идут потоком и не ждут конца выполнения?
  • https://t.me/clickhouse_ru
    а вот не помню чтобы это было отключаемо вообще
  • https://t.me/clickhouse_ru
    не только от остальных нодов

    стримминг это когда не надо результаты буфферизировать для обработки в памяти а можно сразу клиенту отдать считая их на лету...

    обычноSELECT + GROUP BY / ORDER BY запросы это не стриминговые...
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303164 #303168 11:22 AM, 09 Dec 2022
    Не помогло!

    * Trying 127.0.0.1:8123...
    * Connected to 127.0.0.1 (127.0.0.1) port 8123 (#0)
    > POST /?send_progress_in_http_headers=1 HTTP/1.1
    > Host: 127.0.0.1:8123
    >
    < HTTP/1.1 200 OK
    < X-ClickHouse-Summary: {"read_rows":"2","read_bytes":"27","written_rows":"0","written_bytes":"0","total_rows_to_read":"2","result_rows":"0","result_bytes":"0"}
    <
    1
  • @5404883651 #303170 11:23 AM, 09 Dec 2022
    Теперь понятно почему мы проигрываем войну на Украине
  • https://t.me/clickhouse_ru
    а какой запрос то был??
    SELECT 1 ?

    и по вашему сколько там должно быть СТРОК
    и сколько по вашему там памяти должно выделяться?
  • https://t.me/clickhouse_ru
    В этом случае какой механизм срабатывания receive_timeout? Запрос он как был у нас с argMin (не стриминговый), так и остался, но почему-то стало по этому таймауту падать в 22.8.
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303171 #303173 11:24 AM, 09 Dec 2022
    SELECT pid FROM process WHERE name = \x27_XXX_\x27'

    Выдаёт 1 строку. В таблице всего 2 строки.
  • https://t.me/clickhouse_ru
    есть еще read_rows , result_rows почитайте что это значит в описании system.query_log в документации
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303174 #303175 11:26 AM, 09 Dec 2022
    read_rows = 2 , когда мне выдаёт всего 1 строку
  • https://t.me/clickhouse_ru
    нуда,чтобы вам выдать одну строк ( results_rows = 1) надо две строки прочитать (read_rows = 2)
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303176 #303177 11:28 AM, 09 Dec 2022
    Я понимаю.
    Но у меня FORMAT RowBinary и я хотел заранее знать сколько из body читать строк бинарных.
  • https://t.me/clickhouse_ru
    FORMAT RowBinary и прогресс в заголовках, две разные вообще части кода которые между собой никак не связаны =)
    по моему вам надо просто читать пока не кончится...
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303179 #303180 11:30 AM, 09 Dec 2022
    да вот так и буду сейчас делать
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303158 #303181 11:32 AM, 09 Dec 2022
    Хотя вот в доке явно написано следующее:

    result_rows (UInt64) — Number of rows in a result of the SELECT query, or a number of rows in the INSERT query.

    result_bytes (UInt64) — RAM volume in bytes used to store a query result.

    Печаль что это не так.
  • https://t.me/clickhouse_ru
    @Alexey_Cald #303182 11:39 AM, 09 Dec 2022
    При ребуте клика столкнулся с такой проблемой:
    2022.12.09 11:36:45.844547 [ 16376 ] {} <Trace> SystemLog (system.metric_log): Flushing system log, 8 entries to flush up to offset 542
    2022.12.09 11:36:45.855532 [ 16376 ] {} <Debug> DiskLocal: Reserving 1.00 MiB on disk `default`, having unreserved 39.22 GiB.
    2022.12.09 11:36:45.858385 [ 16376 ] {} <Trace> MergedBlockOutputStream: filled checksums 202212_72_72_0 (state Temporary)
    2022.12.09 11:36:45.859070 [ 16376 ] {} <Trace> system.metric_log: Renaming temporary part tmp_insert_202212_72_72_0 to 202212_713_713_0.
    2022.12.09 11:36:45.860304 [ 16376 ] {} <Trace> SystemLog (system.metric_log): Flushed system log up to offset 542
    И так вот делает 20-30 минут, вставки через http по одному, но асинхронные, версия клика 22.5
    Причем он всё это пихает в RAM и в итоге клик в "простое" занимает 3 ГБ оперативы

    Зачем он так?
  • https://t.me/clickhouse_ru
    у меня пустой кликхаус в докере 3гб занимает в оперативе
  • https://t.me/clickhouse_ru
    @Alexey_Cald #303184 11:42 AM, 09 Dec 2022
    Ну... Я понимаю, просто он раньше занимал 1Гб и после нескольких крашев (сломанные парты были) начал чудить
    + сам запуск, который занимает минут 20-30 это не очень хорошо имхо
  • https://t.me/clickhouse_ru
    @antoha_za_sho #303190 12:00 PM, 09 Dec 2022
    Привет. Вижу выше похожий вопрос. Есть аналогичная проблема. Развернули в кубе altinity кликхаус и он без нагрузки тоже выполняет эти же действия.
    2022.12.09 11:58:42.463028 [ 97 ] {} <Debug> DiskLocal: Reserving 1.00 MiB on disk `default`, having unreserved 9.42 GiB.
    2022.12.09 11:58:42.465635 [ 104 ] {} <Debug> system.asynchronous_metric_log (e31bbf3a-a7e3-4224-a58b-0319bcce9dee) (MergerMutator): Selected 6 parts from 202212_9294_9364_14 to 202212_9369_9369_0
    2022.12.09 11:58:42.465784 [ 104 ] {} <Debug> DiskLocal: Reserving 1.58 MiB on disk `default`, having unreserved 9.42 GiB.
    2022.12.09 11:58:42.466001 [ 54 ] {e31bbf3a-a7e3-4224-a58b-0319bcce9dee::202212_9294_9369_15} <Debug> MergeTask::PrepareStage: Merging 6 parts: from 202212_9294_9364_14 to 202212_9369_9369_0 into Wide
    2022.12.09 11:58:42.466224 [ 54 ] {e31bbf3a-a7e3-4224-a58b-0319bcce9dee::202212_9294_9369_15} <Debug> MergeTask::PrepareStage: Selected MergeAlgorithm: Horizontal
    2022.12.09 11:58:42.466333 [ 54 ] {e31bbf3a-a7e3-4224-a58b-0319bcce9dee::202212_9294_9369_15} <Debug> MergeTreeSequentialSource: Reading 96 marks from part 202212_9294_9364_14, total 776940 rows starting from the beginning of the part
    2022.12.09 11:58:42.467115 [ 54 ] {e31bbf3a-a7e3-4224-a58b-0319bcce9dee::202212_9294_9369_15} <Debug> MergeTreeSequentialSource: Reading 2 marks from part 202212_9365_9365_0, total 10928 rows starting from the beginning of the part
    2022.12.09 11:58:42.467357 [ 54 ] {e31bbf3a-a7e3-4224-a58b-0319bcce9dee::202212_9294_9369_15} <Debug> MergeTreeSequentialSource: Reading 2 marks from part 202212_9366_9366_0, total 10920 rows starting from the beginning of the part
    2022.12.09 11:58:42.467577 [ 54 ] {e31bbf3a-a7e3-4224-a58b-0319bcce9dee::202212_9294_9369_15} <Debug> MergeTreeSequentialSource: Reading 2 marks from part 202212_9367_9367_0, total 10920 rows starting from the beginning of the part
    2022.12.09 11:58:42.467789 [ 54 ] {e31bbf3a-a7e3-4224-a58b-0319bcce9dee::202212_9294_9369_15} <Debug> MergeTreeSequentialSource: Reading 2 marks from part 202212_9368_9368_0, total 10920 rows starting from the beginning of the part
    2022.12.09 11:58:42.468026 [ 54 ] {e31bbf3a-a7e3-4224-a58b-0319bcce9dee::202212_9294_9369_15} <Debug> MergeTreeSequentialSource: Reading 2 marks from part 202212_9369_9369_0, total 10920 rows starting from the beginning of the part
    2022.12.09 11:58:42.572969 [ 54 ] {e31bbf3a-a7e3-4224-a58b-0319bcce9dee::202212_9294_9369_15} <Debug> MergeTask::MergeProjectionsStage: Merge sorted 831548 rows, containing 5 columns (5 merged, 0 gathered) in 0.107039443 sec., 7768612.9215003485 rows/sec., 215.94 MiB/sec.
    2022.12.09 11:58:42.574789 [ 54 ] {} <Debug> MemoryTracker: Peak memory usage Mutate/Merge: 16.45 MiB.
    И постепенно заполняет таблицы system.trace_log system.asynchronous_metric_log system.metric_log, забивая диск. Что с этим можно сделать?
  • https://t.me/clickhouse_ru
    https://clickhouse.com/docs/en/operations/system-tables/

    Настроить ttl, перезапустить клик
    После этого он старые asynchronous_metric_log переименует в asynchronous_metric_log_0, новые уже будут обрезаться по ttl

    Если не жалко, старые можно удалить

    Клик по дефолту не ограничивает размер системных лог таблиц
  • https://t.me/clickhouse_ru
    можно отключить эти таблицы через
    spec:
    configuration:
    files;
    turn_off_tables.xml:|
    содержимое взять из https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-system-tables-eat-my-disk/
  • https://t.me/clickhouse_ru
    @antoha_za_sho #303193 12:33 PM, 09 Dec 2022
    Благодарю
  • https://t.me/clickhouse_ru
    @Alexey_Cald #303194 12:33 PM, 09 Dec 2022
    Вопрос, можно ли как-то зафорсить клик удалить неактивные парты?
    У меня их 40к (не знаю как так получилось) примерно по 2к строк в каждой

    Пытался через optimize final, не получается

    Или можно ли их ручками удалить?
  • https://t.me/clickhouse_ru
    @Omega515 #303195 12:45 PM, 09 Dec 2022
    добрый день. какие условния на имена таблиц в клике?
  • https://t.me/clickhouse_ru
    Когда пытаюсь сделать detach part пишет
    Code: 232. DB::Exception: No part 20220822_5339825_5344853_3866 in committed state. (NO_SUCH_DATA_PART) (version 22.5.1.2079 (official build))
  • https://t.me/clickhouse_ru
    DEACH PART только на active=1 парты действует
  • https://t.me/clickhouse_ru
    подождите 480 секунд, удалятся сами...
  • https://t.me/clickhouse_ru
    Понял, а как тогда удалить active=0 парты, если их 40тыщ?
  • https://t.me/clickhouse_ru
    Они уже 4 месяца там сидят ) Вроде
  • @drg12345678 #303201 12:51 PM, 09 Dec 2022
    добрый день. вопрос по агг-функциям. хочется странного: узнать уникально ли значение столбца в агрегируемом подмножестве.

    что-то вроде count(distinct x) = 1, но чтобы не взрывался по памяти на большой кардинальности, потому что насколько именно больше одного не имеет значения. на данный момент запрос целиком выглядит примерно вот так (сделан через topK(2)(...)):

    https://pastila.nl/?01e6e7ff/0ba60d47d7ae1c93fcc746f303c7aa00

    еще в рассмотрении`groupUniqArray(2)(...)`, судя по описанию, он не должен использовать кучу памяти
    есть более оптимальные варианты?
  • https://t.me/clickhouse_ru
    если новые постоянно появляются. то увеличивайте кол-во строк на один INSERT (реже вставляйте например больше кол-во)
  • https://t.me/clickhouse_ru
    @Alexey_Cald #303203 12:51 PM, 09 Dec 2022
    remove_time 2022-08-23 03:10:22
  • https://t.me/clickhouse_ru
    если имя_таблицы в backtrace кавычках вот таких `
    то там полноценный UTF даже возможен
    на диске это все в URL Encode преобразуется

    ну и еще ограничено все длиной имени пути файла в файловой системе, так что сильно длинные не надо делать

    но чтобы вам спалось спокойнее, лучше тупо символ подчеркивания и латинские буквы с арабскими цифрами использовать
  • https://t.me/clickhouse_ru
    спасибо!
  • https://t.me/clickhouse_ru
    а что у вас стоит в
    SELECT * FROM system.merge_tree_settings WHERE name='old_parts_lifetime'?
  • https://t.me/clickhouse_ru
    name old_parts_lifetime
    value 480
    changed 0
    description How many seconds to keep obsolete parts.
    type Seconds
  • https://t.me/clickhouse_ru
    очень странно

    >Inactive parts are removed if they are not used by current queries

    у вас там никаких мутаций или еще чего то такого нет?

    SELECT count() FROM system.mutations WHERE is_done=0 ?

    через lsof
    можете посмотреть на файлы партов, они открыты из clickhouse-server процесса?
  • https://t.me/clickhouse_ru
    Я сейчас запустил optimize final для партиции, он собрал все 138 неактивных партов в этой партиции в один большой неактивный парт...
  • https://t.me/clickhouse_ru
    вы же сказали что у вас там их 40 тыщ, откуда теперь 138 ?
  • https://t.me/clickhouse_ru
    При этом он не удалил эти 138 неактивных партов
  • https://t.me/clickhouse_ru
    Это по всем партициям
  • https://t.me/clickhouse_ru
    >Inactive parts are removed if they are not used by current queries

    может их читает все еще кто-то ?
  • https://t.me/clickhouse_ru
    Мутаций нет
  • https://t.me/clickhouse_ru
    какая версия clickhouse-server?
    имеет смысл попробовать рестартовать сервер

    еще может у вас кто-то сделал SYSTEM STOP MERGES

    попробуйте SYSTEM STOP MERGES db.table; и тут же SYSTEM START MERGES db.table; сделать?
  • https://t.me/clickhouse_ru
    Версия 22.5.1

    Рестартовал, и там при рестарте он 30 минут мурыжит какие-то tmp_insert

    Сейчас попробую
  • https://t.me/clickhouse_ru
    Вот это он пишет минут 30
  • https://t.me/clickhouse_ru
    обновитесь до 22.8 хотя бы
  • https://t.me/clickhouse_ru
    Полученный большой парт, который получился после optimize, он удалил ))
    Мелкие парты так и остались
  • https://t.me/clickhouse_ru
    ну ... у вас что-то не то с таблицей, откуда то куча незавершенных insert в системную таблицу

    SELECT uuid FROM system.tables WHERE database='system' AND table='metric_log'
    systemctl stop clickhouse-server
    и удалите
    /var/lib/clickhouse/store/<XX префикс от uuid из SQL запроса>/<uuid из SQL запроса>

    ну или без рестарта попробуйте

    TRUNCATE TABLE system.metric_log SYNC;
  • https://t.me/clickhouse_ru
    что-то должен был сказать по этому поводу в логах
  • https://t.me/clickhouse_ru
    а какая таблица то ? system.metric_log ?
  • https://t.me/clickhouse_ru
    uuid 00000000-0000-0000-0000-000000000000 это норм?
  • https://t.me/clickhouse_ru
    Нет, обычная таблица, AggregatedMergeTree
  • https://t.me/clickhouse_ru
    В том плане, что не системная
  • https://t.me/clickhouse_ru
    это НОРМ, если таблица в базе у которой Engine Ordinary

    в 22.5 system база должна быть Atomic насколько я помню

    SELECT engine, name FROM system.databases;
  • https://t.me/clickhouse_ru
    В логах там же кошмар творится, все время какие-то записи идут и как среди этого искать то, что нужно я не знаю
  • https://t.me/clickhouse_ru
    Да, там Atomic
  • https://t.me/clickhouse_ru
    ну grep имя_вашей таблицы /var/log/clickhouse-server/clickhouse-server.err.log для начала
  • https://t.me/clickhouse_ru
    Нет, обманул, system там Ordinary
  • https://t.me/clickhouse_ru
    где Atomic ? в базе где у вас таблица с uuid=00000-... ?
  • https://t.me/clickhouse_ru
    А в таблице с uuid=000 Atomic
  • https://t.me/clickhouse_ru
    покажите точно запросы и результаты как есть на pastila.nl выложите
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    а теперь запрос и результат где uuid 00000 ?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    А вот там, где куча мертвых партов
    https://pastila.nl/?00585198/cc5c3180eddd320190978bc4a9d7ad66
  • https://t.me/clickhouse_ru
    это ок. system.metric_log лежит в Ordinary так что такой и должен быть uuid

    можете его почистить через TRUNCATE TABLE system.metric_log SYNC
  • https://t.me/clickhouse_ru
    тут тоже все ок

    и вот в этом сообщении видимо вы ерунду написали тогда
    https://t.me/clickhouse_ru/303232
    Alexey in ClickHouse не тормозит

    А в таблице с uuid=000 Atomic

  • https://t.me/clickhouse_ru
    Ааа, всё, кажется понял
    Не хватает RAM для мержа
    2022.12.09 13:16:58.938215 [ 16332 ] {} <Error> void DB::MergeTreeBackgroundExecutor<DB::MergeMutateRuntimeQueue>::routine(DB::TaskRuntimeDataPtr) [Queue = DB::MergeMutateRuntimeQueue]: Code: 241. DB::Exception: Memory limit (total) exceeded: would use 3.46 GiB (attempt to allocate chunk of 4219524 bytes), maximum: 3.46 GiB. (MEMORY_LIMIT_EXCEEDED), Stack trace (when copying this message, always include the lines below):
  • https://t.me/clickhouse_ru
    Это из логов ошибок
  • https://t.me/clickhouse_ru
    Да, я там уже начал путаться
  • https://t.me/clickhouse_ru
    @BarVadim #303243 01:20 PM, 09 Dec 2022
    Добрый день, возможно ли как-нибудь удалить через запрос backup?
    создавался "... Disk('backups', 'legacy_db.zip')"
  • Вот это мой случай с кучей неактивных партов. Они появляются после рестарата КХ и висят вечно. Помог апдейт 2.5.1 - 2.5.4.19. сами выпилились
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303164 #303245 01:21 PM, 09 Dec 2022
    Нашёл как заставить правильно работать: https://github.com/ClickHouse/ClickHouse/pull/39567
    Нужно активировать wait_end_of_query
    Add result_rows and result_bytes to progress reports by Algunenano · Pull Request #39567 · ClickHouse/ClickHouse

    Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Add result_rows and result_bytes to progress reports (X-...

  • https://t.me/clickhouse_ru
    Понял, попробуй, спасибо
  • https://t.me/clickhouse_ru
    пичалька

    словари есть какие то ?
    сколько всего RAM?

    можете временно все SELECT стопнуть с сервера (firewall наружу 9000 и 8123 порт например закрыть или listen_host поставить только 127.0.0.1 )?
  • https://t.me/clickhouse_ru
    Словари мелкие, RAM... 4GB... да, тяжело )))
  • https://t.me/clickhouse_ru
    А там и так все стопнуто наглухо
  • https://t.me/clickhouse_ru
    Там при запуске КХ вот эти tmp_insert забивают 2ГБ оперативы и висят
  • https://t.me/clickhouse_ru
    https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-who-ate-my-memory/

    вот тут еще посмотрите может найдете что жрет память...
  • https://t.me/clickhouse_ru
    Понял, спасибо большое!
    Сначала попробую сделать апдейт клика, а уже потом посмотрим что и как будет
  • https://t.me/clickhouse_ru
    Говорят, что починится )
  • https://t.me/clickhouse_ru
    Есть ограничение на длину имени таблицы, оно соответствует максимальной длине название папки в linux
  • https://t.me/clickhouse_ru
    @Omega515 #303255 01:34 PM, 09 Dec 2022
    ок
  • https://t.me/clickhouse_ru
    @chAlx314 #303256 01:37 PM, 09 Dec 2022
    А есть такая оптимизация повторной вставки, которая мешает сработать триггеру?

    У меня основная вставка во вспомогательную таблицу (ReplicatedReplacingMergeTree), а из неё MATERIALIZED VIEW переносит данные в основную, с джойном дополнительных атрибутов. Когда этот джойн падает по памяти, остаётся порция данных во вспомогательной таблице, которая не попадает в основную. И повторные вставки во вспомогательную как-будто вообще не выполняются, просто по-быстрому успешно завершаются.

    При том в логе у нормальной вставки параметры такие:
    query_duration_ms: 7390
    read_rows: 903
    written_rows: 1806
    memory_usage: 886589322

    А после сбоя (повторные вставки той же порции данных, которая уже есть во вспомогательной таблице, но нет в основной):
    query_duration_ms: 260
    read_rows: 871
    written_rows: 871
    memory_usage: 26778155
  • https://t.me/clickhouse_ru
    хороший вопрос кстати, тоже интересно
  • https://t.me/clickhouse_ru
    @m1khal3v #303258 01:38 PM, 09 Dec 2022
    знаю что есть дедубликация, интересно как она дружит с MV недоработавшими из-за ООМ
  • https://t.me/clickhouse_ru
    если данные повторно вставляются как есть, то есть тот же самый блок, тогда идед дедупликация по контрольным суммам блоков для ReplicatedMergeTree

    зачем вам дубли данных?
  • https://t.me/clickhouse_ru
    @BarVadim #303260 01:39 PM, 09 Dec 2022
    Добрый день, возможно ли как-нибудь удалить через запрос backup?
    создавался .. Disk('backups', 'legacy_db.zip')
  • https://t.me/clickhouse_ru
    если я правильно понял, то схема такая

    T1 -> MV -> T2

    если запрос упал по памяти при работе MV, то в Т1 данные есть, а в Т2 их нет. при повторной вставке в Т1 дедубликация не пропустит данные в Т1, а до MV и Т2 они доедут?
  • https://t.me/clickhouse_ru
    @keksum666 #303262 01:41 PM, 09 Dec 2022
    Всем привет, можно ли как-то посмотреть какие проекции (PROJECTION) есть у таблицы?
  • https://t.me/clickhouse_ru
    да
  • https://t.me/clickhouse_ru
    пока нельзя к сожалению

    можете создать issue На github

    ну или https://github.com/Altinity/clickhouse-backup/
    попробовать
    GitHub - Altinity/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages support

    Tool for easy ClickHouse backup and restore with cloud storages support - GitHub - Altinity/clickhouse-backup: Tool for easy ClickHouse backup and restore with cloud storages support

  • https://t.me/clickhouse_ru
    SHOW CREATE TABLE они там отображаются
  • https://t.me/clickhouse_ru
    Спасибо!
  • https://t.me/clickhouse_ru
    @troglodytes_troglodytes #303267 02:05 PM, 09 Dec 2022
    Здравствуйте! Может кто помочь как дублировать таблицу в Кликхаусе? Гуглю не нахожу
  • https://t.me/clickhouse_ru
    @lgtwb ↶ Reply to #303267 #303268 02:07 PM, 09 Dec 2022
    INSERT INTO SELECT FROM
  • https://t.me/clickhouse_ru
    @lgtwb #303269 02:08 PM, 09 Dec 2022
    Либо clickhouse-copier
  • https://t.me/clickhouse_ru
    Обновление с 22.5.1 до 22.5.4.19 помогло
    Он после рестарта клика прочитал все эти парты и после того как всё прочитал сразу же удалил их
  • https://t.me/clickhouse_ru
    Помогло, спасибо! )
  • https://t.me/clickhouse_ru
    @troglodytes_troglodytes #303272 02:17 PM, 09 Dec 2022
    а есть способ дропнуть дубликаты в таблице? гуглю и нашел только лишь один способ:

    OPTIMIZE TABLE table DEDUPLICATE BY name

    но он требует чтобы после BY были другие колонки, чем мне нужно
  • https://t.me/clickhouse_ru
    Дубли-то в промежуточной таблице, которая вообще должна переехать на движок null. А в основной данных нет.

    Вот нашёл опцию deduplicate_blocks_in_dependent_materialized_views, вроде как ровно про этот случай.
  • https://t.me/clickhouse_ru
    Ты хочешь по всем колонкам или как?
  • https://t.me/clickhouse_ru
    к сожалению нормального способа кроме
    SHOW CREATE TABLE db.name;
    нет
  • https://t.me/clickhouse_ru
    Есть CREATE TABLE new_table AS existing_table и CREATE TABLE new_table AS SELECT ...
  • https://t.me/clickhouse_ru
    @nataschachu #303277 02:32 PM, 09 Dec 2022
    Привет! Подскажите, пожалуйста, может ли тип данных поля, по которому строится индекс, влиять на скорость выполнения селектов с фильтрацией по этому индексу? Я экспериментирую и попробовала сделать таблицу с order by userTimestamp (тип данных DateTime64(3)) и простой селект по userTimestamp за один день работает сильно дольше, чем аналогичная таблица, но с order by timestamp (тип данных DateTime).
  • https://t.me/clickhouse_ru
    Очень вряд ли.
    Размер типа, конечно, влияет на размер "индекса" (и т.о. потребление памяти, диска и т.п.) Но в таких масштабах это не должно быть заметно.

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

    (Ну либо есть какая-то супероптимизация для DateTime.)
  • https://t.me/clickhouse_ru
    @troglodytes_troglodytes #303279 02:49 PM, 09 Dec 2022
    Попробовал удалить дубли по дате командой:

    ALTER TABLE capacity_planning.service_metrics DELETE WHERE
    (SELECT row_number() OVER ( PARTITION BY date_utc)
    FROM capacity_planning.service_metrics) != 1

    но ничего не удаляется. может кто обьяснить почему?
  • https://t.me/clickhouse_ru
    @den09 ↶ Reply to #303279 #303280 02:55 PM, 09 Dec 2022
    Удаление происходит не моментально, в system.mutations вроде можно понять состояние мутации
  • https://t.me/clickhouse_ru
    Выдачу подзапроса проверьте, возможно row_number везде 1 выдаёт, он в clickhouse не совсем ожидаемо работает(внутри блока считает)
  • https://t.me/clickhouse_ru
    Селект 300к строк по 4 столбцам из 1кк строк с фильтром по DateTime у меня заняло ~70мс, по DateTime64(3) ~50мс
  • https://t.me/clickhouse_ru
    + запрос не очень понятно написан, какое логическое условие в него закладываете?
  • https://t.me/clickhouse_ru
    @troglodytes_troglodytes #303284 03:03 PM, 09 Dec 2022
    дропнуть те строки где оконная функция не равна 1
  • https://t.me/clickhouse_ru
    @troglodytes_troglodytes #303285 03:05 PM, 09 Dec 2022
    мы делаем партицию по дате и проходимся оконкой row_number, там где не 1 - дубликат
  • https://t.me/clickhouse_ru
    @troglodytes_troglodytes #303286 03:05 PM, 09 Dec 2022
    @philipbu
  • https://t.me/clickhouse_ru
    а покажите create table :) ?
  • https://t.me/clickhouse_ru
    спасибо, попробую еще)
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    спасибо)
  • https://t.me/clickhouse_ru
    Имхо count() маловато, оно вообще может внутрь данных не влезать. Я бы брал какой-нибудь avg(group_id).
    Но по-сути результат будет такой же :)
  • https://t.me/clickhouse_ru
    @nataschachu #303292 03:11 PM, 09 Dec 2022
    ага у меня там 1.64 billion строк
  • https://t.me/clickhouse_ru
    Если так, то надо, чтобы было условие на вхождение записей таблицы в подзапрос, а сейчас вывод подзапроса просто сравнивается с 1
  • https://t.me/clickhouse_ru
    Да это я случайно вставил код с count(), а так я использовал * и потом по query_log считал время обработки запроса
  • https://t.me/clickhouse_ru
    Делал по 5 запросов на таблицу и считал среднее время
  • https://t.me/clickhouse_ru
    @nataschachu #303296 03:13 PM, 09 Dec 2022
    а как кеш работает? я вижу, что на холодную запрос сильно дольше отрабатывает
  • https://t.me/clickhouse_ru
    @nataschachu #303297 03:13 PM, 09 Dec 2022
    как кеш почистить?
  • https://t.me/clickhouse_ru
    @kobzevvv #303298 03:14 PM, 09 Dec 2022
    подскажите есть функция которая вернет тип колонки?
  • https://t.me/clickhouse_ru
    SYSTEM DROP MARK CACHE
  • https://t.me/clickhouse_ru
    @nataschachu #303300 03:14 PM, 09 Dec 2022
    мерси
  • https://t.me/clickhouse_ru
    toTypeName
  • https://t.me/clickhouse_ru
    Может вам просто replacingmergetree с ключом date_utc поможет?
    Это будет делать схлопывание соответствующее ожиданиям более стандартным способом
  • https://t.me/clickhouse_ru
    потестили с этой настройкой? если я правильно понял то =1 включает дедубликацию на уровне MV, чтобы данные не тормозились на уровне T1
  • https://t.me/clickhouse_ru
    Зайди в system.mutations и найди свою мутацию, либо она еще не выполнилась, либо там ошибка при мутации
  • https://t.me/clickhouse_ru
    Да, я так тоже понял, что это ровно мой случай.
    Но пока не протестил. Думаю, как лучше поступить в пятницу: дождаться очередного сбоя в проде или вызывать его :)
  • https://t.me/clickhouse_ru
    Спойлер: там ошибка )
  • https://t.me/clickhouse_ru
    По-крайней мере, простое добавление SETTINGS deduplicate_blocks_in_dependent_materialized_views=1 в INSERT не помогло. (Может, v20.5 для этого старовата... Но настройка есть.)

    @m1khal3v
  • https://t.me/clickhouse_ru
    Кажется ты не мне это писал )
  • https://t.me/clickhouse_ru
    Всё, теперь ты реплицированные MV проверяешь!

    (Да, промахнулся. Спасибо.)
  • https://t.me/clickhouse_ru
    Ну блииин, уже конец пятницы, можно не надо? )
  • https://t.me/clickhouse_ru
    uniqUpTo(1)(x)
  • @gbZIaJfYsf68265 #303312 03:41 PM, 09 Dec 2022
    Почта Банк выплачивает по 3000 руб всем своим клиентам которые прошли опрос и оставили отзыв о работе банка.
    Доступно всем действующим клиентам.

    Акция проводится на официальном сайте - link
  • @pARCVkqEyJ14193 #303313 03:41 PM, 09 Dec 2022
    Почта Банк выплачивает по 3000 руб всем своим клиентам которые прошли опрос и оставили отзыв о работе банка.
    Доступно всем действующим клиентам.

    Акция проводится на официальном сайте - link
  • большое спасибо 🙏
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    для истории напишу: преступление раскрыто - я не поменяла полечко в partiotion by. Нужно, чтобы order by, partiotion by содержали одно и то же поле обязательно
  • https://t.me/clickhouse_ru
    это правда тест про токен. вот тест про сабж

    https://github.com/ClickHouse/ClickHouse/blob/71fb04ea4ad17432baba7934a10217f5f6a1bde3/tests/integration/test_force_deduplication/test.py
    ClickHouse/test.py at 71fb04ea4ad17432baba7934a10217f5f6a1bde3 · ClickHouse/ClickHouse

    ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    Точно, SET работает. Спасибо!
  • https://t.me/clickhouse_ru
    круто, у себя тоже теперь включим)
  • https://t.me/clickhouse_ru
    @nazevg #303322 05:05 PM, 09 Dec 2022
    Привет! Смотрите, хочу сделать бенчмарк INSERT, но почему-то не выходит. Может кто подскажет?
  • https://t.me/clickhouse_ru
    @Fearan #303323 05:40 PM, 09 Dec 2022
    Джентльмены, прощу прощения за идиотский вопрос.
    А как можно из результата

    select * from file('lala.tsv', 'TabSeparatedWithNames') ;


    сделать нормальную таблицу, без явного create table?
  • @5921094816 #303326 07:58 PM, 09 Dec 2022
    ⛔Набираем еще один поток в команду для арбитража криптовалюты⛔

    Преподавательский состав - это опытнейшие известные специалисты‼

    ⛔Абсолютно понятная новая тема с высокой доходностью даже для новичков⛔

    🗣Не берём денег за курс - всего лишь незначительный процент с вашего дальнейшего дохода‼

    А еще мы научим торговать альткоинами и картинками NFT☑

    Даже если у вас нулевые знания, мы всему научим

    Писать в личку: @AntoNArbitra

    ☑Ничего оплачивать не надо, только процент с вашего будущего дохода, после того как всему научишься💰
  • https://t.me/clickhouse_ru
    @combot #303328 b o t 08:11 PM, 09 Dec 2022
    Total messages: 303327
  • @furstim #303331 10:16 PM, 09 Dec 2022
    Приветствую!
    Может кто-нибудь сталкивался с тем что grouping sets не работает нормально с функцией max?

    https://fiddle.clickhouse.com/5ea6a194-4097-4905-9861-5dbc39036855

    В примере два запроса, в обоих есть по два сета группировки
    Пустой () и альтернативный (*) для А и (uid, name) для B

    Казалось бы, пустой сет должен показать одинаковые значения для обоих запросов, но нет
    Для обоих запросов одинаково правильно работает count, sum и даже groupArray, но функция max в запросе А возвращает дефолтные значения, а в B, о чудо, работает корректно...

    Буду признателен если кто-нибудь подскажет в чем может быть проблема
  • 10 December 2022 (26 messages)
  • @vialorn #303333 11:04 AM, 10 Dec 2022
    здравствуйте. столкнулись с проблемой. версия 21.12. в кафку, которую читаем Engine=Kafka + Mat.View, прилетели кривые данные для столбца партиционирования, в логе поток ошибок вида <Error> executeQuery: Code: 252. 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). (TOO_MANY_PARTS) (version 21.12.3.32 (official build)) (from 10.35.28.8:42358) (in query: INSERT INTO ... (...l) VALUES). в определение MV добавили WHERE, откидывающий записи с кривыми данными. отключали Engine=Kafka + Mat.View, пересоздавали их, выполнили detach-attach самой ReplicatedMergeTree таблицы - ошибки не уходят. как будто где-то внутри ClickHouse сохраняются куски битых данных, которые он продолжает пытаться вставить. как всё же помощь серверу про эти данные забыть?
  • @vialorn #303334 11:35 AM, 10 Dec 2022
    пробовал установить max_partitions_per_insert_block в значение 300 в <profiles><default>, но, судя по логам - эффект нулевой.
  • https://t.me/clickhouse_ru
    Нужно попробовать понять какое количество партиций образуется при инсерте, и либо увеличить max_partitions_per_insert_block до этого значения, либо каким-то образом уменьшить кол-во партиций
  • Подскажите, средствами чего можно попробовать понять? Вчера споткнунлись о нечто подобное, правда пробовали .tsv’шку залить и какая-то чась даже заливается
  • @segaRock #303337 12:46 PM, 10 Dec 2022
    Мы правда проблему эту решали выставление в ноль для max_partitions_per_insert_block
  • https://t.me/clickhouse_ru
    можно попробовать таблицу приёмник на время сделать без партиционирования, и после нескольких вставок посчитать колличество партов, которое бы получилось если бы партизионирование в таблице было
  • https://t.me/clickhouse_ru
    @269917803 #303339 12:51 PM, 10 Dec 2022
    можно укрупнить партиционирование, например если сделано по дням, то переделать на месяцы и т.п.
  • оказалось, неправильно эту настройку прописывали, поэтому и эффекта не было. по привычке в файл в каталоге config.d прописывали, а нужно было в каталоге users.d.
  • @vialorn #303341 01:00 PM, 10 Dec 2022
    сейчас подняли max_partitions_per_insert_block до 2000 (1000 оказалось мало), ошибки ушли, наблюдаем.
  • кстати да, тоже сразу не там писали
  • @segaRock #303343 01:00 PM, 10 Dec 2022
    надо в users
  • @segaRock #303344 01:05 PM, 10 Dec 2022
    Кстати вопрос уже наверняка обсуждался в этом чате, но может кто сходу подскажет, переезд с single node clickhouse (with MergeTree) на cluster (with ReplicatedMergTree) кто как готовить умеет? сlickhouse-copier например? или как проще быстрее и надёжнее?
  • https://t.me/clickhouse_ru
    если кластер - clickhouse-copier. Если не хотите через утилиту или у вас старая версия КХ, - тут только скрипт по конвертированию таблицы в реплицированную + attach партиций к новой таблице.
  • Спасибо! Скрипт самому придётся сочинять или есть какие-то экзамплы?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @critskiy #303348 01:13 PM, 10 Dec 2022
    Основывайтесь на этом решении
  • @segaRock #303349 01:13 PM, 10 Dec 2022
    ок! грасиас
  • https://t.me/clickhouse_ru
    Ещё можно сделать в кластере insert into select from remote(single node)
  • Так и сделали

    1. Создали нужные таблицы в кластере уже с ReplicatedMergeTree;
    2. создали нужные таблицы с полями;
    3. Перелили дату
    clickhouse-client --host <src_host> --port 9000 --password <'your_password'> --query "SELECT * FROM <db_name>.<table_name> FORMAT CSV" | clickhouse-client --host <dst_host> --password <'your_password'> --query "INSERT INTO <db_name>.<table_name> FORMAT CSV”

    Но печему-то везде это процесс описсан как-то через чур замысловато, а тут изи всё оказывается
  • https://t.me/clickhouse_ru
    Ну конкретно так я несколько раз натыкался на разрыв соединения, а если лить через функцию remote - все хорошо. Но энивей если уже прошло - значит все ок
  • https://t.me/clickhouse_ru
    @nordluf #303353 05:22 PM, 10 Dec 2022
    (правда у меня данных копеечно, десятки терабайт)
  • Это объясняет )
  • так то у нас изначально воникла проблемка типа

    Code: 252. DB::Exception: Too many partitions for single INSERT block

    починили добавлением <max_partitions_per_insert_block>0</max_partitions_per_insert_block> в users
  • а функция remote поудобнее? или просто надёжнее?

    не совсем понятно, что за функция - это нативный функционал?
  • https://t.me/clickhouse_ru
    remote, remoteSecure | ClickHouse Docs

    Allows accessing remote servers, including migration of data, without creating a Distributed table. remoteSecure - same as remote but with a secured connection.

  • Благодарочка
  • 11 December 2022 (42 messages)
  • https://t.me/clickhouse_ru
    @MakeReady #303362 12:14 PM, 11 Dec 2022
    Добрый день!
    Прошу прощения, туплю
    два идентификатора в одной таблице могут быть отдельно или парой
    во второй соответствие может быть с разными статусами
    как выбрать только максимально заполненный вариант?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303362 #303364 12:20 PM, 11 Dec 2022
    я бы попробовал макс-на-тупл - max((user_id,status)) или даже argMax(id,(user_id,status)), но вы не дали данных в fiddle, чтобы проверить.
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @MakeReady #303366 12:30 PM, 11 Dec 2022
    первая - транзакции, вторая - результат транзакций
    но в первой два внешних ключа которые могут быть по отдельности или вместе
  • https://t.me/clickhouse_ru
    @MakeReady #303367 12:31 PM, 11 Dec 2022
    пока кажется проще выкинуть из результата идентификатор транзакции и взять max по всем трем полям
  • https://t.me/clickhouse_ru
    @MakeReady #303368 12:32 PM, 11 Dec 2022
    или по id nj;t dpznm vfrc
  • https://t.me/clickhouse_ru
    @MakeReady #303369 12:32 PM, 11 Dec 2022
    SELECT max(f.id) id, max(f.account_id) account_id, max(f.user_id) user_id, max(fm.status) status
  • https://t.me/clickhouse_ru
    @MakeReady #303370 12:42 PM, 11 Dec 2022
    взял от всего макс
  • https://t.me/clickhouse_ru
    @MakeReady #303372 01:07 PM, 11 Dec 2022
    был не прав )
  • https://t.me/clickhouse_ru
    @MakeReady #303373 01:25 PM, 11 Dec 2022
    не подходит
  • https://t.me/clickhouse_ru
    @bvt123 #303374 01:34 PM, 11 Dec 2022
    У меня все получается, в том как я вас понял https://fiddle.clickhouse.com/8a11fe79-929c-4e05-ace2-21967366556e если нужно чтото иное - поясните
  • https://t.me/clickhouse_ru
    пытаюсь понять )
  • https://t.me/clickhouse_ru
    не, несколько не то
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @MakeReady #303380 02:14 PM, 11 Dec 2022
    в первой таблице может быть либо id1 либо id2 либо оба. Мне нужно по максимуму, и самый заполненный статус
  • https://t.me/clickhouse_ru
    @MakeReady #303381 02:15 PM, 11 Dec 2022
    впрочем ладно, мне сами идентификаторы не обязательно, попробую подзапросом или окном просто посчитать количество
  • https://t.me/clickhouse_ru
    INNER JOIN
  • https://t.me/clickhouse_ru
    нелья
    у меня есть все транзакции, и только часть из них связана по одному из двух (или по обоим) идентификатору с таблицей статусов. Если статуса нет, то эта транзакция должна остаться в выборке, просто с нулом в поле.
  • https://t.me/clickhouse_ru
    @MakeReady #303384 02:45 PM, 11 Dec 2022
    в общем пока я просто сделал два LEFT JOIN который выбирают id1, max(status) и еще один который id2,max(status), а снаружи я делаю coalsec(id1,id2),coalsec(status,status)
  • https://t.me/clickhouse_ru
    @MakeReady #303385 02:45 PM, 11 Dec 2022
    с алиасами конечно
  • https://t.me/clickhouse_ru
    @alexlighting #303386 02:46 PM, 11 Dec 2022
    Если если ифами каждое поле привести 1 если но не Null
  • https://t.me/clickhouse_ru
    @alexlighting #303387 02:46 PM, 11 Dec 2022
    и потом суммировать все поля в последнем
  • https://t.me/clickhouse_ru
    @alexlighting #303388 02:46 PM, 11 Dec 2022
    и сортировать по нему?
  • https://t.me/clickhouse_ru
    @alexlighting #303389 02:47 PM, 11 Dec 2022
    if (FIELD1, 1, 0) as FIELD1_
    ...
    FIELD1_ + FIELD2_ ... AS sum
    Order by sum DESC
  • https://t.me/clickhouse_ru
    @alexlighting #303390 02:48 PM, 11 Dec 2022
    Тогда по идее в топе будут самые заполненные наборы
  • https://t.me/clickhouse_ru
    @MakeReady #303391 02:49 PM, 11 Dec 2022
    можно и так, но мне же по нему соединение делать
  • https://t.me/clickhouse_ru
    @MakeReady #303392 02:50 PM, 11 Dec 2022
    и что тогда, типа если sum = 1+id1 OR sum = id2+1
    можно не те эквиваленты схлопотать
  • https://t.me/clickhouse_ru
    @alexlighting #303393 02:50 PM, 11 Dec 2022
    Так это другое поле будет
  • https://t.me/clickhouse_ru
    @alexlighting #303394 02:51 PM, 11 Dec 2022
    Вы можете сами свои веса задать и на основе их строить сортировку
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @MakeReady #303396 02:57 PM, 11 Dec 2022
    вот для финальный
    (2,15)(5,2)
    мне для первой надо найти статус по первой 2 а для второй пары по второй 2
  • https://t.me/clickhouse_ru
  • @nomercy_ls #303401 09:08 PM, 11 Dec 2022
    Всем доброго времени суток. Вопрос не на решение проблемы,
    -- Code: 184. DB::Exception: Aggregate function argMax(field2, timestamp) is found
    -- in WHERE in query: While processing argMax(field2, timestamp).
    -- (ILLEGAL_AGGREGATION) (version 22.9.3.18 (official build))
    SELECT
    CAST(alias.id, 'UInt32') AS id,
    CAST(argMax(alias.field1, alias.timestamp), 'Int64') AS field
    , CAST(argMax(alias.field2, alias.timestamp), 'Float32') AS field2
    FROM t alias
    PREWHERE
    alias.field1 = 500 AND
    alias.field2 BETWEEN 500 AND 600
    GROUP BY alias.id;
    Вот на такую ошибку уже есть фикс от разработчиков, или может быть хотя бы уже Issue кто-то создал? Просто конкретно эта ошибка порядком 3ае6**а. Если у кого есть информация как это пофиксить без обновлений или ожиданий оных, то буду премного благодарен
  • https://t.me/clickhouse_ru
    @cmbcksrl #303402 09:18 PM, 11 Dec 2022
    У вас наверное алиас поверх аргмакса, который совпадает с полем в фильтрации
  • https://t.me/clickhouse_ru
    @cmbcksrl #303403 09:19 PM, 11 Dec 2022
    Можете для таблицы в FROM задать алиас и через него поле в фильтрации задать
  • https://t.me/clickhouse_ru
    @cmbcksrl #303404 09:20 PM, 11 Dec 2022
    Типа вот не так
    FROM table
    WHERE field

    А так
    FROM table t
    WHERE t.field
  • @nomercy_ls #303405 09:25 PM, 11 Dec 2022
    Ну в коде я так и делаю, собственно говоря. Я для работы использую алиас таблицы, но эта падла его опускает, в ошибке белым по красному написано, что существующие колонки это: CAST(id, ...), CAST(argMax(field1, timestamp), ...), CAST(argMax(field2, timestamp)), алиасы колонок вывода, алиас таблицы он в упор не видит и не хочет. И ладно, с where ещё можно разобраться полумерами, а с директивой order by что делать?) Мне нужно по алиасу просортироваться. Ощущение, что синт.анал. не хочет ключевые слова разбирать, или вообще токенизатор не видит "семантику"...
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303401 #303406 09:27 PM, 11 Dec 2022
    set prefer_column_name_to_alias=1
  • Наоборот, с нулём, завелось
  • 12 December 2022 (120 messages)
  • https://t.me/clickhouse_ru
    @minto_o #303408 08:18 AM, 12 Dec 2022
    если нужно вытянуть таблицу с КХ раскиданную по двум шардам через Distributed табилцу.
    данные будут тянуться с двух шардов отдельно
    или шард2 будет отдавать данные на шард1, и шард1 уже приложению?
    шадр2 -> шард1 -> апп
  • https://t.me/clickhouse_ru
    зависит от того на каком шарде вы ваш SELECT ... FROM distributed_table запускаете

    если запускаете на шард1 то да, схема для шард2 данных шадр2 -> шард1 -> апп
    там есть тонкость, что если в запросе GROUP BY есть, то на шард2 данные "предагрегируются"
  • https://t.me/clickhouse_ru
    отвечу проще, через 1 сервер будет отдаваться
  • https://t.me/clickhouse_ru
    @minto_o #303411 08:22 AM, 12 Dec 2022
    не, без фильтров и группировок.
    просто селект (да, про зависимость "на каком шарде вызвал" понимаю.
    спасибо
  • https://t.me/clickhouse_ru
    @minto_o #303412 08:30 AM, 12 Dec 2022
    а MV (ReplacingMergeTree, AggregatingMergeTree) занимают квери (max_concurrent_queries) под свою работу?
  • https://t.me/clickhouse_ru
    @nataschachu #303413 08:43 AM, 12 Dec 2022
    Привет!
    У меня вопросы про создание копии таблицы. Есть чудесная статья https://kb.altinity.com/altinity-kb-schema-design/change-order-by/, но мне не понятно:

    в эту временную таблицу

    example_table_temp
    нужно и инсертить данные из исходной, и аттачить партиции, разве только инсерта не достаточно?
    после этого написано, что временную таблицу удалить можно, но не сказано, как из временной таблицы данные попадут в "нормальную"🙂
    Подскажите, пожалуйста)
    How to change ORDER BY

    How to change ORDER BY.

  • https://t.me/clickhouse_ru
    Вы про 4 и 5 шаг ?
    В 4 шаге, вы в tmp таблицу данные заливаете
    В 5 шаге, вы в новую таблицу делаете аттач
  • https://t.me/clickhouse_ru
    а, точно, невнимательно прочитала, спасибо
  • https://t.me/clickhouse_ru
    Всем привет! Подскажите, пожалуйста, а можно ли в данном запросе зафиксировать результат players_sample?

    Суть:
    1. Берем сэмпл игроков
    2. Берем два одинаковых запроса target и transactions_7d с WHERE на этот сэмпл игроков
    3. JOIN'им результаты и получаем число строк меньше, чем в LIMIT players_sample

    Т.е. в target и transactions_7d подмножества игроков различаются.

    WITH players_sample as (
    SELECT
    DISTINCT player_id
    FROM
    luna.adjust_purchase_events
    WHERE
    1
    AND datetime < now() - toIntervalDay(14)
    AND game_id = 'hclinic'
    LIMIT
    1000
    ),

    target as (
    SELECT
    game_id,
    player_id,
    sum(revenue_usd) as revenue
    FROM
    luna.adjust_purchase_events
    WHERE
    1
    AND game_id = 'hclinic'
    AND datetime < now() - toIntervalDay(14)
    AND player_id in players_sample
    GROUP BY
    game_id,
    player_id
    ),

    transactions_7d as (
    SELECT
    game_id,
    player_id,
    sum(revenue_usd) as revenue
    FROM
    luna.adjust_purchase_events
    WHERE
    1
    AND game_id = 'hclinic'
    AND datetime <= now() - toIntervalDay(14)
    AND player_id in players_sample
    GROUP BY
    game_id,
    player_id
    )

    SELECT
    count(1) as cnt_rows
    FROM
    transactions_7d
    JOIN target
    ON transactions_7d.game_id = target.game_id
    AND transactions_7d.player_id = target.player_id

    > 174
  • https://t.me/clickhouse_ru
    @aksimemor #303417 09:58 AM, 12 Dec 2022
    Привет!

    После обновления с 21.8.15.15 до 22.3.12.21

    Запросы CREATE OR REPLACE VIEW стали отрабатывать очень долго. Можете подсказать были ли изменения в логике этой операции или надо добавлять какую-то настройку чтобы он не прогружал весь запрос целиком?
  • @subotic0 #303420 10:23 AM, 12 Dec 2022
    Всем привет, почему настройка optimize_functions_to_subcolumns по умолчанию выключена, есть баги или в чем дело?
  • https://t.me/clickhouse_ru
    Да, тк переписывание происходит на уровне AST дерева то, бывало вылезали проблемы с distributed запросами.

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

    А вообще собирались включить
    Turn on `optimize_functions_to_subcolumns` by default by CurtizJ · Pull Request #33645 · ClickHouse/ClickHouse

    Changelog category (leave one): Not for changelog (changelog entry is not required)

  • https://t.me/clickhouse_ru
    @MakeReady #303423 11:02 AM, 12 Dec 2022
    интересную ошибку словил
    во вьюшке есть поле
    coalesce(u.created_at,…) as created_at
    и далее оно используется в группировке
    вьюшка объединяет несколько таблиц в которых есть поле с таким же имене
    но вроде все работает с прямыми запросами
    и с запросами где из этой вьюшки берется все
    но тут добавляею ее через
    LEFT и ошибка что неизветное поле в GROUP BY
  • https://t.me/clickhouse_ru
    @MakeReady #303424 11:02 AM, 12 Dec 2022
    пришлось в группировку повторить формулу
  • https://t.me/clickhouse_ru
    Алиас нужно использовать другой
  • https://t.me/clickhouse_ru
    @MakeReady #303426 11:09 AM, 12 Dec 2022
    да теперь понятно… но уж много переделывать
  • https://t.me/clickhouse_ru
    Да сделайте алиас другой в join'e
  • https://t.me/clickhouse_ru
    @MakeReady #303428 11:10 AM, 12 Dec 2022
    в смысле тут?
  • https://t.me/clickhouse_ru
    @MakeReady #303429 11:10 AM, 12 Dec 2022
    JOIN db1.users_v AS u
  • https://t.me/clickhouse_ru
    @MakeReady #303430 11:11 AM, 12 Dec 2022
    на что это повлияет?
  • https://t.me/clickhouse_ru
    @konnectrl #303431 11:13 AM, 12 Dec 2022
    SELECT * FROM
    JOIN ( SELECT created_at as create_ad FROM db1.users_v ) as u
  • https://t.me/clickhouse_ru
    @MakeReady #303432 11:17 AM, 12 Dec 2022
    так самое интересное что в этом запросе это поле не используется
  • https://t.me/clickhouse_ru
    @runiverse_hiker #303434 11:21 AM, 12 Dec 2022
    Добрый день. Подскажите пожалуйста правильно ли я понимаю что при drop/create словарей конструкция on cluster не используется и необходимо создавать словарь на каждой реплике по отдельности?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303434 #303435 11:27 AM, 12 Dec 2022
    неправильно. достаточно посмотреть в документацию - https://clickhouse.com/docs/en/sql-reference/statements/create/dictionary
  • https://t.me/clickhouse_ru
    там в пятом пункте

    "5. Attach data from the intermediate table to example_table"

    для быстрого переноса через ATTACH сделано

    и потом
    "6. Drop example_table_old and example_table_temp"

    все вроде норм по инструкции
  • https://t.me/clickhouse_ru
    Да-да, спасибо, я криво прочитала)
  • https://t.me/clickhouse_ru
    Да, но не очень понимаю как создать словарь на реплике если у каждой реплики свое название а словарь должен смотреть именно а таблицу на своей реплике? в SOURCE как хост записать при конструкции ON CLUSTER?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303438 #303439 11:59 AM, 12 Dec 2022
    да, словарь смотрит на таблицу на своем сервере. которая должна быть Replicated. Все названия - в описании кластера. При необходимости (если есть шарды), описываете еще один кластер, где все узлы - реплики.
  • https://t.me/clickhouse_ru
    Спасибо, попробую👍
  • https://t.me/clickhouse_ru
    @utkinmaximand #303441 12:13 PM, 12 Dec 2022
    Добрый день, подскажи почему из table engine buffer, данные не сбрасываются висят даже после max_time, в чём может быть причина - ( основная масса данных перелились ) но на одном сервере осталась часть строк таблице типа буфер.
  • https://t.me/clickhouse_ru
    смотрите /var/log/clickhouse-server/clickhouse-server.err.log

    там обычно структура underlying таблицы другая
  • https://t.me/clickhouse_ru
    Если players_sample добавить в финальный JOIN вместо WHERE каждого из подзапросов, то число строк совпадает, но запрос раздувается по памяти.

    SELECT
    count(1) as cnt_rows
    FROM
    transactions_7d
    JOIN target
    ON transactions_7d.game_id = target.game_id
    AND transactions_7d.player_id = target.player_id
    JOIN players_sample
    ON transactions_7d.game_id = players_sample.game_id
    AND transactions_7d.player_id = players_sample.player_id
  • https://t.me/clickhouse_ru
    Спасибо и правда ошибка выпала!
  • https://t.me/clickhouse_ru
    @agpruss #303445 01:47 PM, 12 Dec 2022
    коллеги, кто-нибудь работал с MaterializedPostgreSQL?
  • https://t.me/clickhouse_ru
    @agpruss #303446 01:47 PM, 12 Dec 2022
    [experimental] MaterializedPostgreSQL | ClickHouse Docs

    Creates a ClickHouse database with tables from PostgreSQL database. Firstly, database with engine MaterializedPostgreSQL creates a snapshot of PostgreSQL database and loads required tables. Required tables can include any subset of tables from any subset of schemas from specified database. Along with the snapshot database engine acquires LSN and once initial dump of tables is performed - it starts pulling updates from WAL. After database is created, newly added tables to PostgreSQL database are not automatically added to replication. They have to be added manually with ATTACH TABLE db.table query.

  • https://t.me/clickhouse_ru
    @agpruss #303447 01:49 PM, 12 Dec 2022
    CREATE DATABASE <dbname> ON CLUSTER <clustername>

    ENGINE = MaterializedPostgreSQL('hostname:5432', 'etl', 'user', 'password')

    SETTINGS materialized_postgresql_max_block_size = 65536,

    materialized_postgresql_tables_list = 'db.name',

    materialized_postgresql_tables_list_with_schema = 1;
  • https://t.me/clickhouse_ru
    @agpruss #303448 01:49 PM, 12 Dec 2022
    в итоге база создаётся, а таблица в ней нет. что я делаю не так? )
  • https://t.me/clickhouse_ru
    @agpruss #303449 01:51 PM, 12 Dec 2022
    единственный нюанс, что у меня не PostgreSQL, а Greenplum
  • https://t.me/clickhouse_ru
    там таблицы загружаются лениво в фоне, так что может не быть таблицы если при ее загрузке была какая-то ошибка, проверьте логи.
  • https://t.me/clickhouse_ru
    логи посмотрел. ни какого криминала не нашёл
  • https://t.me/clickhouse_ru
    а какая версия сервера?
  • https://t.me/clickhouse_ru
    22.5.2.3
  • https://t.me/clickhouse_ru
    на 22.9 бы проверить или 22.8 хотя б, там были фиксы того, что некоторые исключения могли не логироваться
  • https://t.me/clickhouse_ru
    в логах postgresql вижу такую ошибку: ERROR","42P01","relation ""pg_publication"" does not exist",,,,,,"SELECT exists (SELECT 1 FROM pg_publication WHERE pubname = '<dbname>_ch_publication')",30,,"parse_relation.c",1028,
  • https://t.me/clickhouse_ru
    @MakeReady #303456 02:13 PM, 12 Dec 2022
    Добрый день!
    будет ли разница в скорости между
    drop table
    create as select
    и
    truncate table
    insert as select
    ?
  • https://t.me/clickhouse_ru
    ну видимо в Greenplum нет таблицы pg_publication, а в коде движка проверяется то, что в ней лежит, в PostgreSQL эта таблица всегда есть
  • https://t.me/clickhouse_ru
    в гринпламе такой таблицы действительно нет. печально...
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303459 #303460 02:31 PM, 12 Dec 2022
    Не так уж и печально IMHO. Потому что это не единственное свойство GP, не дающее возможности использовать MaterializedPostgreSQL в CH.

    Как вы планировали организовать взаимодействие GP и CH?
    Каждый сегмент ходит в CH сам по себе?
  • https://t.me/clickhouse_ru
    @sergeidanilovi4 #303462 02:44 PM, 12 Dec 2022
    Коллеги, привет!
    Помогите, пожалуйста, советом.
    Есть база данных на постгресе. Факты и справочники. Задача - перенести на кликхаус. Вопрос: можно ли это влоб переносить или данные должны быть как-то реорганизованы?
  • https://t.me/clickhouse_ru
    @s_nikolajus #303463 02:45 PM, 12 Dec 2022
    Привет, в кластере на всех содах поменял параметр в users.xml, но в system.settings изменений не вижу. Куда посмотреть? Параметр local_filesystem_read_method был не дефолтный, а теперь вернул дефолт (убрал из конфига)
  • https://t.me/clickhouse_ru
    пока взаимодействие реализовано по jdbc
  • https://t.me/clickhouse_ru
    А какой тип данных и объем? Переносить можно по разному. От выгрузки в файлик до костылей на питоне.
  • https://t.me/clickhouse_ru
    Разные: строки, числа, всё подряд.
  • https://t.me/clickhouse_ru
    Объем в данном случае 2,4 Гб. Но вопрос скорее общий.
  • https://t.me/clickhouse_ru
    @sergeidanilovi4 #303468 02:51 PM, 12 Dec 2022
    Переносим просто таблицы или из надо до переноса как-то хитро заджоинить?
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303464 #303469 02:52 PM, 12 Dec 2022
    Моя компания делает коннектор между GP и CH https://arenadata.tech/products/arenadata-quickmarts/ , ну и мы думаем над дальнейшей судьбой этой штуки, куда ее правильно развивать.
    Так что если расскажите, какая у вас боль, какую проблему пытаетесь решить, буду признателен.
    Да, коннектор является частью arenadata'вского дистрибутива GP, отдельно его получить нельзя ;(
    Arenadata QuickMarts

    Arenadata QuickMarts - кластерная колоночная СУБД, созданная на базе ClickHouse, ориентированная на Enterprise-сегмент, с корпоративной поддержкой, функционалом и контролем качества релизов.

  • https://t.me/clickhouse_ru
    Увы, тут всё зависит от ваших дальнейших задач.
    В целом вам достаточно просто перенести таблицы
  • https://t.me/clickhouse_ru
    Понял, спасибо. Дальнейная задача - сравнение быстродействия.
  • https://t.me/clickhouse_ru
    да я сплю и вижу как мы переедем на арену с ванильки...
  • https://t.me/clickhouse_ru
    Не совсем про это я)
    Вы будете много писать и менять в этих таблицах? Или только читать из них?
    Тут многое будет зависеть от движка.
    Может вы в CH поставите мемори, вы будете быстрее читать из базы, но стабильность может снизиться, относительно постгри
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303472 #303475 02:59 PM, 12 Dec 2022
    Я вас не призываю куда-то переезжать, я прошу поделиться задачей, которую вы решаете.
    Потому что это может быть полезно.
    Ну да воля ваша.
  • https://t.me/clickhouse_ru
    Будем читать в основном
  • https://t.me/clickhouse_ru
    @Vaness90 #303477 03:11 PM, 12 Dec 2022
    Всем привет, как в ch создать словарь сейчас?
    CREATE DICTIONARY local_dict
    ...
    выдает ошибку на слово DICTIONARY:

    Expected one of: TEMPORARY, MATERIALIZED, TABLE, DATABASE, VIEW
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303468 #303478 03:11 PM, 12 Dec 2022
    лучше конечно заджойнить в широкие денормализованные таблицы. Можно даже маленькие словарики в LowCardinaly(String) собрать.
    И над order by подумать. И партиционированием. И skip indexes. Просто так скопировать схему точно не выйдет. 2.4G на все про все - это конечно очень мало, может быть и просто заработает. Но если вопрос "в общем", в расчете на терабайты, то менять придется, и сильно.
  • https://t.me/clickhouse_ru
    Борис, спасибо! А где про такую переподготовку базы почитать?
  • https://t.me/clickhouse_ru
    Вы хотите сравнить скорость на чтение постгреса и Clickhouse? Выйграет Clickhouse:)
  • https://t.me/clickhouse_ru
    Ну, эксперимент всё равно надо провести:)
  • https://t.me/clickhouse_ru
    @konnectrl #303482 03:15 PM, 12 Dec 2022
    Вы не то сравниваете, это как грузовик с гоночным болидом сравнивать.... У них 4 колеса, ну значит можно сравнить ...
  • https://t.me/clickhouse_ru
    @konnectrl #303483 03:17 PM, 12 Dec 2022
    OLAP MPP vs OLTP, что же быстрей в аналитике данных ? Кхм может то что называется OLAP? Да не бред надо сравнивать :) Но на ваших объемах любая база будет быстрая :)
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303477 #303484 03:18 PM, 12 Dec 2022
    Что-то здесь не так, должно работать.
    И клиент и сервер свежие?
  • https://t.me/clickhouse_ru
    @Vaness90 #303485 03:18 PM, 12 Dec 2022
    18 со стандартных репозиториев убунты
  • https://t.me/clickhouse_ru
    @ilejn #303486 03:19 PM, 12 Dec 2022
    Ну вы шутник, однако. Тогда не было создания словарей через sql.
    Возьмите последний lts 22.8
  • https://t.me/clickhouse_ru
    @Vaness90 #303487 03:19 PM, 12 Dec 2022
    ок, спасибо ) попробую
  • https://t.me/clickhouse_ru
    @Vaness90 #303488 03:20 PM, 12 Dec 2022
    мониторинг промеьеусом тоже не было в этой версии?
  • https://t.me/clickhouse_ru
    у кого-нибудь было такое? как там процесс работает?
  • https://t.me/clickhouse_ru
    Ну скорей всего, 18 версия это 18 года версия ....
  • https://t.me/clickhouse_ru
    Простая установка
    curl https://clickhouse.com/ | sh
    Fast Open-Source OLAP DBMS - ClickHouse

    ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries

  • https://t.me/clickhouse_ru
    понятно_) спасибо, я все понял теперь
  • https://t.me/clickhouse_ru
    @konnectrl #303494 03:26 PM, 12 Dec 2022
    Вышли курсы от Clickhouse inc бесплатные https://learn.clickhouse.com/visitor_class_catalog
  • @113011 #303495 03:26 PM, 12 Dec 2022
    👋

    Я, возможно, наткнулся на баг при отправке rowbinary через http с transfer-encoding: chunked
  • @113011 #303496 03:27 PM, 12 Dec 2022
    когда chunk начинается со строки длиной=13, кх ругается на неполные данные (Code: 33. DB::Exception: Cannot read all data. Bytes read: 12. Bytes expected: 101.: (at row 1)\n: While executing BinaryRowInputFormat. (CANNOT_READ_ALL_DATA) (version 22.10.1.1175 (official build)))
  • @113011 #303497 03:27 PM, 12 Dec 2022
    длина 13 = \r в ascii
  • @113011 #303498 03:28 PM, 12 Dec 2022
    куда стоит смотреть чтобы удостовериться, что это баг?
  • @113011 #303499 03:28 PM, 12 Dec 2022
    иил можно сразу на github идти с telnet/curl примером?
  • https://t.me/clickhouse_ru
    я вас понял. задачу сформулирую - вышлю вам в личку
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303479 #303502 04:34 PM, 12 Dec 2022
    Это не переподготовка, это проектирование dwh системы с учетом особенностей КХ. Я такую штуку делаю на теории Kimball - он там 20 лет назад все расписал про денормализацию, широкие таблицы, факты-измерения, куда можно ходить, а куда не надо. Очень многое хорошо ложится на то, что есть в КХ. Если есть желание читать - The Data Warehouse Toolkit
  • https://t.me/clickhouse_ru
    Борис, спасибо большое!
  • https://t.me/clickhouse_ru
    @andrewk0077 #303506 06:17 PM, 12 Dec 2022
    Ребят, подскажите пожалуйста, а если хотим заменить один сервер клика на другой … rsync всю дату\store скопировали … то clickhouse_id ставить тот же, который был на старом сервере или можем инкрементировать ?
    и что делать с zookeeper’ом ?
  • @Gatenadze_Vladimir #303507 06:21 PM, 12 Dec 2022
    Добрый вечер, хочу проверить таблицу.
    В Dbeaver выполнил :
    CHECK TABLE repbz.tabl ;
    В окне "Статистика 1" выводится:
    Updated Rows 0
    Query CHECK TABLE repbz.tabl

    В окне "SQL terminal": " 0 row(s) modified."
    Но как пишут https://clickhouse.com/docs/en/sql-reference/statements/check-table/ должен быть вывод вида:
    ┌─result─┐
    │ 1 │
    └──────┘
    Пожалуйста подскажите где ошибка!
    CHECK TABLE Statement | ClickHouse Docs

    Checks if the data in the table is corrupted.

  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303507 #303508 07:05 PM, 12 Dec 2022
    указанный в документации вывод относится к clickhouse-client. Dbeaver and DataGrip возможно не знают что такое CHECK, и как правильно отображать его вывод.
  • @Gatenadze_Vladimir #303509 07:05 PM, 12 Dec 2022
    Спасибо!
  • https://t.me/clickhouse_ru
    видимой разницы не будет

    drop table ... sync
    лучше использовать...
  • https://t.me/clickhouse_ru
    А что даёт sunc?
  • https://t.me/clickhouse_ru
    что такое clickhouse_id ?? тег внутри <macros> ?
  • https://t.me/clickhouse_ru
    для Atomic немедленно данные удаляет, а не ждет 480 секунд...
  • https://t.me/clickhouse_ru
    <replica>ch1</replica>
  • https://t.me/clickhouse_ru
    @andrewk0077 #303515 07:31 PM, 12 Dec 2022
    вот если делаем замену - можно ли инкрементировать или оставляем тот же ?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303515 #303516 07:46 PM, 12 Dec 2022
    а это где вы такое пишите? у меня <replica> - это часть конфигурации кластера. И там внутри еще много тегов может жить, а не просто константа:
    <replica>
    <host>example01-01-2</host>
    <port>9000</port>
    </replica>
  • https://t.me/clickhouse_ru
    Если название реплики измените, то её надо будет удалить в zookeeper из всех путей с таблицами
    Прописать в конфиг кластера новое название, сначала на этом узле
    Выполнить
    sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data
    После запускать кликхаус сервер на нем
    Потом менять конфиги кластера на остальных серверах

    Если название реплики не менять, то достаточно на сервере выполнить
    sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data
    И после запускать кликхаус-сервер

    Обязательно проверьте все это на dev)
  • https://t.me/clickhouse_ru
    Судя по всему это в макросе
  • https://t.me/clickhouse_ru
    @andrewk0077 #303519 07:52 PM, 12 Dec 2022
    я думаю стоит пока сделает как расширение реплик, воспользоваться https://clickhouse.com/docs/ru/engines/table-engines/mergetree-family/replication/#vosstanovlenie-v-sluchae-poteri-vsekh-dannykh, а далее убрать ту реплику из конфигов, удалив её также из зукипера
  • https://t.me/clickhouse_ru
    @andrewk0077 #303520 07:52 PM, 12 Dec 2022
    правильно же мыслю ?
  • https://t.me/clickhouse_ru
    @andrewk0077 #303521 07:53 PM, 12 Dec 2022
    … то есть прописываю на новом сервер более полный конфиг с описание всех шардов и реплик, создаю флаг, запускаю
  • https://t.me/clickhouse_ru
    @andrewk0077 #303522 07:53 PM, 12 Dec 2022
    и потом … прописываю на оставшихся серверах новую реплику определённого шарда ?
  • https://t.me/clickhouse_ru
    Вроде все верно
  • @paf91 #303525 08:36 PM, 12 Dec 2022
    Коллеги привет. Подскажите, пож-та, что по картинке я делаю не так? :) Пытаюсь создать alias для колонки.
  • https://t.me/clickhouse_ru
    так такой колонки нет, надо колонку сперва сделать не?
  • https://t.me/clickhouse_ru
    @ionite ↶ Reply to #303525 #303527 08:42 PM, 12 Dec 2022
    Так вы же в нем ссылаетесь на несуществующую колонку. Если хотите обращаться к одной колонке по двум именам , то нужно сделать
    test1 Float
    test_alias Float alias test1
    Alias тут работает не как As
  • @paf91 ↶ Reply to #303527 #303528 08:43 PM, 12 Dec 2022
    а, спасибо, теперь понял)
  • https://t.me/clickhouse_ru
    @Shamsullin #303529 09:34 PM, 12 Dec 2022
    Всем привет, подскажите пожалуйста, как можно реализовать следующее.
    Есть сервер, на нем MergeTree таблица, в неё собираются разные данные, требуется часть этих данных, которые отвечают определенному SELECTу копировать на другой сервер, как это можно сделать?
  • @paf91 #303530 09:37 PM, 12 Dec 2022
    а куда копировать надо
  • @paf91 #303531 09:37 PM, 12 Dec 2022
    виртуализацию не рассматривали?
  • https://t.me/clickhouse_ru
    У нас есть сервер, часть данных с него надо копировать на другой сервер(от него есть ip, логин и пароль для подключения через clickhouse-client)
  • @paf91 #303533 09:39 PM, 12 Dec 2022
    а, ещё один клик
  • https://t.me/clickhouse_ru
    @ilejn #303534 09:42 PM, 12 Dec 2022
    remote, remoteSecure | ClickHouse Docs

    Allows accessing remote servers, including migration of data, without creating a Distributed table. remoteSecure - same as remote but with a secured connection.

  • https://t.me/clickhouse_ru
    О, спасибо, но, я так понимаю это периодически надо будет какой-то скрипт вызывать, а нет подобного, чтобы когда данные попадали на первый сервер, нужная часть сразу попадала на второй?
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303535 #303536 09:49 PM, 12 Dec 2022
    Есть.
    Вам бы почитать чего-нибудь про ClickHouse ...
  • https://t.me/clickhouse_ru
    Если посоветуете что-то, буду очень благодарен.
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303537 #303538 09:53 PM, 12 Dec 2022
    Честно говоря, с любого места. В официальной документации про materialized view. И, наверное, про cluster и distributed table.
    Еще про ReplicatedMergeTree.
  • https://t.me/clickhouse_ru
    Спасибо большое. Кажется нашел, то, что подходит
  • 13 December 2022 (112 messages)
  • https://t.me/clickhouse_ru
    это в макросах такое пишут
  • @masyagutovmz #303544 04:53 AM, 13 Dec 2022
    Привет всем! Какой инструмент для реализации полных и дифференцированных копий БД clickhouse вы посоветуете?
  • clickhouse-backup)
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @navi_2 #303548 06:36 AM, 13 Dec 2022
    Привет! Подскажите от чего может возникать ошибка при селекте из дистрибьютед таблицы: Received exception from server (version 21.8.8):
    Code: 516. DB::Exception: Received from localhost:9000. DB::Exception: Received from host:9000. DB::Exception: default: Authentication failed: password is incrrect or there is no user with such name.
  • https://t.me/clickhouse_ru
    Наверно, аутентификация не удалась, траблы с логином и паролем
  • https://t.me/clickhouse_ru
    Пароли у default пользователя должны быть одинаковы
  • https://t.me/clickhouse_ru
    @navi_2 ↶ Reply to #303550 #303551 06:43 AM, 13 Dec 2022
    на данный момент пароль default отсутствует - как по умолчанию. Значит требуется установить?
  • https://t.me/clickhouse_ru
    @ikeniborn #303552 06:48 AM, 13 Dec 2022
    Пробовал создать подлючение к базе MaterializedPostgreSQL. первый раз указал не корректные параметры подклюxения, теперь пересоздать не получается

    SET allow_experimental_database_materialized_postgresql=1;
    CREATE DATABASE postgre ENGINE = MaterializedPostgreSQL(
    '****:****,
    '****',
    '****',
    '******'
    ) SETTINGS materialized_postgresql_schema_list = 'public';

    потом сделал drop database postgre

    пробую пересоздать и получаю ошибку
    SQL Error [76] [07000]: Code: 76. DB::ErrnoException: Cannot open file /var/lib/clickhouse/metadata/postgre.sql.tmp, errno: 17, strerror: File exists. (CANNOT_OPEN_FILE) (version 22.11.2.30 (official build))

    Идти на сервер и дропать вручнную?
  • https://t.me/clickhouse_ru
    Кхмм, кажется что просто не может установить соединение со вторым Clickhouse. Попробуйте через функцию remote выполнить запрос.
    Так же проверить настройки, правильные ли адреса указаны
  • https://t.me/clickhouse_ru
    Я думаю, лучшее решение создать базу с другим названием
  • https://t.me/clickhouse_ru
    @navi_2 ↶ Reply to #303553 #303555 07:01 AM, 13 Dec 2022
    думаю тут должно быть в порядке - запросы on cluster отрабатывают успешно
  • https://t.me/clickhouse_ru
    @navi_2 ↶ Reply to #303553 #303556 07:03 AM, 13 Dec 2022
    а на MergeTree может быть создана таблица Distributed?
  • https://t.me/clickhouse_ru
    ну так чсебе workaround) Хотелось бы понять в чем пробелма и как рещить на корню)
  • https://t.me/clickhouse_ru
    Клик один, без репликаций.
  • https://t.me/clickhouse_ru
    @392734528 #303559 07:53 AM, 13 Dec 2022
    всем привет
  • https://t.me/clickhouse_ru
    @392734528 #303560 07:53 AM, 13 Dec 2022
    DB::Exception: Cannot create table with column 'pid' which type is 'FixedString(512)' because fixed string with size > 256 is suspicious. Set setting allow_suspicious_fixed_string_types = 1 in order to allow it. Stack trace:
  • https://t.me/clickhouse_ru
    @392734528 #303562 07:53 AM, 13 Dec 2022
    что за прикол расскажите плиз.
    на 22.3.8.39 такого небыло а тут вот решили новый контейнер собрать и привет
  • https://t.me/clickhouse_ru
    Да
  • https://t.me/clickhouse_ru
    @392734528 #303564 07:59 AM, 13 Dec 2022
    Add a setting allow_suspicious_fixed_string_types to prevent users from creating columns of type FixedString with size > 256. #41495 (Duc Canh Le).

    Но зачем?
    Они медленно работают? как правильно то надо?
  • https://t.me/clickhouse_ru
    Там же есть ссылка на issue:
    https://github.com/ClickHouse/ClickHouse/issues/41452

    If FixedString is used with more than 256 bytes in size, it is suspicious and most likely indicates misusage.
    A setting `allow_suspicious_fixed_string_types` · Issue #41452 · ClickHouse/ClickHouse

    Use case If FixedString is used with more than 256 bytes in size, it is suspicious and most likely indicates misusage. Forbid this by default and add a setting to override it; ATTACH queries should...

  • https://t.me/clickhouse_ru
    Я почитал конечно.
    но "подозрительно" и "похоже на неправильное использование" как то не прояснило ситуацию.
  • https://t.me/clickhouse_ru
    @Segate #303568 08:19 AM, 13 Dec 2022
    Привет, есть вопрос:
    есть таблица 1 с ключевыми полями ConnectID и waitConnections, DateTime
    есть таблица 2 с полями connectID, waitConnections, region, DateTime

    Мне надо по записи в 1й таблице получить запись во второй по следующему принципу:
    1) Найти в т2 1 запись по следующим условиям: t1.connectID=t2.connectID и t1.waitConnections=t2.waitConnections и t1.DateTime<t2.DateTime
    2) Взять полученную запись из п1. (назовем ее victim) и получить еще одну первую запись из Таблицы 2(Назовем ее blocker) по принципу: victim.DateTime>Blocker.DateTime и victim.WaitConnections = blocker.connectID и victim.regions = blocker.regions

    Не могу разобраться, как оперировать результатами в подобного рода запросах в CH
  • https://t.me/clickhouse_ru
    @sergeidanilovi4 #303569 08:30 AM, 13 Dec 2022
    Коллеги, привет!
    Хочу перенести базу данных с таблицами с постгреса.
    Конфиг постгреса:

    listen_addressed = '*'
    wal_level = logical
    max_wal_senders = 10
    max_replication_slots = 10

    В кликхаусе:
    CREATE DATABASE demo_from_postgres
    ENGINE = MaterializedPostgreSQL('IP:5432', 'demo', 'clickhouse_user', 'ClickHouse_123')
    SETTINGS materialized_postgresql_schema = 'bookings';
    Ok.

    Хочу добавить таблицу, которая есть в этой базе в постгресе:
    ATTACH TABLE demo_from_postgres.seats;

    Ошибка:
    Received exception from server (version 22.10.2):
    Code: 620. DB::Exception: Received from localhost:9000. DB::Exception: PostgreSQL replication initialization did not finish successfully. Please check logs for error messages. (QUERY_NOT_ALLOWED)
    Как её исправить?
  • https://t.me/clickhouse_ru
    а проблема то в чем?
    джойни таблицы, формируй контекст из контекста вытакскивай нужный результат.
  • @stk97stk #303571 08:38 AM, 13 Dec 2022
    Всем привет
    Для полного переноса таблицы из гринплама в клик проверил Postgresql engine и pxf.
    Почему pg engine справляется с переносом одной таблицы на 5 гигов в несколько раз быстрее, хотя должен работать только с одной нодой?
    Его использовал как инсерт всех записей в новую клик таблицу.
    Что вообще должно лучше работать для переноса таблиц из гп?
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303568 #303572 08:43 AM, 13 Dec 2022
    Не полностью разобрался, но кажется, что вам нужен ASOF JOIN.
  • https://t.me/clickhouse_ru
    @Konstantin_litvin #303573 08:45 AM, 13 Dec 2022
    Привет, интересует такой вопрос. Нормально ли, что все select запросы к ReplacingMergeTree таблицам я буду вызывать с final? Чревато ли это чем то?
  • https://t.me/clickhouse_ru
    тем что запросы будут возвращать данные после final )
  • @eperesadka #303575 08:52 AM, 13 Dec 2022
    подскажите инструмент нормальный для копирования единоразового из mysql в кликхаус
  • https://t.me/clickhouse_ru
  • это не то, я именно про трансфер данных говорю
  • https://t.me/clickhouse_ru
    Чуть переформулирую и дополню вопрос. Нужно соединять через union distinct/intersect некую статистику в таблицах MergeTree с данными, которые могут изменяться(допустим, эмейлы, телефоны и т.д.). Было решено это делать сразу в клике с помощью таблиц ReplacingMergeTree для изменяющихся данных, где все запросы к таким таблицам с final. Есть ли какие то неочевидные подводные камни в такой реализации?
  • https://t.me/clickhouse_ru
    @Fearan #303579 09:32 AM, 13 Dec 2022
    Джентльмены, а где-нибудь есть сборка single binary под mac os aarch64 с USE_MYSQL=1?
    Старые issue на гитхабе говорят “дада, мы поправили, добавили в сборку” - но свежескаченный бинарь без mysql
  • https://t.me/clickhouse_ru
    @sergeidanilovi4 #303580 09:42 AM, 13 Dec 2022
    Всем привет! Создал таблицы при помощи движка постгреса. Есть возможность сохранить их прямо в кликхаусе, чтобы не обращаться каждый раз к постгресу?
  • https://t.me/clickhouse_ru
    MaterializedPostgreSQL?
  • https://t.me/clickhouse_ru
    Да, я его пробовал. Это то, что нужно. Но при выполнении команды attach table вылезает такая ошибка Received exception from server (version 22.10.2):
    Code: 620. DB::Exception: Received from localhost:9000. DB::Exception: PostgreSQL replication initialization did not finish successfully. Please check logs for error messages. (QUERY_NOT_ALLOWED) Подскажите, где хотя бы искать эти логи?
  • https://t.me/clickhouse_ru
    https://clickhouse.com/docs/ru/sql-reference/statements/select/from/#drawbacks
    Вроде все здесь и других быть не должно
  • https://t.me/clickhouse_ru
    в таблицах вида system.*_log (system.query_log и т.п.), но они могут быть выключены по умолчанию. https://clickhouse.com/docs/ru/operations/system-tables/
  • https://t.me/clickhouse_ru
    @andreypopp #303585 09:55 AM, 13 Dec 2022
    А можно как то узнать у CH произошел ли break при превышении лимита запроса? (кроме как поменять break на throw)
  • https://t.me/clickhouse_ru
    @holo_wasserfall #303586 09:55 AM, 13 Dec 2022
    Можно для копирования данных ещё матвью на таблицу с движком Postgres попробовать повесить
  • https://t.me/clickhouse_ru
    @holo_wasserfall #303587 09:56 AM, 13 Dec 2022
    Но это такое себе дело
  • https://t.me/clickhouse_ru
    Спасибо, тогда посмотрю логи!
  • https://t.me/clickhouse_ru
    Я бы в логах постгреса искал. Здесь же используется логическая репликация, соответственно надо проверить слоты репликации на постгресе.
    + не вижу настройку materialized_postgresql_schema в документации, используйте materialized_postgresql_table_list под ним же будет создаваться публикация для указанного списка таблиц в постгресе
  • https://t.me/clickhouse_ru
    Про логи понял, спасибо. А вот materialized_postgresql_table_list - это в КХ?
  • https://t.me/clickhouse_ru
    Да, есть подозрение, что кликхаус не все возможные опции создания публикации в пг покрывает пока(эксперементально же пока)
  • https://t.me/clickhouse_ru
    @philipbu #303592 10:23 AM, 13 Dec 2022
    Хотя в доке на английском нашёл https://clickhouse.com/docs/en/engines/database-engines/materialized-postgresql/#materialized-postgresql-schema
    Проверьте по ченжлогу какие настройки для postgres поддерживает ваша версия кликхауса.
    [experimental] MaterializedPostgreSQL | ClickHouse Docs

    Creates a ClickHouse database with tables from PostgreSQL database. Firstly, database with engine MaterializedPostgreSQL creates a snapshot of PostgreSQL database and loads required tables. Required tables can include any subset of tables from any subset of schemas from specified database. Along with the snapshot database engine acquires LSN and once initial dump of tables is performed - it starts pulling updates from WAL. After database is created, newly added tables to PostgreSQL database are not automatically added to replication. They have to be added manually with ATTACH TABLE db.table query.

  • https://t.me/clickhouse_ru
    Спасибо большое, буду смотреть!
  • https://t.me/clickhouse_ru
    Ещё раз большое спасибо.
    materialized view и distributed table прям то что нужно было, всё работает
  • https://t.me/clickhouse_ru
    @392734528 #303597 10:46 AM, 13 Dec 2022
    Простите: повторю запрос

    Add a setting allow_suspicious_fixed_string_types to prevent users from creating columns of type FixedString with size > 256. #41495 (Duc Canh Le).

    Зачем?
    Они медленно работают? как правильно то надо?
    В описании фичи ничего внятного не сказано.
  • https://t.me/clickhouse_ru
    @kyukhin #303598 10:52 AM, 13 Dec 2022
    Привет! Слайды лекции и статья Рона Цитрона про SSA-форму
  • https://t.me/clickhouse_ru
    @kyukhin #303599 10:52 AM, 13 Dec 2022
  • https://t.me/clickhouse_ru
    @kyukhin #303600 10:52 AM, 13 Dec 2022
  • https://t.me/clickhouse_ru
    FixedString всегда тратит для хранения всю длину указанную, добивая более короткие строки до нужной длины \0, поэтому эффективнее просто String
  • https://t.me/clickhouse_ru
    @whitethemight #303602 10:54 AM, 13 Dec 2022
    Привет всем!
    Подскажите что делаю не так?
    DB::Exception: Keeper configuration (<keeper_server> section) not found in config
    Вот сам конфиг.
    <keeper_server>
    <tcp_port>2181</tcp_port>
    <server_id>2</server_id>
    <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
    <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>

    <coordination_settings>
    <operation_timeout_ms>10000</operation_timeout_ms>
    <session_timeout_ms>30000</session_timeout_ms>
    <raft_logs_level>trace</raft_logs_level>
    </coordination_settings>

    <raft_configuration>
    <server>
    <id>1</id>
    <hostname>node1</hostname>
    <port>9181</port>
    </server>
    <server>
    <id>2</id>
    <hostname>node2</hostname>
    <port>9181</port>
    </server>
    <server>
    <id>3</id>
    <hostname>node3</hostname>
    <port>9181</port>
    </server>
    </raft_configuration>
    </keeper_server>
    Вот как запускаю keeeper
    sudo clickhouse-keeper --config /etc/clickhouse-server/enable_keeper2.xml
  • https://t.me/clickhouse_ru
    услышал спасибо!
    просто уменя айдишники такие.
    тогда придется тупо забить на эту фичу.
  • @starodubcevnikita #303605 11:08 AM, 13 Dec 2022
    Здравствуйте! Прошу вашей помощи, скажите, пожалуйста, как нужно изменить запрос, который определял бы последнюю дату, в которую есть отзывы в диапазоне и считал кол-во отзывов именно в эту дату, с учетом того, что не в каждую дату диапазона могут быть отзывы.

    Накидал пример в песочнице
    https://fiddle.clickhouse.com/f8275b3e-fa42-456d-890b-008d60ad90db
  • https://t.me/clickhouse_ru
    @nordluf #303606 11:22 AM, 13 Dec 2022
    BACKUP TABLE temp TO S3('https://endpointurl/backup/2022-12-01/shard-{shard}', '<key>>', '<secret>') ASYNC
    Подскажите, а нет планов добавить возможность использования макросов в бекапе?
  • https://t.me/clickhouse_ru
    корневой элемент должен быть
    <clickhouse>
    или
    <yandex>

    а уже потом остальные элементы вложенные
  • https://t.me/clickhouse_ru
    думаю вам надо завести issue на github

    в clickhouse-backup есть поддержка макросов для path и use_embedded_backup_restore: true
  • https://t.me/clickhouse_ru
    ОК, спасибо
  • https://t.me/clickhouse_ru
    @sergeidanilovi4 #303612 11:37 AM, 13 Dec 2022
    Подскажите, пожалуйста, как можно задать порядок чтения колонок при загрузке данных из CSV?
  • @991465085 #303613 11:39 AM, 13 Dec 2022
    Коллеги, подскажите, что не так в попытке получения данных из Kafka:
    CREATE TABLE events_queue
    (
    message String
    ) ENGINE = Kafka(...) settings kafka_thread_per_consumer = 0, kafka_num_consumers = 1;

    Целевая табличка такая же.
    Материализатор:
    CREATE MATERIALIZED VIEW events_mv TO events_json AS
    SELECT message
    FROM events_queue

    Выдается ошибка:
    <Error> void DB::StorageKafka::threadFunc(size_t): Code: 26. DB::ParsingException: Cannot parse JSON string: expected opening quote:
  • https://t.me/clickhouse_ru
    https://clickhouse.com/docs/en/sql-reference/table-functions/file/

    третий параметр, структура для табличной функции file

    или что подразумевается под "чтением CSV"? INSERT INTO table FORMAT CSV ???
    file | ClickHouse Docs

    Creates a table from a file. This table function is similar to url and hdfs ones.

  • @991465085 #303615 11:40 AM, 13 Dec 2022
    В Kafka лежит сложный JSON.
  • https://t.me/clickhouse_ru
    Спасибо большое!
  • https://t.me/clickhouse_ru
    что-то у вас явно не то с данными из kafaka ... какие параметры внутри ENGINE=Kafka ?
    поди JSONEachRow пытаетесь вставлять. а прилетает обычная строка какая то
  • @991465085 #303618 11:44 AM, 13 Dec 2022
    Лежит:
    {
    "timestamp": 1670930088859,
    "globalId": "f29891f8-bd37-4894-9046-c218da235803",
    "vendor": "#####",
    "deviceId": "########",
    "format": "binary",
    "message": {
    "recordNumber": 0,
    "timestamp": 0,
    ......

    И валится на попытке читать message.

    Ида, сейчас указано JSONEachRow
  • @991465085 #303619 11:44 AM, 13 Dec 2022
    На что заменить, чтобы читать как строку?
  • https://t.me/clickhouse_ru
    то есть лежит многострочныйJSON?
    а прочитать пытаетесь как JSONEachRow?
    можете в одну строку сжать его?
  • Нет.
    Можно прочесть данные как String?
  • https://t.me/clickhouse_ru
    по идее да, лучше так
    а уже потом в целевой таблице делать field DEFAULT JSONExtract ...
  • А что указать в Engine Kafka вместо JSONEachRow ?
  • @tiger_and_dragon #303624 11:47 AM, 13 Dec 2022
    Привет!
    не могу найти как в КХ миллисекунды превратить в Date формат
    перепробовал разные функции to и from
    и чето выдает постоянно не то, что ожидается
  • https://t.me/clickhouse_ru
    Подразумевается, что я читаю CSV вот таким образом.
    cat bookings.csv | clickhouse-client --format_csv_delimiter=',' -q 'INSERT into bookings FORMAT CSV' и вот здесь хочется указать порядок, в котором будут читаться колонки
  • https://t.me/clickhouse_ru
    JSONAsString
  • Спасибо!
  • https://t.me/clickhouse_ru
    ну вы попробуйте я на 100% не уверен
  • Из коробки короче не нашел что бы оно работало. Делаю деление миллисекунд на 1000, а дальше уже просто toDate()
  • https://t.me/clickhouse_ru
    INSERT INTO booking (field1, field2, field3) FORMAT CSV
  • https://t.me/clickhouse_ru
    ну собственно говоря, время с точностью до милисекунд это дробное угу...
    с микросекундами и наносекундами тоже самое
  • https://t.me/clickhouse_ru
    Спасибо!
  • Спасибо, работает.
  • https://t.me/clickhouse_ru
  • @rtitov #303635 12:36 PM, 13 Dec 2022
    Всем привет!
    А есть какие-то рекомендации на количество материализованных вьюх, которые можно создать к одной таблице?
  • @rtitov #303636 12:43 PM, 13 Dec 2022
    находил информацию, что не рекомендуют более 50 мат вью, может что-то поменялось?
  • https://t.me/clickhouse_ru
    Нет, можно создавать хоть миллиард. Сложно так оценить, если вы в MV внесёте сложный 1 запрос, то он может перекрыть 10 простых и т.д.
  • @rtitov ↶ Reply to #303637 #303638 12:45 PM, 13 Dec 2022
    я понимаю, что можно создать сколько угодно, у меня больше вопрос в производительности, как сильно сказывается добавление новых несложных мат вью (агрегация по каким-то полям и простой агрегатор (сумма, количество)) на скорость вставки и потребление ресурсов
  • https://t.me/clickhouse_ru
    Замеряйте в вашем кейсе
  • https://t.me/clickhouse_ru
    @didenko #303640 12:48 PM, 13 Dec 2022
    CREATE DICTIONARY some_dict
    (
    `er_key` UInt64,
    `er_value` String
    )
    PRIMARY KEY er_key
    SOURCE(CLICKHOUSE(DATABASE 'heap' TABLE 'some_dict_table'))
    LAYOUT(DIRECT())

    SELECT dictGet('some_dict', 'er_value', 231)

    0 rows in set. Elapsed: 0.003 sec.

    Received exception from server (version 22.5.1):
    Code: 516. DB::Exception: Received from localhost:9000. DB::Exception: default: Authentication failed: password is incorrect or there is no user with such name: While processing dictGet('some_dict', 'er_value', 231). (AUTHENTICATION_FAILED)

    А под какой учеткой ходит клик за словарем?
    Как сделать секуьюрно, чтобы не светить пароль в DDL?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    Спасибо!
    Ох и не очевидно же это по доке )
  • https://t.me/clickhouse_ru
    @Nordskolian #303644 01:48 PM, 13 Dec 2022
    Всем привет чат, а подскажите/расскажите!
    Чем prewhere отличается от where, и что лучше использовать в каких ситуациях?
    Если вдруг есть какая-то статья на эту тему тоже будет топ 👍
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @mayamika #303646 02:07 PM, 13 Dec 2022
    Dictionaries with executable dictionary source are not allowed to be created from DDL query
    But why?
  • https://t.me/clickhouse_ru
    Dictionary Sources | ClickHouse Docs

    A dictionary can be connected to ClickHouse from many different sources.

  • https://t.me/clickhouse_ru
    👍
  • https://t.me/clickhouse_ru
    Maybe for security reasons?
  • https://t.me/clickhouse_ru
    @ikeniborn #303656 06:19 PM, 13 Dec 2022
    Добрый, пытаюсь заюзать движок RabbitMQ использую строку подключения amqp://guest:guest@localhost/vhost выдает оошибку
    Code: 36. DB::Exception: No username or password. They can be specified either in config or in storage settings.
    что то в теме? В доках ничего не написано. Юзер точно есть на кролике.
  • https://t.me/clickhouse_ru
    А вы раздали пользователю права?

    > By default, the guest user is prohibited from connecting from remote hosts; it can only connect over a loopback interface (i.e. localhost). 
  • https://t.me/clickhouse_ru
    @hoha_ftf #303658 06:23 PM, 13 Dec 2022
    Или у вас все на одном хосте?
  • https://t.me/clickhouse_ru
    @ikeniborn #303660 06:25 PM, 13 Dec 2022
    Нет это разные поды на кубере. Есть внутренние ДНС и айпишники. А юзеру на кролике нужно расширить права или права на уровне клика?
  • https://t.me/clickhouse_ru
    Ну если guest, то на кролике
  • https://t.me/clickhouse_ru
    @ikeniborn #303662 06:27 PM, 13 Dec 2022
    пользователь админ
  • https://t.me/clickhouse_ru
    @hoha_ftf #303663 06:27 PM, 13 Dec 2022
    В доке кх, кстати, есть про конфиг

    https://clickhouse.com/docs/en/engines/table-engines/integrations/rabbitmq/
    RabbitMQ Engine | ClickHouse Docs

    This engine allows integrating ClickHouse with RabbitMQ.

  • https://t.me/clickhouse_ru
    @hoha_ftf #303664 06:29 PM, 13 Dec 2022
    Вы куда строку подставляете?
  • https://t.me/clickhouse_ru
    В кликхаусе есть оптимизатор который переносит из where в prewhere сам, вряд-ли у вас получится думать лучше чем оптимизатор
  • https://t.me/clickhouse_ru
    в 22.7 исправлено
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303665 #303667 07:06 PM, 13 Dec 2022
    Легко получится, оптимизатор ничего не знает о природе данных.
    Например, у нас WHERE по двум полям. Одно типа UInt32 имеет высокую селективность, оставляет 0.1% строк. Другое - длинная-длинная строка, да еще и с плохой селективностью. В идеале нужно закинуть в PREWHERE первое поле и не закинуть второе.
    Почти уверен, что оптимизатор это не осилит.
    Disclaimer: это мои домыслы, реальные особенности работы PREWHERE не знаю.
  • https://t.me/clickhouse_ru
    разобрался. Сейчас другая проблема. Как подписаться на очередь. При создании таблицы он создает новый Exchanges и очередь. В общем что то новое. сижу курю
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303644 #303670 08:27 PM, 13 Dec 2022
    КХ - колоночная база. Если в запросе много колонок - они все и читаются по всем строкам c пропуском некотороых строк по skip index (разного типа), а потом идет full scan оставшихся. Однако можно сначала прочитать только некоторые колонки, проверить условие и сократить обрабатываемое количество строк (на самом деле блоков). Таким образом из остальных колонкок прочитается меньше данных.
    prewere как раз и делает этот трюк.
    Как использовать - дело ваше. Если знаете что делать. Я вот например как-то делал фильтрацию до final, хоть это и рискованно. Но если знать свои данные, то можно.
    Если не знаете - оставьте оптимизатору. Хотя и он иногда ошибается.
  • https://t.me/clickhouse_ru
    вот это лайк ❤️
    спасибо!
  • 14 December 2022 (200 messages)
  • @yoopay #303677 12:18 AM, 14 Dec 2022
    Привет
  • @yoopay #303678 12:18 AM, 14 Dec 2022
    кто можете помочь?
  • @yoopay #303679 12:18 AM, 14 Dec 2022
    INSERT INTO srcTable VALUES ('AAA', 17, 'const');
    INSERT INTO srcTable VALUES ('AAA', 16, 'const');
    INSERT INTO srcTable VALUES ('AAA', 15, 'const');
    INSERT INTO srcTable VALUES ('AAA', 14, 'const');
    INSERT INTO srcTable VALUES ('FFF', 13, 'const');
    INSERT INTO srcTable VALUES ('FFF', 12, 'const');
    INSERT INTO srcTable VALUES ('FFF', 11, 'const');
    INSERT INTO srcTable VALUES ('EEE', 10, 'const');
    INSERT INTO srcTable VALUES ('AAA', 9, 'const');
    INSERT INTO srcTable VALUES ('AAA', 8, 'const');
    INSERT INTO srcTable VALUES ('AAA', 7, 'const');
    INSERT INTO srcTable VALUES ('DDD', 6, 'const');
    INSERT INTO srcTable VALUES ('CCC', 5, 'const');
    INSERT INTO srcTable VALUES ('BBB', 4, 'const');
    INSERT INTO srcTable VALUES ('AAA', 3, 'const');
    INSERT INTO srcTable VALUES ('AAA', 2, 'const');
    INSERT INTO srcTable VALUES ('AAA', 1, 'const');

    на выходе должно быть:
    AAA 1 const
    BBB 4 const
    CCC 5 const
    DDD 6 const
    AAA 7 const
    EEE 10 const
    FFF 11 const
    AAA 14 const
  • @yoopay #303680 12:19 AM, 14 Dec 2022
    помогите плиз запрос написать
  • @yoopay #303681 12:19 AM, 14 Dec 2022
    нужно убрать повторы идущие подряд
  • @yoopay #303682 12:29 AM, 14 Dec 2022
    WITH cte AS (
    SELECT id,
    name = LAG(name) OVER (ORDER BY id) AND value = LAG(value) OVER (ORDER BY id) flag
    from TEST
    )
    DELETE
    FROM test
    WHERE EXISTS ( SELECT NULL
    FROM cte
    WHERE test.id = cte.id AND flag )

    нужно его на clickhouse переписать
  • @yoopay #303685 02:43 AM, 14 Dec 2022
    Как узнать Engine? На песочнице работает как нужно, а как хочу запустить его в консоле, вообще работает так, как не нужно
  • https://t.me/clickhouse_ru
    @konnectrl #303687 03:14 AM, 14 Dec 2022
    Что не так как нужно ? О чём вы ? Это чатик не Яндекса если что
  • @yoopay ↶ Reply to #303687 #303688 03:22 AM, 14 Dec 2022
    На песочнице запрос работает правильно, но в консоле он просто убирает первую и последнюю строку. Что не так?
    Песочница - https://fiddle.clickhouse.com/3a76adcc-7652-4dcd-a5e6-ec92735604b0
  • @yoopay #303689 03:22 AM, 14 Dec 2022
    Консоль
  • @yoopay #303690 03:22 AM, 14 Dec 2022
    правильный вид
  • @yoopay #303691 03:23 AM, 14 Dec 2022
    Впервые такое вижу 😑
  • https://t.me/clickhouse_ru
    @konnectrl #303692 03:31 AM, 14 Dec 2022
    Версии одинаковые ?
  • https://t.me/clickhouse_ru
    @konnectrl #303693 03:43 AM, 14 Dec 2022
    1. Что вам нужно, это установить новый кликхаус https://clickhouse.com/docs/ru/getting-started/install#dostupnye-varianty-ustanovki . У вас установлена очень плохая версия ... Там миллиард было фиксов
  • @yoopay #303694 03:45 AM, 14 Dec 2022
    В реальной БД:
    Версия клиента - 22.2.2.1, сервера 22.1.2
    В песочнице пробовал и ту и другую выставлять
  • https://t.me/clickhouse_ru
    @konnectrl #303695 03:57 AM, 14 Dec 2022
    В песочнице уже может пропачена быть
  • https://t.me/clickhouse_ru
    @konnectrl #303696 03:58 AM, 14 Dec 2022
    Мы же видим только 2 цифры версии ...
  • @yoopay ↶ Reply to #303696 #303697 04:22 AM, 14 Dec 2022
    Исключительно только скриншотам доверяете?
  • https://t.me/clickhouse_ru
    @perestoronin #303698 04:24 AM, 14 Dec 2022
    Подскажите, интеграцию с nats.io по части jetstream планируется допиливать, если да, то когда ?
  • https://t.me/clickhouse_ru
    Нет, я знаю что версия 22.1 отвратительная версия и проблема скорей всего в ней.
  • https://t.me/clickhouse_ru
    Issue на GitHub создайте, тут не сидят разработчики обычно
  • https://t.me/clickhouse_ru
    Да есть она и давно потому и спросил. https://github.com/ClickHouse/ClickHouse/issues/39459
    Add JetStream persistence support for NATS · Issue #39459 · ClickHouse/ClickHouse

    PR #32388 implemented support for NATS. NATS has a built-in distributed persistence system called JetStream which enables new functionalities and higher qualities of service on top of the base &amp...

  • https://t.me/clickhouse_ru
    @perestoronin #303702 04:28 AM, 14 Dec 2022
    Понадеялся вдруг кто инсайдом обладает
  • https://t.me/clickhouse_ru
    @konnectrl #303703 04:33 AM, 14 Dec 2022
    Ну я бы предложил тэгнуть Алексея может он не видел это issue и попросить от него ответа. Так же есть Roadmap на 2023 открытое обсуждение сейчас идёт, возможно это issue туда добавить
  • https://t.me/clickhouse_ru
    @rpuropu #303704 04:34 AM, 14 Dec 2022
    Подскажите пожалуйста, а почему в клике запросы выполняются то на одном ядре, то на всех? Как это регулировать?
  • https://t.me/clickhouse_ru
    А что именно вы хотите регулировать ? Количество потоков выполнения ?
    Количество потоков выполнения - max_threads ( https://clickhouse.com/docs/en/operations/settings/settings/#settings-max_threads )
    Settings | ClickHouse Docs

    allownondeterministicmutations

  • https://t.me/clickhouse_ru
    Клик достался в наследство, хотелось бы понять что вообще может влиять на выполнение..
  • https://t.me/clickhouse_ru
    @konnectrl #303707 04:52 AM, 14 Dec 2022
    Процессор/Оперативная память/скорость хранилища
  • https://t.me/clickhouse_ru
    @rpuropu #303708 04:57 AM, 14 Dec 2022
    Как я понял коллег, они просто включают htop на машинке и смотрят сколько ядер нагрузится при выполнении запроса. Выявили такую закономерность, что клик не одинаково утилизирует ресурсы при выполнении запросов.
  • https://t.me/clickhouse_ru
    @konnectrl #303709 05:01 AM, 14 Dec 2022
    Ну понятие Нормально/не нормально, сложно интерпретировать
  • @starodubcevnikita #303710 05:01 AM, 14 Dec 2022
    Здравствуйте чат, подскажите, как нужно изменить запрос, который определял бы последнюю дату, в которую есть отзывы в диапазоне и считал сумму отзывов именно в эту дату, с учетом того, что не в каждую дату диапазона могут быть отзывы.

    Накидал пример в песочнице
    https://fiddle.clickhouse.com/f8275b3e-fa42-456d-890b-008d60ad90db
  • https://t.me/clickhouse_ru
    GROUP BY parent_category, category, date
    ORDER BY date DESC
    LIMIT 1
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303708 #303712 05:14 AM, 14 Dec 2022
    зависит от запроса, зависит от данных. Например insert по умолчанию делается в один поток, select согласно max_threads, но там ещё 100500 нюансов в зависимости от плана запроса и удачности или неудачности сделанных оптимизаций.
    Не очень понятно что вы хотите узнать? Что нужно сделать, чтобы занять больше ядер? Короткий ответ очевиден - увеличивать паралелизм запросов. Но как это сделать в вашем конкретном случае - это длинная и большая тема по проектированию схемы данных и запросов под нее.
  • https://t.me/clickhouse_ru
    я постараюсь вникнуть получше, чтоб понять
  • Увы так не пойдет, мне нужны все записи, не одна
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303714 #303715 05:23 AM, 14 Dec 2022
    ну посчитайте эту дату отдельно - https://fiddle.clickhouse.com/de6b125d-03da-49e8-a717-1289ab2a8155
  • Не совсем то, что нужно, т.к. я не могу делать выборку исходя из какой-то даты в where, у меня есть только диапазон. Можно ли как-то изменить эту конструкцию, чтобы убрать статическое значение даты? sumIf(feedback_count, date = toStartOfDay(toDate('2022-12-02 23:59:00')))

    Примерно вот так (но оно, конечно не работает, из-за ограничений стандарта)
    sumIf(feedback_count, date = toStartOfDay(anyLast(date)))
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303716 #303717 06:05 AM, 14 Dec 2022
    мне по прежнему не понятно что там у вас за дата и как она соотносится с группировкой. попробуйте написать вопрос на хорошем русском языке полной фразой, с необходимыми подробностями.
  • https://t.me/clickhouse_ru
    @Segate #303718 06:07 AM, 14 Dec 2022
    У меня есть условие join'a:
    victim as victim
    LEFT OUTER JOIN tj.tlock as blocker
    on victim.WaitConnections=blocker.ConnectID
    and victim.Regions=blocker.Regions
    and victim.exactVictimDateTime >blocker.`DateTime`

    При попытке выполнения я получаю ошибку:
    Code: 403. DB::Exception: Unsupported JOIN ON conditions. Unexpected 'exactVictimDateTime > DateTime': While processing exactVictimDateTime > DateTime.

    DateTime и exactVictimDateTime Это DateTime64(6)

    Почему не срабатывает операция сравнения на больше меньше?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303718 #303719 06:12 AM, 14 Dec 2022
    вот такой sql тут. посмотрите на ASOF JOIN - https://clickhouse.com/docs/en/sql-reference/statements/select/join/#asof-join-usage
    JOIN Clause | ClickHouse Docs

    Join produces a new table by combining columns from one or multiple tables by using values common to each. It is a common operation in databases with SQL support, which corresponds to relational algebra join. The special case of one table join is often referred to as “self-join”.

  • https://t.me/clickhouse_ru
    потому что JOIN в ClickHouse это плохая идея
  • https://t.me/clickhouse_ru
    в общем JOIN умеет только equal сравнения =(
  • Надеюсь так будет понятнее
    Есть таблица, которая хранит в себе данные для аналитики, в ней 20 столбцов.
    Для подготовки запроса нужны только столбцы "category", "parent_category", "product", "date", "feedback_count".
    Цель запроса - получить сумму отзывов, сгруппированных по "parent_category", "category", которые были добавлены в последний день между интервалом дат. То есть если в последнюю заданную дату интервала записи нет, то нужно уменьшить дату на 1 день, если в ней тоже нет, то уменьшить ещё на 1 день и так далее.
    К примеру: есть категория - "Автотовары ("parent_category")"->"Комплектующие для ремонта двигателя ("category")". Мне нужно получить сумму отзывов товаров в этой категории ("category") на последний день в который есть отзыв в интервале в выборке. Задаю интервал 01.11.22 - 01.12.22. В этом интервале отзывы есть только 03.11.22, 11.11.22, 23.11.22. запрос должен посчитать количество отзывов 23.11.22.
  • https://t.me/clickhouse_ru
  • @modesco #303724 06:35 AM, 14 Dec 2022
    Есть 2 достаточно большие таблицы с одинаковой структурой, в первой 1.2 млрд записей, во второй 500 млн. Данные пересекаются, но около 100 млн записей второй таблицы отсутствуют в первой.

    Как эффективно перелить недостающие данные из второй таблицы в первую?

    Тип движка replicatedmergetree, соответственно можно insert ignore бахнуть и затем otimize table final. Но объём данных 500 Гб и не хочется впустую такие объёмы гонять.

    Может есть более элегантное решение? Например выбрать недостающее через Left join?
  • мб как вариант not in использовать в фильтре, ну и добавить еще фильтр, например если записи по месяцам
  • спасибо, попробую вариант с not in
    даты хранятся в виде datetime с 2017 года..
    отдельное поле с датой не было необходимости делать
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303722 #303727 06:41 AM, 14 Dec 2022
    тогда вам правильно советовали про group by category, parent_category, d Но немного неверно сказали про limit 1. Правильнее будет limit 1 by d - https://fiddle.clickhouse.com/f91b0a46-aec2-40c8-86fb-d9714be72267
  • https://t.me/clickhouse_ru
    ну нет же
    limit 1 by category, parent_category
  • https://t.me/clickhouse_ru
    @maxonches_D #303729 06:44 AM, 14 Dec 2022
    Всем привет. Помогите плиз с запросом, не понимаю как можно обойтись без lagInFrame (заменить на подзапрос или как-то еще), но чтобы вывод не поменялся https://fiddle.clickhouse.com/8e632d1d-e960-4445-bd2d-f535be349344
    Хелп 😬
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303728 #303730 06:46 AM, 14 Dec 2022
    конечно же. Разговор и написание sql не совместимы :)
  • https://t.me/clickhouse_ru
    По итогу надо argMax по дате, не ?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    Пишу с телефона, там надо докрутить ещё последний элемент от джойна
  • ну у вас в запросе есть сравнение соседей, вот тут варианты есть еще, но вы как раз воспользовались одним из
    https://kb.altinity.com/altinity-kb-queries-and-syntax/lag-lead/
    медленный over()?
  • Да, либо anyLast(), но в том запросе, который писал я так не получиться
  • Спасибо! В принципе то, что нужно, сейчас попробую на данных!
  • https://t.me/clickhouse_ru
    @whitethemight #303738 07:22 AM, 14 Dec 2022
    Товарищи, помогите разобраться.
    Запускаю 3 ноды (clickhouse-keeper)
    Пишет следующую ошибку:
    failed to send prevote request: peer 2 (node2:9234) is busy
    Но нигде не запущен порт 9234 (raft-configuration)
    И вопрос у меня, clickhouse-keeper на localhost должен работать или нет?
    У меня работает на 127.0.0.1
    Конфигурация следующая:
    <clickhouse>
    <keeper_server>
    <listen_host>0.0.0.0</listen_host>
    <tcp_port>2181</tcp_port>
    <server_id>2</server_id>
    <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
    <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>

    <coordination_settings>
    <operation_timeout_ms>5000</operation_timeout_ms>
    <session_timeout_ms>10000</session_timeout_ms>
    <raft_logs_level>trace</raft_logs_level>
    </coordination_settings>

    <raft_configuration>
    <server>
    <id>1</id>
    <hostname>node1</hostname>
    <port>9234</port>
    </server>
    <server>
    <id>2</id>
    <hostname>node2</hostname>
    <port>9234</port>
    </server>
    <server>
    <id>3</id>
    <hostname>node3</hostname>
    <port>9234</port>
    </server>
    </raft_configuration>
    </keeper_server>
    </clickhouse>
    Почему на 127.0.0.1?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303724 #303739 07:33 AM, 14 Dec 2022
    IN всегда лучше JOIN, однако тоже строит хеш и жрет память, и для 500М ключей может сожрать всю RAM. В данном случае я бы еще попробовал select except. Не уверен что это сильно лучше, но попробовать точно стоит.
  • https://t.me/clickhouse_ru
    если у вас 3 ноды, то как вы их запускаете?
    на 3 разных серверах?

    Не должен он коенчно на 127.0.0.1 висеть

    что
    ss -nlp | grep 9234 говорит?
  • https://t.me/clickhouse_ru
    tcp LISTEN 0 128 *:9234 *:* users:(("clickhouse-keep",pid=17842,fd=10))
    Да, на 3х разных серверах
  • https://t.me/clickhouse_ru
    @whitethemight #303742 07:43 AM, 14 Dec 2022
    root@test-clickhouse-server-2:/etc/clickhouse-server# netstat -tulpn
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 127.0.0.1:2181 0.0.0.0:* LISTEN 17842/clickhouse-ke
  • https://t.me/clickhouse_ru
    <listen_host>0.0.0.0</listen_host>

    должен быть снаружи <keeper_server>
  • https://t.me/clickhouse_ru
    Завелось после этого на 0.0.0.0
    Но ошибка пока такая же :
    failed to send prevote request: peer 2 (node2:9234) is busy
    Возможно ли это из - за того что нет вообще пока что remote_servers.xml?
    Грешу на файрволл, сейчас попробую открыть порт.
  • https://t.me/clickhouse_ru
    @al_leks0 #303746 07:50 AM, 14 Dec 2022
    Подскажите пж, можно ли создавать группу шардов на одном сервере? И даст ли это какие-то преимущества по сравнению с использованием всего сервера как одной машины?
  • https://t.me/clickhouse_ru
    remote_servers
    вообще не при делах

    вам надо киперы сначала чтобы кворум нашли
  • https://t.me/clickhouse_ru
    ну вы сначала проверьте что по 9234 порту ходит трафик между нодами, да
  • https://t.me/clickhouse_ru
    @Segate #303749 07:52 AM, 14 Dec 2022
    А есть функция которой можно разделители строк(crlf) убрать в поле? а то trim этого не делает
  • https://t.me/clickhouse_ru
    преймуществ кроме гемороя, особо не даст

    шард это группа реплик которая содержит изолированный от остальных набор данных
  • https://t.me/clickhouse_ru
    Спасибо
  • https://t.me/clickhouse_ru
    SELECT trim(BOTH '\r\n' FROM '\rHello, world!\n');
  • https://t.me/clickhouse_ru
    просто есть такая штука как circular replication
    и есть люди которые считают что можно так экономить ресурсы смешивая реплики от разных шардов на одном и том же сервере

    но по факту от этого только геморой, потому что потом это умаешься поддерживать и масштабировать
  • https://t.me/clickhouse_ru
    Спасибо, сейчас всё получилось.
    Только вопрос в другом сейчас, на двух нодах из 3х запустил в виде демона.
    А на одной не могу. Команда точно такая же только меняю цифру конфига.
    sudo -u clickhouse clickhouse-keeper --daemon --config /etc/clickhouse-server/enable_keeper1.xml
    Как можно отдебажить это?
    2> не пишет ничего в лог....
    А без —daemon запускается нормально.
  • https://t.me/clickhouse_ru
    <logger> внутри <clickhouse>
    настройте и логи смотрите
    https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings/#server_configuration_parameters-logger
    Server Settings | ClickHouse Docs

    builtindictionariesreload_interval

  • https://t.me/clickhouse_ru
    Что - то я аж растерялся
    Poco::Exception. Code: 1000, e.code() = 0, Exception: Cannot change directory to /opt/cores/, Stack trace (when copying this message, always include the lines below):
  • https://t.me/clickhouse_ru
    @whitethemight #303757 08:38 AM, 14 Dec 2022
    Есть ли какие - то идеи?
    Гугл ничего не говорит : с
  • https://t.me/clickhouse_ru
    @rpuropu #303758 08:45 AM, 14 Dec 2022
    Подскажите, как я могу узнать где ещё используется табилца? Есть имя табилцы и известно что она очень много раз используется во вьюхах всяких. И возможно в других базах как foreign table..
  • https://t.me/clickhouse_ru
    @rpuropu #303759 08:46 AM, 14 Dec 2022
    Нужен список "подписчиков"
  • https://t.me/clickhouse_ru
    как один из вариантов
    select * from system.tables where create_table_query like '%table_name%'
  • https://t.me/clickhouse_ru
    Благодарю) что-то смотрю)
  • https://t.me/clickhouse_ru
    такое ощущение что он в корку хочет упасть...
    а /opt/cores недоступен ...

    там дальше stactrace идет какой он?
  • https://t.me/clickhouse_ru
    Poco::Exception. Code: 1000, e.code() = 0, Exception: Cannot change directory to /opt/cores/, Stack trace (when copying this message, always include the lines below):

    0. BaseDaemon::initialize(Poco::Util::Application&) @ 0xdc3767e in /usr/bin/clickhouse
    1. DB::Keeper::initialize(Poco::Util::Application&) @ 0xdc00339 in /usr/bin/clickhouse
    2. Poco::Util::Application::run() @ 0x171c7537 in /usr/bin/clickhouse
    3. DB::Keeper::run() @ 0xdc00090 in /usr/bin/clickhouse
    4. Poco::Util::ServerApplication::run(int, char**) @ 0x171db89a in /usr/bin/clickhouse
    5. mainEntryClickHouseKeeper(int, char**) @ 0xdbfeb93 in /usr/bin/clickhouse
    6. main @ 0x7db00d3 in /usr/bin/clickhouse
    7. __libc_start_main @ 0x7f46c39ff083 in ?
    8. _start @ 0x7ab13ee in /usr/bin/clickhouse
    (version 22.11.2.30 (official build))
    Вот полный
  • https://t.me/clickhouse_ru
    @fenogentov #303764 09:02 AM, 14 Dec 2022
    блин, как найти в поиске
    не делать одиночные записи, а писать во временную таблицу/буфер а в запись уже пачками?
  • https://t.me/clickhouse_ru
    не знаю зачем им /opt/cores

    coredump видимо делать
    mkdir -p /opt/cores
    chgrp clickhouse /opt/cores

    сделайте
  • https://t.me/clickhouse_ru
    Buffer Table Engine | ClickHouse Docs

    Buffers the data to write in RAM, periodically flushing it to another table. During the read operation, data is read from the buffer and the other table simultaneously.

  • https://t.me/clickhouse_ru
    @nataschachu #303769 09:29 AM, 14 Dec 2022
    Привет! Подскажите, пожалуйста, есть ли какие-то настройки для юзеров в CH, которые влияют на скорость выполнения запросов? Я пробую запускать один и тот же запрос в графане (там свой отдельный пользователь) и под рутом непосредственно на сервере. В графане медленнее более чем в 2 раза :)
  • конечно есть, max_threads может быть ограничено
  • ну вы уточните, разные юзеры в графане и на сервере
  • https://t.me/clickhouse_ru
    @nataschachu #303773 09:56 AM, 14 Dec 2022
    спасибо, поищу
  • https://t.me/clickhouse_ru
    Ну так может быть графана генерирует не оптимальный sql ?
  • https://t.me/clickhouse_ru
    @ikeniborn #303775 10:00 AM, 14 Dec 2022
    Что за проблема при подключении монго?
    Type mismatch, expected String, got type id = 16 for column company_id: While executing MongoDB.
  • https://t.me/clickhouse_ru
    не, там простецкий селект по одному полечку
  • https://t.me/clickhouse_ru
    @andreypopp #303778 11:05 AM, 14 Dec 2022
    а кто нибудь знает как можно у CH узнать случился ли ...overflow_mode=break или нет во время исполнения запроса?
  • https://t.me/clickhouse_ru
    Разобрались. Скажите, а с точки производительности. Как быстро данные будут читаться из монги в клик? У кого нибудь была оценка производительности?
  • https://t.me/clickhouse_ru
    Пытаюсь установить из dbeaver-а:
    set enable_global_with_statement = false;

    ошибка:
    SQL Error [113] [07000]: Code: 113, e.displayText() = DB::Exception: There is no session or session context has expired (version 21.8.8.29)
    , server ClickHouseNode(addr=db=default)@190269324
  • @kirik_sec #303781 11:11 AM, 14 Dec 2022
    Всем привет

    В бобре, когда пытаюсь запустить больше одного запроса - пишет ошибку
    DB::Exception: Session is locked by a concurrent client. (SESSION_IS_LOCKED) (version 22.8.8.3 (official build))

    как можно починить?
  • https://t.me/clickhouse_ru
    У дбивера нет сессии. Добавьте параметр в запрос
  • https://t.me/clickhouse_ru
  • спасибо
    мне вроде уже от этого стало лучше
  • https://t.me/clickhouse_ru
    в результате выполнения этого запроса, параметр оказывается установлен в false, но следующий же запрос параметра снова возвращает true. Т.е. можно установить только на уровне запроса?

    select * from system.settings where name = 'enable_global_with_statement'
    settings enable_global_with_statement = false;
  • https://t.me/clickhouse_ru
    Ну или в конфиг
  • https://t.me/clickhouse_ru
    Понятно, спасибо
  • https://t.me/clickhouse_ru
    Ну или использовать другую штуку для запусков запроса
  • https://t.me/clickhouse_ru
    web-клиент умеет?
  • https://t.me/clickhouse_ru
    clickhouse-client точно умеет
  • https://t.me/clickhouse_ru
    @konnectrl #303791 11:27 AM, 14 Dec 2022
    А web фиг знает попробуйте, по идее да
  • https://t.me/clickhouse_ru
    ясно, спасибо
  • @mAX3773 #303794 11:34 AM, 14 Dec 2022
    Товарищи, подскажите пожалуйста)
    Хотелось бы попробовать заюзать clickhouse в оффлайне для некоторых задач (IoT) с небольшой нагрузкой.. думаю достаточно простым вариантом для юзера будет поставить приложение БД на arm64 Android TV приставку и подключить внешний SSD в качестве стораджа)
    Сможет ли CH там жить? 4Gb ram, 1TB ssd допустим..
    вроде бы архитектуру aarch64 он поддерживает, но соберется ли под андройд?
    собрать бы как shared lib и запустить фоновым процессом
  • https://t.me/clickhouse_ru
    Соберется, но хреново (и не юзабельно, ну по крайней мере было раньше).

    https://clickhouse.com/blog/running-click-house-on-an-android-phone/

    4ГБ все таки совсем немного, может проще найти SBC с настоящим линухом и хотя бы 8ГБ памяти?
    Running ClickHouse on an Android phone

    This is a brief description of my experiments with building ClickHouse on Android.

  • https://t.me/clickhouse_ru
    @fenogentov #303797 11:47 AM, 14 Dec 2022
    а никто не встречал реализацию "тарантул+кликхаус"?
    А то из кафки в клик без проблем, а с тарантулом странно что ничего не находится
  • Спасибо, интересная статья!!)

    С настоящим линухом несколько сложнее процесс установки и настройки для обычного пользователя.. все же андройд позволяет это легче провернуть, установить из стора или apk готовое приложение

    Ну и цена устройства на линухе уже прилично выше
    Андрой тв 4Gb стоит 1.5-2тр, 8Gb памяти стоят 3-5тр и это законченное устройство готовое с ethernet, питанием и корпусом)
    Какой-нибудь Raspberry Pi будет дороже в разы, и это конструктор.. да еще и настраивать его юзеру обычному сложно
  • https://t.me/clickhouse_ru
    Смотрели в сторону duckdb?

    Она хотя бы честная еmbedded база
  • https://t.me/clickhouse_ru
    к сожалению не умеет
  • Спасибо, изучу!
    Да хотелось бы взять CH все же, для части клиентов облако, для некоторых специфичных условий ставьте локальную базу.. остальное все универсальное, может и в облако спамить и локально
  • https://t.me/clickhouse_ru
    @konnectrl #303802 12:24 PM, 14 Dec 2022
    А есть какая то тайм сериас база данных с которой легко интегрировать Clickhouse
  • https://t.me/clickhouse_ru
    @fedyanint #303803 12:26 PM, 14 Dec 2022
    Подскажите пожалуйста, а вот ReplacingMergeTree мержит строчки по понятному алгоритму - где ключ круче, ту строчку и берем.
    А вот если мне нужна какая-то более сложная логика мержа, есть ли какой-нибуть мезанизм описать этот мерж? Не обязательно движком каким-нибудь.
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303802 #303804 12:26 PM, 14 Dec 2022
    А какой смысл, коли КХ умеет?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303803 #303805 01:03 PM, 14 Dec 2022
    не круче, а "новее". Поэтому какая бы у вас сложная логика не была, она все равно приведет к одному числу, которое потом и будет сравниваться (ver) с другим, чтобы определить какую строку выкинуть, а какую взять. Сделайте колонку и пишите туда все что навычисляете.
  • https://t.me/clickhouse_ru
    ну тут я как раз про ситуацию, что я не хочу выбирать одно или другое полностью по версии, а хочу именно смержить по своему алгоритму, какие-то атрибуты вабрыть функцией макс, другие в массив напихать. Что-то в этом роде
  • https://t.me/clickhouse_ru
    @fedyanint #303810 01:23 PM, 14 Dec 2022
    (old, new) -> {какая-то логика}
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303809 #303811 01:23 PM, 14 Dec 2022
    ну так сделайте все это и получите число. Все равно в конце будет бинарное сравнение - или одна строка или другая
  • https://t.me/clickhouse_ru
    @fedyanint #303812 01:25 PM, 14 Dec 2022
    вот не согласен с утверждением про одну строку. С одной строкой все понятно.
    Я хочу взять create_date из старой строки, а my_value из новой, например. Про это впрос
  • https://t.me/clickhouse_ru
    тут только переливать в другую таблицу или на уровне приложения эту логику реализовать, или скриптом
  • https://t.me/clickhouse_ru
    aggregateMergeTree не подходит?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303812 #303815 01:27 PM, 14 Dec 2022
    ад какой. я бы не стал так много логики закладывать на Replacing. Если и крутить что-то сложное, то скорее на VersionedCollapsing. Ну или на Aggregating, там тоже интересно получается, но про другое
  • https://t.me/clickhouse_ru
    В collapsing проблема что прошлую запись надо закрыть. А я хотел бы не думать про прошлые записи, но вот если мерж случается, то сделать его по кастомному алгоритму.
  • https://t.me/clickhouse_ru
    @DarshilxD #303818 01:45 PM, 14 Dec 2022
    Всем здравствуйте ,
    Я запускаю clickhouse с одним сегментом и одиночной репликацией в kubernetes с оператором altinity.

    Мы используем replicatedmergetree в качестве механизма, даже если у нас нет реплик или осколков в нашем кластере, просто чтобы гарантировать, что всякий раз, когда мы хотим масштабироваться, мы можем легко это сделать.

    во время мониторинга через оператора высоты я обнаружил одну проблему: время ожидания моего зоопарка слишком велико.

    запрос, который мы использовали в нашей панели для получения времени ожидания:

    SELECT
    (intDiv(toUInt32(toDateTime(concat(substr(toString(event_time), 1, 16), ':00'))), 2) * 2) * 1000 as t,
    avg(ProfileEvent_ZooKeeperWaitMicroseconds) as ProfileEvent_ZooKeeperWaitMicroseconds
    FROM system.metric_log

    WHERE event_date >= toDate(1669703043) AND event_date <= toDate(1669704843) AND event_time >= toDateTime(1669703043) AND event_time <= toDateTime(1669704843)

    GROUP BY t

    ORDER BY t
  • @1272348401 #303819 01:50 PM, 14 Dec 2022
    Ребята, всем привет.
    Создала MV + AggregatingMergeTree таблицу. В нее падают и insert и update данные.

    Если как пример - в таблице ключ это ид_контакта, а в uniqExactMerge кол-во его заказов. Заказ может быть отменен, поэтому по контакту придет update заказа с определенным статусом отмены.

    Итогом AggregatingMergeTree - ид_контакта и его кол-во заказов (актуальных)

    Подскажите, как тогда правильно настроить расчет uniqExactMerge , чтобы по ключу у меня вычитался отмененный заказ? И возможно ли это вообще при такой конструкции?
  • Looks like start of the thread is here https://t.me/clickhouse_en/49123
  • https://t.me/clickhouse_ru
    вам там нужен не uniqExact скорее всего, а SUM. новый заказ +1, отмена заказа -1, апдейт 0
  • Uniq минусы не сможет посчитать
  • https://t.me/clickhouse_ru
    @m1khal3v #303823 01:52 PM, 14 Dec 2022
    на уровне MV чтото вроде status = 'cancel' ? -1 : 1 AS sign
  • https://t.me/clickhouse_ru
    если заказ может быть только отменен и после этого не разотменен обратно, то можно сделать две колонки, одна с добавленными заказами, а одна - с отмененными. если жизнь сложнее, то хуже.
  • Спасибо, попробую
  • https://t.me/clickhouse_ru
    Да, но я думал, что смогу получить больше ответов здесь, в этой большой группе
  • Не, если отменили, то все - отменен. По крайне мере кейсов таких не ловили.
    Попробую сейчас вариант - status = 'cancel' ? -1 : 1 AS sign.

    Спасибо большое
  • https://t.me/clickhouse_ru
    если события появления заказа и отмены приходят ровно по одному разу, то лучше действительно сумму считать, а не uniq, дешевле будет
  • https://t.me/clickhouse_ru
    @enclaved #303829 02:23 PM, 14 Dec 2022
    можно ли как-нибудь узнать примерное число строк и колонок, которое будет задействовано при выполнении запроса по заданному WHERE? для целей ограничения максимального датасета для запроса, чтобы юзеры не делали слишком тяжелые выгрузки.
  • https://t.me/clickhouse_ru
    @lgtwb ↶ Reply to #303829 #303830 03:06 PM, 14 Dec 2022
    у некоторых функций есть возможность приближенного вычисления
  • https://t.me/clickhouse_ru
    @sima_cianea #303831 03:06 PM, 14 Dec 2022
    Всем привет! Подскажите плиз, что значит такая ошибка?
  • https://t.me/clickhouse_ru
    @sima_cianea #303832 03:07 PM, 14 Dec 2022
    Не понимаю,что мне сделать, чтобы клика перестала ругаться
  • https://t.me/clickhouse_ru
    функций может и не быть:

    SELECT a, b, c FROM t WHERE x AND y AND z

    мне нужно как-то оценить вычислительную сложность подобного запроса и либо пропустить его, либо отклонить с ошибкой без фактического выполнения
  • https://t.me/clickhouse_ru
    @Pinka_Boyka #303835 03:11 PM, 14 Dec 2022
    Всем привет, может кто подсказать какой графический интерфейс для КХ юзаете?
    какой лучше и т.п.
  • https://t.me/clickhouse_ru
    @Pinka_Boyka #303836 03:11 PM, 14 Dec 2022
    вот ссыль навсякий
    https://clickhouse.com/docs/ru/interfaces/third-party/gui/
  • https://t.me/clickhouse_ru
    какой плагин для графаны?
  • https://t.me/clickhouse_ru
    Metabase, его тут нет
  • https://t.me/clickhouse_ru
    в плагине который от Altintiy относительно медленно парсится JSON
  • https://t.me/clickhouse_ru
    Ок, чекну, спасибо
  • https://t.me/clickhouse_ru
    из интересного для аналитиков последнее время
    https://querybook.org
  • https://t.me/clickhouse_ru
    блин
    То есть сам КХ не рекомендует его
    Это подозрительно
  • хаха, просто его не написали)
  • https://t.me/clickhouse_ru
    Для аналитиков мы выводим все в графану))
  • https://t.me/clickhouse_ru
    @Pinka_Boyka #303845 03:17 PM, 14 Dec 2022
    А так спасибо за ответы
  • redash использовал раньше
  • https://t.me/clickhouse_ru
    Connecting Metabase to ClickHouse | ClickHouse Docs

    Metabase is an easy-to-use, open source UI tool for asking questions about your data.

  • https://t.me/clickhouse_ru
    еще есть
    https://github.com/apache/superset/

    и
    https://mprove.io/
    GitHub - apache/superset: Apache Superset is a Data Visualization and Data Exploration Platform

    Apache Superset is a Data Visualization and Data Exploration Platform - GitHub - apache/superset: Apache Superset is a Data Visualization and Data Exploration Platform

  • https://t.me/clickhouse_ru
    @lgtwb ↶ Reply to #303833 #303849 03:20 PM, 14 Dec 2022
    SELECT if((SELECT COUNT() FROM abc293e51bd4e488e8c8b493d0fc30871_index WHERE x AND y AND z) < 10000, (SELECT COUNT() FROM abc293e51bd4e488e8c8b493d0fc30871_index), 'error while processing extra large query')
  • https://t.me/clickhouse_ru
    @lgtwb #303850 03:20 PM, 14 Dec 2022
    Хз насколько поможет, но можно использовать тернарный оператор
  • https://t.me/clickhouse_ru
    Правильный) официальный
  • https://t.me/clickhouse_ru
    О! Но вроде не альтинити, спасибо
  • https://t.me/clickhouse_ru
    https://github.com/grafana/clickhouse-datasource ?
    вот этот?

    какой протокол бинарный или http?
    GitHub - grafana/clickhouse-datasource: Grafana Plugin for ClickHouse

    Grafana Plugin for ClickHouse. Contribute to grafana/clickhouse-datasource development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    @xoradd #303855 04:08 PM, 14 Dec 2022
    Господа, кто нибудь реализовывал генератор ID (инкрементальный) при помощи ZK или CH-keeper?

    Вот уважаемый @den_crane вот тут примерно объяснил как:
    https://github.com/ClickHouse/ClickHouse/issues/5681#issuecomment-630231111

    Но я не особо понял как, т.к. только сегодня постигал азы запуска и настройки keeper.
    Auto-increment column are not support · Issue #5681 · ClickHouse/ClickHouse

    (you don't have to strictly follow this form) Use case When inserting data, you need to uniquely identify each row of records using Integer. For example: AUTO_INCREMENT in mysql: CREATE TAB...

  • https://t.me/clickhouse_ru
    А к нему клик можно подключить?
  • https://t.me/clickhouse_ru
    вы про querybook ?
    да, можно там sqlalchemy под капотом
    но насколько геморно, пока не понял
  • https://t.me/clickhouse_ru
    он не объяснил, это просто пример запроса который можно было бы на стороне clickhouse как то имплементировать

    но вообще тупая затея с автоинкрементами

    погуглите snowflake id и sonyflake id

    и просто начните правильно генерить идентификаторы на стороне приложения при вставке в БД
  • https://t.me/clickhouse_ru
    там в доке указан еще и clickhouse driver, так что мб совсем не геморно
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303858 #303860 04:14 PM, 14 Dec 2022
    МП не особо хочет именно ГУИДы. Ему привычнее инкрементальные id.
    Поэтому даже доп. сервис для генерации готовы делать.
  • https://t.me/clickhouse_ru
    я не говорил НИЧЕГО про GUID

    snowflake id и sonyflake id это UInt64
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303861 #303862 04:15 PM, 14 Dec 2022
    Я про размерность не уточнял. Да хоть int16
  • https://t.me/clickhouse_ru
    осталось только удачи пожелать вам, сгенерировать монотонно возрастающий числовой идентификатор в int16 в distributed системе =)

    вы таки погуглите, вам легче станет
    не надо кликхаус фигней всякой мучать
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303858 #303864 04:19 PM, 14 Dec 2022
    можно и на стороне КХ генерить что-то типа snowflake id примерно по тому-же принципу. Мы делаем вот так:
    create table if not exists some on cluster replicated (
    pos DateTime64(3) materialized now64(3),
    id UInt64 materialized rowNumberInAllBlocks(),
    table LowCardinality(String),
    d JSON
    ) engine = ReplicatedMergeTree('/clickhouse/replicated/db/some', '{replica}')
    partition by toYYYYMM(pos)
    order by (pos, id);
    можно покритиковать.
  • https://t.me/clickhouse_ru
    now64(3)
    будет одинаковый для всего INSERT блока, а не для строки, насколько помню
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303864 #303866 04:21 PM, 14 Dec 2022
    Да об этом тут инфы полным полно.
    А вот о монотонном упомянул однажды только @den_crane
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303865 #303867 04:21 PM, 14 Dec 2022
    разумеется. поэтому rowNumberInAllBlocks() и везде позиция это тупл (pos, id)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303866 #303868 04:24 PM, 14 Dec 2022
    что такое монотонный в паралельной системе? В кафке монотонность есть внутри партиций, а тут как?
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303868 #303869 04:25 PM, 14 Dec 2022
    Так для этого и нужно вызывать keeper или что то своё, где есть синхронизация (монопольный доступ)
  • https://t.me/clickhouse_ru
    @bvt123 #303870 04:27 PM, 14 Dec 2022
    сделать синхронизацию нынче уже не так сложно - KeeperMap вам в помощь. Не очень понятно что с ней делать, когда у вас 20 тредов блоки перерабатывают. Тормозить их? Будет mysql - там все хорошо, монотонно в один тред и тормозит
  • https://t.me/clickhouse_ru
    @xoradd ↶ Reply to #303870 #303871 04:29 PM, 14 Dec 2022
    Так этот id нужен просто для почти статичных данных. Хотим полностью отказаться от postgres (проект масенький).
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303871 #303872 04:31 PM, 14 Dec 2022
    для почти статических данных я привел пример выше - (now64(3),rowNumberInAllBlocks()) - получите более-менее равномерно растущую позицию. Можно и хост в этот тупл добавить. Но могут быть нюансы.
  • https://t.me/clickhouse_ru
    @anikulov #303873 04:45 PM, 14 Dec 2022
    Добрый вечер, подскажите по вопросу.
    В двух таблицах есть поле - upload_datetime DateTime DEFAULT now()
    В первой таблице- оно фиксирует дату появления записи и все.
    Во второй - при обновлении таблицы поле меняет свое значение и now() каждый раз показывает.
    Таблицы вроде бы +/- похожие, движок MergeTree
  • https://t.me/clickhouse_ru
    @timofei_melnikov #303874 04:53 PM, 14 Dec 2022
    Когда копирую таблицу из MySQL в CH руками или через Airflow, CH видимо преобразует timestamp время к UTC и отнимает 3 часа, как можно избежать этого поведения? В обоих базах time zone по Мск
  • https://t.me/clickhouse_ru
    @fenogentov #303876 05:46 PM, 14 Dec 2022
    У меня по очереди из тарантула приплывают данные.
    но потоки не равномерные.
    Планирую писать в клик через буферную таблицу
    правильно ли я понимаю принцип?
    при запуске микросервиса создать буферную таблицу
    CREATE TABLE merge.hits_buffer AS merge.hits ENGINE = Buffer()
    с IF NOT EXISTS
    потом просто туда пихаю данные и не забочусь ни о чем, они "сами" попадут при нужных условиях?
  • https://t.me/clickhouse_ru
    @fenogentov #303877 05:47 PM, 14 Dec 2022
    2. надо ли как-тодополнительно параметрировать если у нас шардирование таблиц?
  • https://t.me/clickhouse_ru
    @fenogentov #303878 05:48 PM, 14 Dec 2022
    3. есть ли какая то возможность указать выгрузить из этой таблицы, например когда микросервис падает?
  • https://t.me/clickhouse_ru
    OPTIMIZE TABLE buffer_table
    по идее должен флашнуть, но уверенности нет

    вообще по Engine=Buffer нормальных гарантий от sudden restart clickhouse-server нет, данные теряются
    при нормальном shutdown все ок, флашатся
    у вас требования к надежности какие?

    буферезировать где то на стороне приложения не сможете чтобы сразу в MergeTree или в Distributed вставлять?
  • при обновлении строк? alter update?
  • https://t.me/clickhouse_ru
    Значения обновляются у всех строк просто при просмотре таблицы, при нажатии f5 в дбивер
  • https://t.me/clickhouse_ru
    ну если только в памяти или редис
  • https://t.me/clickhouse_ru
    @fenogentov #303883 05:53 PM, 14 Dec 2022
    как раз и рассматривал буфер чтоб не терять данные и не терять скорость
  • https://t.me/clickhouse_ru
    шадрирование к engine=Buffer отношения не имеет

    если вы вставляете мелкими кусками
    и вам надо чтобы потом это разлеталось на шарды
    то destination table в engine=Bufffer( ... ) параметрах задаете другую таблицу с engine=Distributed которая уже будет указывать на целевую engine=MergeTree таблицу, и при вставке сплитит вставленные данные по шардам и пушит их через INSERT INTO ...

    и тогда вставлять можете на любую ноду, хоть раундробином
  • https://t.me/clickhouse_ru
    @fenogentov #303885 05:59 PM, 14 Dec 2022
    а зачем в этом примере CREATE TABLE merge.hits_buffer AS merge.hits ENGINE = Buffer(merge, hits, 16, 10, 100,
    задано AS merge.hit?
    merge.hit - это же целевая таблица?
  • https://t.me/clickhouse_ru
    чтобы структура таблиц была идентичной

    AS merge.hits это другая таблица уже созданная должна быть
  • https://t.me/clickhouse_ru
    да merge.hits целевая таблица
  • @sula_lfc #303888 06:07 PM, 14 Dec 2022
    Всем привет, может кто посоветовать материалы или туториалы по словарям в КХ?
    Из доков чет не догоняю
  • вы наверное добавили столбец после создания таблицы и не материализовали его.
    То есть если добавить поле с дефолтом now() и не материализовать это поле, то будет всегда выводится now()
  • https://t.me/clickhouse_ru
    интересно, спасибо. Думаю да, в эту таблицу добавил по ходу - во второй - было изначально.
  • https://t.me/clickhouse_ru
    а как материализуется столбец?)
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    Спасибо большое.
    В Гугле немного забанили.
  • @serlex777 #303894 07:20 PM, 14 Dec 2022
    Может кто-то подскажет. Копирование из одного MergeTree в другое MergeTree с ограничением по кол-ву потоков в 1. Нет ни группировок, ни сортировок. Зачем КХ 6.5 GB оперативы для выполнения запроса. Не то, чтобы ее нет, просто зачем столько и что на это влияет. Может какие-то настройки.
  • 15 December 2022 (150 messages)
  • @tigrycat #303899 06:27 AM, 15 Dec 2022
    привет!
    подскажите пожалуйста, а где продвинутые кликхаусоводы берут бинарь clickhouse-keeper-converter? а то что-то одни следы кругом, а бинаря нет
  • https://t.me/clickhouse_ru
    https://youtu.be/G9MxRpKlbnI?t=5209
    Думаю тут понятно станет вам
    December 2022 ClickHouse Bay Area Meetup

    Join us for this session on latest #ClickHouse news. See the meetup invite for more information: https://www.meetup.com/san-francisco-bay-area-clickhouse-meetup/events/289605843 #datawarehouse #Meetup ----------------- Check out more ClickHouse resources here: https://altinity.com/resources/​ Join Reddit community: https://www.reddit.com/r/Clickhouse/​ ----------------- Learn more about Altinity, sponsors of this meetup. Site: https://www.altinity.com​ LinkedIn: https://www.linkedin.com/company/alti...​ Twitter: https://twitter.com/AltinityDB

  • спасибо, гляну
  • https://t.me/clickhouse_ru
    Вам на слайд 1 надо глянуть :)
  • @tigrycat #303906 06:38 AM, 15 Dec 2022
    как-то с учетом документации
    https://clickhouse.com/docs/ru/operations/clickhouse-keeper/

    нифига не очевидно...
  • https://t.me/clickhouse_ru
    Ну я тоже первый раз искал долго, где взять обусфактор :)
  • ...ый йод
  • @tigrycat #303909 06:40 AM, 15 Dec 2022
    спасибо еще раз
  • https://t.me/clickhouse_ru
    Да. Бинарный, судя по всему. Какой вы рекомендуете?
  • https://t.me/clickhouse_ru
    Сколько колонок? Order by различается? Тогда надо пересортировывать

    Копирование через insert into … select?
  • https://t.me/clickhouse_ru
    Его и рекомендую

    А как вы замеряете что запрос медленне в два раза? system query_log?
  • https://t.me/clickhouse_ru
    нет) в графане смотрю, что Inspector показывает)) а в clickhouse-client время выводится всегда)
  • https://t.me/clickhouse_ru
    @nataschachu #303914 07:12 AM, 15 Dec 2022
    аа я поняла, что смотрю total request time, а надо на data processing time же? это и есть время выполнения запроса, да?
  • https://t.me/clickhouse_ru
    Там же выбрать можно
  • https://t.me/clickhouse_ru
    @ealexandr #303917 07:36 AM, 15 Dec 2022
    Всем привет. Не работает lower на кириллице. В чем может быть проблема?
  • https://t.me/clickhouse_ru
    lowerUTF8('КиРИЛЛИЦА')
  • select lowerUTF8('русскКИЕ СЛОВА');
  • https://t.me/clickhouse_ru
    @ealexandr #303920 07:38 AM, 15 Dec 2022
    Так просто. Спасибо!
  • @nine11ven #303921 07:40 AM, 15 Dec 2022
    Привет!

    Столкнулся с неожиданным поведением операции replace partition – мб кто-нибудь встречался с подобным, распознает сходу и сможет что-то подсказать? Буду безумно благодарен за любые наводки. Гугл молчит 🙁

    Вкратце, возможна ли ситуация, когда replace partition операция может не подтягивать те строки, что не успели физически закрепиться в основном движке таблицы (т.е. лежали на момент перемещения партиции с ними в условном WOS)?

    Иными словами, в tmp таблицу A сделали 10 крупных последовательных инсертов (по инсерту на партицию), а затем сразу же переместили эти партиции в таблицу Б. Возможно ли, что в таблицу Б не доедет часть строк по этим 10 инсертам (потому что инсерты не успели "закрепиться" в А на момент реплейса)?
  • Копируется 30 искодных полей. Ордер различается. В той таблице куда копируется PK по одному полю (order by не задан). Через CREATE TABLE AS SELECT. Печально другое, что объем требуемой памяти растет в линейной зависимости от того объема, который нужно скопировать. Если поставить больше интервал, то получаем выход за допустимый лимит. Чтобы выполнить такую операцию, по сути нужно самому разбить запрос на куски. Вообщем очень странное поведение. Как по мне, так подобная операция должна потреблять константный объем памяти. Да, он может быть меньше или больше, но в любом случае не расти линейно. Выставлены такие лимиты и они собственно не работают.
    SET max_memory_usage = 10000000000;
    SET max_bytes_before_external_group_by = 1000000000;
    SET max_bytes_before_external_sort = 1000000000;
    SET join_algorithm = 'auto';
    SET max_threads = 1;
    SET max_distributed_connections = 1;
    SET max_insert_threads = 1;
    Хотя еще раз подчеркну, что явных группировок и сортировок в запросе нет
  • https://t.me/clickhouse_ru
    Привет! Аналогичная проблемы insert через select. Может можно какой то ключик выставить чтоб он вставлял частями?
  • https://t.me/clickhouse_ru
    @whitethemight #303924 07:58 AM, 15 Dec 2022
    Привет всем! Можете поделиться ссылкой на документацию для Clickhouse как создать кластер?
    Уже поднял clickhouse-keeper, сам clickhouse
    3 ноды. 3 разных сервера.
  • https://t.me/clickhouse_ru
    @ilejn #303925 08:08 AM, 15 Dec 2022
    Просветите, пожалуйста, когда используется interserver_http_port. Не сам параметр, а коммуникации CH <=> CH по http.
    Update. Прочитал комментарий в конфиге ;)
    <!-- Port for communication between replicas. Used for data exchange.
    It provides low-level data access between servers.
    This port should not be accessible from untrusted networks.
    See also 'interserver_http_credentials'.
    Data transferred over connections to this port should not go through untrusted networks.
    See also 'interserver_https_port'.
    -->
    Верно ли, что импользуется исключитильно для Replicated таблиц , или для чего-то еще ?
  • https://t.me/clickhouse_ru
    @bron_nikov #303926 08:12 AM, 15 Dec 2022
    всем привет! есть вопрос по организации пайплайна.

    Есть большая табличка фактов: |dttm|event_id|client_id|...
    И есть справочник с клиентскими фичами, которыми необходимо обогатить факты: |client_id|client_feature|
    Мутаций хочется избежать, поэтому само обогащение рассматриваю при переносе фактов в след. слой. Обе таблицы - распределенные (distributed).
    И тут пока нашёл 2 варианта:
    первый через GLOBAL JOIN (но этот вариант смущает из-за джойна как такового, клик - не про джойны)
    второй - "натянуть" DICTIONARY на эту распределенную таблицу и обогащать через dictGet('dict_name', 'client_feature', client_id)
    Словарь создал c LAYOUT(DIRECT()) потому что весь держать в оперативной памяти кажется тяжеловато (всего в словаре 30-40 млн записей)

    В итоге получаю, что через GLOBAL JOIN это работает, а со словарём запрос "уходит в бесконечность", ну или работает оооочень долго
    Казалось, что целевое решение должно быть со словарём, но работает всё сильно дольше, чем рассчитывал.
    Подскажите пж, где что делаю не так, и как правильнее организовать обогащение в моём случае.
    Спасибо!
    (факты переносятся в след. слой чанками по 10-15 минут, справочник фич обновляется раз в день)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303922 #303927 08:13 AM, 15 Dec 2022
    select берет указанные вами данные. insert их сортирует согласно нового order by таблицы. Сортировка - тяжелая операция. Должен ли автоматически включаться external sort в этом случае - вопрос интересный. Можно попробовать в запросе явно отсортировать, с тем чтобы к инсерту данные уже пришли сортированные. И может быть придется выключить сеттинг optimize_on_insert, хотя он и не про сортировки.
    Или по частям. Ничего в этом сложного нет - пишется внешний цикл на любом языке. Можно даже на bash и clickhouse-client.
  • https://t.me/clickhouse_ru
    @bvt123 #303928 08:17 AM, 15 Dec 2022
    На самом же деле во внешнем цикле проблема есть - останов во время его работы. Ну так она есть и при обычном select/insert для терабайтных таблиц. Недавно тут было обсуждение как это делать сложно и правильно - с промежуточной таблицей.
    https://kb.altinity.com/altinity-kb-schema-design/change-order-by/
    How to change ORDER BY

    How to change ORDER BY.

  • Меня не пугают внешние циклы, но странно, что простой запрос не может выполниться из за лимитов
  • @serlex777 #303930 08:28 AM, 15 Dec 2022
    И хочется концептуально понять в чем суть подхода используемого КХ в такой операции. Если это заложено в КХ как нормальное поведение, значит это нужно учитывать в архитектуре базирующихся на нем систем. А возможно это какая-то недоделка
  • https://t.me/clickhouse_ru
    @a11_r1ght #303931 08:29 AM, 15 Dec 2022
    Всем привет.
    Может кто сталкивался с подобной задаче:
    Если необходимость быстро записывать логи в промежуточную таблицу (по дням)
    Потом данные этого дня обрабатывать и складывать в другую таблицу, очищая этот день в промежуточной.
    Как посоветуете решать такую задачу?
  • Все зависит, что вы вкладываете в понятие обработки. Возможно вам подойдут материализованные представления.
  • https://t.me/clickhouse_ru
    В основном, группировки, функции и фильтры
  • MaterializedView Table Engine | ClickHouse Docs

    Used for implementing materialized views (for more information, see CREATE VIEW). For storing data, it uses a different engine that was specified when creating the view. When reading from a table, it just uses that engine.

  • https://t.me/clickhouse_ru
    @whitethemight #303935 08:36 AM, 15 Dec 2022
    Привет всем! Подскажите что делаю не так?
    Received exception from server (version 22.11.2):
    Code: 62. DB::Exception: Received from localhost:9000. DB::Exception: No macro 'shard' in config while processing substitutions in '/clickhouse/tables/{shard}/radacct' at '20' or macro is not supported here. (SYNTAX_ERROR
    keeper_conf.xml
    <?xml version="1.0"?>
    <yandex>
    <listen_host>0.0.0.0</listen_host>
    <zookeeper-servers>
    <node index="1">
    <host>node1</host>
    <port>2181</port>
    </node>
    <node index="2">
    <host>node2</host>
    <port>2181</port>
    </node>
    <node index="3">
    <host>node3</host>
    <port>2181</port>
    </node>
    </zookeeper-servers>
    <macros>
    <shard>1</shard>
    <replica>rmm</replica>
    </macros>
    </yandex>
    Сам запрос:
    CREATE TABLE table_repl (number UInt32) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/table_repl', '{replica}') PARTITION BY intDiv(number, 1000) ORDER BY number
  • https://t.me/clickhouse_ru
    @s_nikolajus #303936 08:40 AM, 15 Dec 2022
    Привет, внезапно повалили ошибки
    Task query-0000504348 is outdated, deleting it
    Will not drop partition 88f930e0b4a796c3158928aa5fc3d0c2, it is empty.

    куда смотреть?
  • https://t.me/clickhouse_ru
    @rpuropu #303937 09:04 AM, 15 Dec 2022
    Здравствуйте. Как-то можно при создании вьюхи добавить к столбцу чистку из регулярки? Надо чтоб оставались только латинские буквы и цифры.
  • https://t.me/clickhouse_ru
    Очень похоже, что Вам сюда:
    https://clickhouse.com/docs/ru/sql-reference/functions/string-replace-functions
  • https://t.me/clickhouse_ru
    спасибо большое!)
  • https://t.me/clickhouse_ru
    @DarshilxD #303940 09:50 AM, 15 Dec 2022
    Привет ребята ,
    у меня есть кластер clickhouse с одной репликой, развернутый с оператором ALTINITY K8S, и у меня есть около 700-730 реплицированных таблиц mergetree ()
    Мое время ожидания ZOOKEEPER составляет более 7-10 секунд, когда я вижу в панели grafana

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

    Сколько времени должно быть лучшее время ожидания ZOOKEEPER?
  • https://t.me/clickhouse_ru
    @DarshilxD #303941 09:50 AM, 15 Dec 2022
    А иногда время ожидания смотрителя зоопарка превышает 40 секунд.
  • https://t.me/clickhouse_ru
    @DarshilxD #303942 09:51 AM, 15 Dec 2022
    я использую эту версию clickhouse: 22.11.2
  • https://t.me/clickhouse_ru
    Для репликации физических файлов между серверами используется
  • https://t.me/clickhouse_ru
    Вроде больше ни для чего
  • @denya133 #303947 10:13 AM, 15 Dec 2022
    Коллеги, подскажите пожалуйста, как можно ограничить потребление памяти при мерже.
    нода падает.
    есть запросы, но они не жрут столько оперативы, идет один большой мерж.
    память 70Гб, докер его отстреливает.
    есть какая то настройка, чтобы указать ему явно не превышать лимит по памяти при мерже?
  • отбой. ))
  • а макрос {shard} где-то в конфигах определен?
  • https://t.me/clickhouse_ru
    можете ссылку скинуть где почитать?
    получается так, для репликации нужно :
    remote_servers
    macros
    zookeeper_servers
    верно ли?
  • @tigrycat #303951 10:36 AM, 15 Dec 2022
    для этого запроса
    CREATE TABLE table_repl (number UInt32) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/table_repl', '{replica}') PARTITION BY intDiv(number, 1000) ORDER BY number
    нужно чтобы в конфиге были определены

    {shard} и {replica}
    <macros>
    <shard>XXXXX</shard>
    <replica>YYYYY</replica>
    </macros>

    для работы реплицируемых таблиц нужен zookeeper (clickhouse-keeper)

    параметры кластера нужно описать в конфиге
    в разделах remote_servers и zookeeper
  • https://t.me/clickhouse_ru
    @ilejn #303952 10:36 AM, 15 Dec 2022
    Подскажите, пожалуйста, как добыть конфигурационый параметр со всех хостов кластера.
    Для определенности, http_port.
    Если исполнить
    select hostName(), getServerPort('http_port') from tdistr2; (где tdistr - Distributed)
    то данные вернутся с хостов, на которых в таблице есть хотя бы одна строка, что для меня не очень удобно.
    если добавить какой-нибудь агрегат, то поведение станет более сложным; это объяснимо, но не приближает меня к решению задачи.
  • https://t.me/clickhouse_ru
    Кажется еще, что данные вернуться только с 1 реплики каждого шарда
    посмотрите https://clickhouse.com/docs/en/sql-reference/table-functions/cluster/
    cluster, clusterAllReplicas | ClickHouse Docs

    Allows to access all shards in an existing cluster which configured in remote_servers section without creating a Distributed table. One replica of each shard is queried.

  • Спасибо! Именно select except спас, другие варианты сильно не умещались в память
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303953 #303955 10:49 AM, 15 Dec 2022
    Да, про реплики верно.
    Решением кажется
    SELECT hostName(), getServerPort('http_port') FROM cluster('shard_cluster', system, one);
    Огромное спасибо!
    "shard_cluster" - имя кластера, с которым мы работает, чисто для примера.
  • Ребята всем привет. Подскажите, пожалуйста.

    Пример : Ключ таблицы AggregatingMergeTree - контакт,
    Я для каждого Контакта должна получить minState(дата заказа) и maxState(дата заказа), так я получаю его даты первого и последнего заказа.
    И на основании их я должна получить в каком Магазине был сделан первый заказ и последний.

    У меня получилось это сделать только с добавлением Магазина в ключ таблицы AggregatingMergeTree и при помощи argMax(магазин, maxMerge(дата последнего заказа)).

    Возможно ли данный подсчет вынести на уровень MV, чтобы не вносить Магазин в ключ таблицы?
  • на уровне МВ обрабытывается только блок инсерта, а если вы в разные блоки/инсерты вставляете первый и последний заказ, то на уровне МВ этого не сделать
  • @segaRock #303958 10:59 AM, 15 Dec 2022
    кто подскажет, как умерить аппетит clickhouse-backup чтобы он не так агресивно ебурил диск? утилизирует в 100% и на этом кажется падает таска по деплою бэкапа. Лучше бы пусть медленно, но уверенно
  • Ну получается, что без добавления ключа не обойтись. Поняла, спасибо большое.
  • @nine11ven #303960 11:00 AM, 15 Dec 2022
    Подскажите, пожалуйста, наткнулся в доке на вот такой момент (скрин) – по дефолту этот параметр равен примерно миллиону строк.

    Правильно ли понимать, что во время условного падения на середине инсерта 4 млн строк – лишь 2 млн успешно запишутся, и запрос при этом вернется с ошибкой? Или все же клик как-то откатит таблицу к состоянию до начала жирного инсерта?
  • https://t.me/clickhouse_ru
    @rclick ↶ Reply to #303955 #303961 11:07 AM, 15 Dec 2022
    здесь тоже будет только по одной реплике, чтобы забрать с каждой - clusterAllReplicas
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #303961 #303962 11:10 AM, 15 Dec 2022
    Мне просто это не важно, но за исправление спасибо, может важно еще кому-нибудь.
  • https://t.me/clickhouse_ru
    @Just_a_man_2022 #303963 11:18 AM, 15 Dec 2022
    Ребят, кто нибудь может пояснить за эту ситуацию?
    Вопрос в том почему по сути одинаковые функции показывают разный результат? Часть скрипта на скрине скрыта т.к. она не существенна
  • https://t.me/clickhouse_ru
    Ну так откройте доку, там везде написано
  • Разные движки может? 🤔
  • @457900023 #303966 11:21 AM, 15 Dec 2022
    Всем привет, после попытки использовать lightweight delete у нас начались проблемы при попытках смержить парты, в логах много ошибок подобных этой Code: 49. DB::Exception: Number of rows in source parts (1662158) differs from number of bytes written to rows_sources file (60314). It is a bug. (LOGICAL_ERROR) (version 22.8.4.7 (official build)). Что-то можно с этим сделать ?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303960 #303967 11:23 AM, 15 Dec 2022
    не надо на это надеется. Считайте, что не откатит. Вставляйте по 1М и желательно в одну партицию. Если повторная вставка будут точно такой-же (идемпотентной), то проблемы почти нет - блоки одинаковые и дубликаты выкинут по контрольной сумме. Но если разные - увы, получите дубликаты.
  • https://t.me/clickhouse_ru
    Так все что написано в доке это uniq и uniqCombined вычисляют приближенное значение а uniqExact точное. Вот дока на примере uniqCombined. Все что написано - вычисляет приблизительно 🙂
  • https://t.me/clickhouse_ru
    Ну вот они вычисляют приблизительно
  • https://t.me/clickhouse_ru
    @konnectrl #303970 11:27 AM, 15 Dec 2022
    Из-за этого разные ответы
  • https://t.me/clickhouse_ru
    походите тут по ссылкам
    https://clickhouse.com/docs/ru/operations/settings/settings/#settings-count_distinct_implementation
  • Это именно то, что интересовало. Спасибо огромное за развернутый ответ!
  • https://t.me/clickhouse_ru
    @tom_leto #303974 11:37 AM, 15 Dec 2022
    Привет!
    Как проверить что полу map != {}
  • https://t.me/clickhouse_ru
    remote_servers для репликации не нужен
    Нужен
    Только для engine=Distibuted
  • https://t.me/clickhouse_ru
    @navi_2 #303976 11:46 AM, 15 Dec 2022
    Всем привет! подскажите, а можно расположить реплики в шардах перекрестно на хостах? или для каждой реплики требуется отдельный хост?
    Можно ли прописать так:
    <shard>
    <internal_replication>true</internal_replication>
    <weight>1</weight>
    <replica>
    <host>host-clickhouse-1</host>
    <port>9000</port>
    </replica>
    <replica>
    <host>host-clickhouse-2</host>
    <port>9000</port>
    </replica>
    </shard>
    <shard>
    <internal_replication>true</internal_replication>
    <weight>1</weight>
    <replica>
    <host>host-clickhouse-2</host>
    <port>9000</port>
    </replica>
    <replica>
    <host>host-clickhouse-1</host>
    <port>9000</port>
    </replica>
    </shard>
  • @bvolodin #303977 11:47 AM, 15 Dec 2022
    Всем привет! Подскажите, если сервер CH беззвучно падает под нагрузкой, где можно покопать на тему причин? База в целом работает, но порой иногда аналитики пишут не совсем эффективные запросы с т.з. памяти и cpu, и запускают их одновременно) Или падение CH под валом неэффективных запросов - это by design и нормально?
  • Не подскажешь в продолжение, пожалуйста, а есть ли какой-то способ на клике делать жирные ACID инсерты сразу в несколько паритций MergeTree? В моем случае получается, что идемпотентность вставки не гарантирована (даг, условно, упал вчера, а сегодня исходники незначительно поменялись – перезапуск даст другую контрольную сумму) – поэтому в случае падения 100% запишутся дубли(
  • разные есть
    select * from(
    SELECT map() as mp FROM numbers(3))
    where notEmpty(mp)
  • https://t.me/clickhouse_ru
    Спасибо!!
    notEmpty не увидел в доках
  • да можно map()!=‘{}’
    хз что эффективнее
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303978 #303982 11:58 AM, 15 Dec 2022
    У меня все вставки ETL ограничены сверху. Сколько бы не насыпалось потом, при повторе их не возьмут.
  • У нас получается, что таким ограничением тоже не поможешь( Данные к вставке предварительно собираются по типу "витрины" – для этого каждый день с hdfs везутся свежие справочники, которые могут немного различаться день ко дню (также существуют отдельные процессы, периодически "выравнивающие" неконсистентность по определенной исторической глубине)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303983 #303984 12:09 PM, 15 Dec 2022
    У меня все сделано на КХ - данные ползут через кафку, сохраняются в стейдж таблицах и потом джойнятся если надо. Словари все в памяти. Все работает маленькими блоками непрерывно. Никаких суточных циклов. Это скорее не ETL but CDC
  • https://t.me/clickhouse_ru
    Что делать то?
  • углубился, увидел - мержи жрут мало, запросы жрут много оперативы (
    тут скорее вопрос - как ограничить время выполнения запроса? и объем памяти запроса?
  • https://t.me/clickhouse_ru
  • благодарю 👍
  • https://t.me/clickhouse_ru
    @mayamika #303989 12:28 PM, 15 Dec 2022
    Добрый день! Кто-нибудь пробовал получать данные из словаря с LAYOUT(IP_TRIE()) через таблицу? Есть ли такая возможность?
  • @5299838755 #303990 12:33 PM, 15 Dec 2022
    Здравствуйте, у меня после перезагрузки части серверов
    кликхаус не стартует, ругаясь на max_suspicious_broken_parts.
    Насколько безопасно повысить в конфиге <merge_tree><max_suspicious_broken_parts>5</max_suspicious_broken_parts></merge_tree> до 150 например? или то, что у меня это происходит - само по себе основание для тревоги?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303983 #303991 12:35 PM, 15 Dec 2022
    Можно вставлять в другую таблицу, а потом аттачить ее парты. Аттач почти атомарный, так что вероятность сбоя весьма мала. Ну или ждать пока насьоящие транзакции допилят.
  • Это отличная идея! Затестируем такое решение.
    А так да, мб полный ACID придет со временем – можно было бы массово переезжать с других олап на кх)
    Спасиб еще раз)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #303992 #303993 12:47 PM, 15 Dec 2022
    Да можно и сейчас. Только придется поменять все подходы.
  • @5299838755 #303994 12:53 PM, 15 Dec 2022
    и еще мини вопрос - есть ли опция включить для mergetree / replicatedMergeTree таблиц fsync?
  • https://t.me/clickhouse_ru
  • я извиняюсь, не очень понимаю, как без remote_servers настроить репликацию? в каком разделе конфига тогда указывать хосты?
  • Сейчас – сложно) У нас якорка. Все супер быстро меняется – крутится на вьюхах.

    Клик привлек именно скоростью, но с ним пришли танцы с бубном по материализации всего этого динамического добра)
  • https://t.me/clickhouse_ru
    У вас при создании replicated таблицы есть два параметра

    Путь в zk и имя вашей реплики

    И ещё есть interserver_http_host

    Ваш сервер регистрируется в zk и пушит туда имена портов и читает имена партеры с других реплик
    Сами парты читает напрямую as is по http
    Через interserver_http_host/port

    Поэтому важно чтобы реплики из разных шардов решались по разным zk путям

    Это все через macros разруливается

    Имена макросов типа {shard} используются в пути

    А {replica} используется как имя реплики
  • https://t.me/clickhouse_ru
    Хосты вы указываете для engine=distributed
  • спасибо. попробую таким образом поднять
  • ого, спасибо. А где это такая дока есть?
  • https://t.me/clickhouse_ru
    ClickHouse/MergeTreeSettings.h at master · ClickHouse/ClickHouse

    ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.

  • @5299838755 #304003 01:10 PM, 15 Dec 2022
    слона то я и не приметил. Спасибо!
  • https://t.me/clickhouse_ru
    @kleinenberg #304004 01:12 PM, 15 Dec 2022
    Всем привет!
    Имею проблемы с удалением устаревших данных!
    Есть таблица

    │ CREATE TABLE cloki.samples_v3
    (
    fingerprint UInt64,
    timestamp_ns Int64 CODEC(DoubleDelta),
    value Float64 CODEC(Gorilla),
    string String
    )
    ENGINE = MergeTree
    PARTITION BY toStartOfDay(toDateTime(timestamp_ns / 1000000000))
    ORDER BY timestamp_ns
    TTL toDateTime(timestamp_ns / 1000000000) + toIntervalDay(7)
    SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1, merge_with_ttl_timeout = 3600 │

    из настроек которой я ожидаю что данные старше 7 дней будут удалены!
    Но они упорно не хотят удаляться.
    Если посмотреть их
    delete_ttl_info_min и
    delete_ttl_info_max

    select partition, name, delete_ttl_info_min, delete_ttl_info_max from system.parts where table = 'samples_v3' and active = 1;

    то они должны быть уже удалены
    Подскажите как подебажить проблему?!!!
  • https://t.me/clickhouse_ru
    @DarshilxD #304005 01:38 PM, 15 Dec 2022
    Guys , is chatGPT correct ? 😂
  • https://t.me/clickhouse_ru
    Ttl тред раз в сутки просыпается
    Если нет merges для старых данных
  • https://t.me/clickhouse_ru
    Если optimize table без final сделать то удаляется ?
  • https://t.me/clickhouse_ru
    @zagirnur #304008 01:46 PM, 15 Dec 2022
    Всем привет! Есть какое то время когда происходит оптимизация AggregatingMergeTree?

    Есть ли какая-то настройка на это?

    Если нет - хорошая ли идея раз в 15 минут самому выполнять OPTIMIZE TABLE?
  • https://t.me/clickhouse_ru
    Делал OPTIMIZE TABLE samples_v3 FINAL;
    но все заканчивалось

    Timeout exceeded while receiving data from server. Waited for 300 seconds, timeout is 300 seconds

    И после 1500+ секунд все заканчивалось
    Данные не удалялись!!
    Но в логах
    tail -f /var/log/clickhouse-server/clickhouse-server.log | grep samples_v3

    и сейчас идет процесс merge, как я понимаю
  • https://t.me/clickhouse_ru
    @enclaved #304010 01:54 PM, 15 Dec 2022
    привет. есть длинный подзапрос SELECT с кучей агрегатных колонок, эти колонки зависят друг от друга. и есть SELECT из подзапроса, который, например, выбирает только 1-2 колонки подзапроса.

    вопрос: достаточно ли умен оптимизатор запросов кх, чтобы исключить из подзапроса те колонки, которые не попадают прямо или косвенно во внешний SELECT?

    пример:

    SELECT d FROM (
    SELECT countIf(x) a, countIf(y) b, countIf(z) c, a - b AS d
    )

    будет ли кх считать колонку c в подзапросе или исключит ее, т.к. ее данные нигде не используются?
  • https://t.me/clickhouse_ru
    вопрос: достаточно ли умен оптимизатор запросов кх, чтобы исключить из подзапроса те колонки, которые не попадают прямо или косвенно во внешний SELECT?

    Да
  • https://t.me/clickhouse_ru
    @enclaved #304012 01:56 PM, 15 Dec 2022
    спасибо
  • https://t.me/clickhouse_ru
    а почему раз в сутки?
    merge_with_ttl_timeout = 3600 - не вот этот его вызывает?
  • @7699150 #304014 02:05 PM, 15 Dec 2022
    Подскажите пожалуйста, заметил что в движке Atomic если я делаю DROP TABLE ON CLUSTER {cluster} – не удаляется запись из Zookeeper.
    Если не ошибаюсь, то в Ordinary запись из Zookeeper удалялась.
    Подскажите, возможно есть какая-то опция чтобы включить эту функцию?
  • https://t.me/clickhouse_ru
    drop table table on cluster cluster sync попробуйте.Она удалится и так, но спустя какое-то время
  • https://t.me/clickhouse_ru
  • Спасибо
    Делаю ровно все так, как описано в этой доке
  • У нас есть два кластера (КХ 22.4) на которых ежедневно крутятся агрегации, которые создают и удаляют таблицы. (Запросы CREATE TABLE ON CLUSTER и DROP TABLE ON CLUSTER)
    Заметил что в зукипере уже 20к+ папок появилось, большинство из которых неактуальны
  • p.s. на одном кластере зукипер, на другом кх-кипер
  • https://t.me/clickhouse_ru
    Хотя в логах я вижу процесс merge, который привел выше,но вывод
    SELECT * FROM system.merges;
    пустой
  • @5970769715 #304025 02:51 PM, 15 Dec 2022
    Всем приветтт;))
  • https://t.me/clickhouse_ru
    /me представляет, как все остальные 7252 участника здороваются с Вами :)
  • https://t.me/clickhouse_ru
    @floxard #304027 02:57 PM, 15 Dec 2022
    ┌─version()─┐
    │ 22.3.3.44 │
    └───────────┘
    <text_log>
    <level>trace</level>
    <database>server_logs</database>
    <table>text_log_null</table>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    <engine>Engine = Null</engine>
    </text_log>
    2022.12.15 17:51:38.340324 [ 55072 ] {} <Error> SystemLog: Custom database name for a system table specified in config. Table `text_log_null` will be created in `system` databas
    e instead of `server_logs`

    но зачем тогда вообще параметр database если оно всё равно создает в system? O_o
  • https://t.me/clickhouse_ru
    Может прост ошибка в лог сообщении?
  • https://t.me/clickhouse_ru
    Ошибки нет. Кх действительно создал её в system
  • https://t.me/clickhouse_ru
    Ну пишите баг репорт поправят
  • https://t.me/clickhouse_ru
    @navi_2 #304034 03:35 PM, 15 Dec 2022
    Всем привет! подскажите, а можно расположить реплики в шардах перекрестно на хостах? или для каждой реплики требуется отдельный хост?
    Можно ли прописать так:
    <shard>
    <internal_replication>true</internal_replication>
    <weight>1</weight>
    <replica>
    <host>host-clickhouse-1</host>
    <port>9000</port>
    </replica>
    <replica>
    <host>host-clickhouse-2</host>
    <port>9000</port>
    </replica>
    </shard>
    <shard>
    <internal_replication>true</internal_replication>
    <weight>1</weight>
    <replica>
    <host>host-clickhouse-2</host>
    <port>9000</port>
    </replica>
    <replica>
    <host>host-clickhouse-1</host>
    <port>9000</port>
    </replica>
    </shard>
  • https://t.me/clickhouse_ru
    @Pinka_Boyka #304035 04:00 PM, 15 Dec 2022
    парни
    хелпаните
    пытаюсь с помощью Metabse приконнектить КХ
    но все время происходит синхронизация
    но
    sql запросы выполняются успешно
    что мне нужно сделать, чтобы я смог чекать все таблицу графически?
  • https://t.me/clickhouse_ru
    @Pinka_Boyka #304036 04:02 PM, 15 Dec 2022
    Connecting Metabase to ClickHouse | ClickHouse Docs

    Metabase is an easy-to-use, open source UI tool for asking questions about your data.

  • https://t.me/clickhouse_ru
    @s_nikolajus #304037 05:28 PM, 15 Dec 2022
    Привет, при большом количестве alter table DROP PARTITION, появляется больша нагрузка на zookeeper и начинаются задержке в репликации и в итоге таймауты Read timed out к нодам КХ. На что можно посмотреть и как можно оптимизировать сетап?
  • https://t.me/clickhouse_ru
    @s_nikolajus #304038 05:32 PM, 15 Dec 2022
    8 нодов КХ, 4+4 репликация, 3 нода ЗК