• 01 January 2022 (38 messages)
  • https://t.me/clickhouse_ru
    @catent ↶ Reply to #251775 #251821 07:52 AM, 01 Jan 2022
    А как получить
    ch-bench-rust 1,44s user 0,77s system 108% cpu 2,033 total
    ?
  • https://t.me/clickhouse_ru
    @catent #251822 07:54 AM, 01 Jan 2022
    Я на чистой машине установил cargo и git, скомпилировал в --release и получается опять следующее:
    ~/ch-bench/ch-bench-rust # time ./target/release/ch-bench-rust
    Rows: 500000000

    real 0m31,700s
    user 0m30,641s
    sys 0m1,092s
  • https://t.me/clickhouse_ru
    "Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz"
    linux 5.11.0-43-generic

    cargo build —release

    time target/release/ch-bench-rust
    Rows: 500000000
    target/release/ch-bench-rust 1,12s user 0,67s system 109% cpu 1,634 total

    time ./ch-bench-faster
    1.062s 500000000 rows 4.0 GB 3.8 GB/s
    ./ch-bench-faster 0,23s user 0,53s system 70% cpu 1,068 total

    Rust драйвер достаточно неплохо написан, так что тут ничего удивительного нет. Думаю, что на запись он тоже не плох, исторически пользуемся Go либой на запись и ее пока хватает, когда упремся будем смотреть на Rust
  • https://t.me/clickhouse_ru
    Лови Растамана!
  • https://t.me/clickhouse_ru
    @catent ↶ Reply to #251824 #251827 10:41 AM, 01 Jan 2022
    Может дело в Intel/AMD, магия какая-то
  • https://t.me/clickhouse_ru
    @catent #251828 10:49 AM, 01 Jan 2022
    А зачем смотреть на раст если гошный драйвер немного быстрее?)
  • А у вас на арме?
  • https://t.me/clickhouse_ru
    @catent ↶ Reply to #251829 #251830 10:53 AM, 01 Jan 2022
    AMD Ryzen 9 5950X
  • https://t.me/clickhouse_ru
    @catent #251831 10:53 AM, 01 Jan 2022
    Сейчас возьму виртуалку с Intel и попробую всё таки воспроизвести
    Я почитал растовый драйвер и он написан так же, как и наш гошный, так что отличий в производительности не должно быть
  • https://t.me/clickhouse_ru
    @catent #251832 11:07 AM, 01 Jan 2022
    Действительно, на Intel раст работает лучше, чем на AMD:
    $ time ch-bench-rust
    Rows: 500000000

    real 0m7.108s
    user 0m6.284s
    sys 0m0.850s

    $ ch-bench-faster
    1.42s 500000000 rows 4.0 GB 2.8 GB/s
  • https://t.me/clickhouse_ru
    @catent #251833 11:10 AM, 01 Jan 2022
    root@intel-bench:~# hyperfine ch-bench-rust ch-bench-faster
    Benchmark 1: ch-bench-rust
    Time (mean ± σ): 5.309 s ± 1.845 s [User: 4.852 s, System: 0.727 s]
    Range (min … max): 2.055 s … 8.683 s 10 runs

    Benchmark 2: ch-bench-faster
    Time (mean ± σ): 1.435 s ± 0.138 s [User: 0.364 s, System: 0.767 s]
    Range (min … max): 1.122 s … 1.588 s 10 runs

    Summary
    'ch-bench-faster' ran
    3.70 ± 1.33 times faster than 'ch-bench-rust'

    UPD: на EPYC
    hyperfine ch-bench-rust ch-bench-faster
    Benchmark 1: ch-bench-rust
    Time (mean ± σ): 3.949 s ± 1.324 s [User: 2.133 s, System: 2.188 s]
    Range (min … max): 2.672 s … 6.198 s 10 runs

    Benchmark 2: ch-bench-faster
    Time (mean ± σ): 2.020 s ± 0.091 s [User: 0.348 s, System: 1.399 s]
    Range (min … max): 1.893 s … 2.225 s 10 runs

    Summary
    'ch-bench-faster' ran
    1.95 ± 0.66 times faster than 'ch-bench-rust'

    Прикольно растовый код работает конечно, каждый раз сюрприз
  • https://t.me/clickhouse_ru
    @olegkovalov #251835 11:40 AM, 01 Jan 2022
    вариативность интригует ночень
  • @vstakhov #251836 11:47 AM, 01 Jan 2022
    у amd и intel как минимум разное поведение в области prefetch
  • @vstakhov #251837 11:48 AM, 01 Jan 2022
    вполне возможно, что компилятор не особо оптимизирует код именно под особенности amd, в случае clang такое наблюдалось когда-то, но потом все стало одинаково плюс-минус с -march=native
  • https://t.me/clickhouse_ru
    @catent #251838 11:49 AM, 01 Jan 2022
    RUSTFLAGS="-C target-cpu=native" cargo build --offline --locked --release
    На AMD Ryzen 9 5950X собирал вот так еще, не помогло
  • https://t.me/clickhouse_ru
    @catent #251839 11:50 AM, 01 Jan 2022
    Почему-то компилятор особенно хейтит 5950x, на эпиках всё более-менее хорошо
  • https://t.me/clickhouse_ru
    @catent #251840 11:50 AM, 01 Jan 2022
    Я проверял на двух машинах 5950x c одинаковым результатом
  • @vstakhov #251841 11:50 AM, 01 Jan 2022
    да вряд ли хейтит - не умеет, скорее
  • https://t.me/clickhouse_ru
    @Imaskar #251842 11:51 AM, 01 Jan 2022
    Так aocc попробуйте, он под амд оптимизирует. Или хотябы -march=znver3
  • https://t.me/clickhouse_ru
    @Imaskar #251843 11:52 AM, 01 Jan 2022
    Известно же давно, что в большинстве компиляторов дефолтные оптимизации под интел.
  • https://t.me/clickhouse_ru
    @catent #251844 11:52 AM, 01 Jan 2022
    Я эту магию не знаю как для раста применить, не умею вообще в него
    Если поможете написать команду cargo, то я попробую
  • https://t.me/clickhouse_ru
    @catent #251845 11:52 AM, 01 Jan 2022
    Почему-то гошный компилятор справляется с задачей не тормозить на райзене
  • native должен учитывать amd/intel
  • https://t.me/clickhouse_ru
    @catent #251847 11:53 AM, 01 Jan 2022
    Но там относительно ручная оптимизация и очень прямолинейный код
  • https://t.me/clickhouse_ru
    @catent ↶ Reply to #251775 #251848 12:25 PM, 01 Jan 2022
    На запись совсем честный бенч у меня не получится сделать, т.к. в оф. драйвере совмещена сериализация и наполнение данных.

    Но если взять CREATE TABLE test_table (id UInt64) ENGINE = Null:
    947ms 500000000 rows 4.0 GB 4.2 GB/s
    vs
    4.057s 500000000 rows 4.0 GB 986 MB/s

    hyperfine:
    hyperfine ch-write-bench-official ch-write-bench-faster
    Benchmark 1: ch-write-bench-official
    Time (mean ± σ): 3.998 s ± 0.109 s [User: 2.767 s, System: 1.244 s]
    Range (min … max): 3.902 s … 4.228 s 10 runs

    Benchmark 2: ch-write-bench-faster
    Time (mean ± σ): 1.103 s ± 0.166 s [User: 0.399 s, System: 0.559 s]
    Range (min … max): 0.874 s … 1.379 s 10 runs

    Summary
    'ch-write-bench-faster' ran
    3.62 ± 0.56 times faster than 'ch-write-bench-official'

    Т.е. на сериализацию разница есть, её не может не быть.
  • https://t.me/clickhouse_ru
    @kshvakov #251849 01:09 PM, 01 Jan 2022
    Ага, я посмотрел бенчмарки, вы их с какой целью делаете?)) Если чтоб просто сделать таблицу с тестами - норм, но вы сравниваете разное и получаете, внезапно, разные результаты. У вас сериализация ровно такая же как и в любой другой реализации нативного протокола на Go, так что особой разницы +- вы не увидите. Есть оверхед на интерфейс совместимости с database/sql, но в плане записи он не сильно критичен, а на чтение оно и не особо нужно в перфомансе (за очень редким исключением). Те в плане бенчмарков можно поставить точку. В том что у вас есть описание нативного формата это огромный плюс для всех, в том числе и для реализции новых драйверов (не все хотят код КХ для этого читать). Думаю, если она повится в каком-то читабельном виде, то ее можно будет поместить на https://clickhouse.com/. Если нужна помощь с техписами, то, при наличии доки, ее можно будет тут найти, и ее помогут превратить в читабельный формат.

    Дальше нужно чтоб API у библиотеки был юзабельным, с этим нужно работать, сейчас у вас просто кусок кода который позволяет создать блок с данными и позволяет его пушнуть на сервер. Этим не удобно пользоваться, у database/sql отличный интерфейс, но реализация сильно так себе, можно его и принять за основу. Хороший пример pgx (https://github.com/jackc/pgx)
  • https://t.me/clickhouse_ru
    @catent ↶ Reply to #251849 #251850 01:17 PM, 01 Jan 2022
    Я делаю бенчмарки на оверхед клиента. У нас получилось свести его в ноль благодаря оптимальной архитектуре.

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

    На микробенчмарках она выигрывает в 60-100 раз, на практике, конечно, все упирается в другое.

    По поводу эргономики: не уверен, что блочная вставка через оф. клиент и через ch отличается, тут скорее удобнее с ch работать (на мой вкус).
  • https://t.me/clickhouse_ru
    @catent #251851 01:20 PM, 01 Jan 2022
    https://github.com/go-faster/ch/pull/11

    Вот тут можно посмотреть, насколько сериализация отличается. Там как раз результаты benchstat в шапке:

    ColFixedStr_EncodeColumn-32 72.5GB/s ± 2% 72.9GB/s ± 0% ~ (p=0.310 n=5+5)
    ColFloat32_EncodeColumn-32 6.73GB/s ± 2% 67.61GB/s ± 1% +904.19% (p=0.008 n=5+5)
    ColFloat64_EncodeColumn-32 11.2GB/s ± 2% 70.3GB/s ± 0% +525.84% (p=0.008 n=5+5)
    ColInt128_EncodeColumn-32 6.57GB/s ± 2% 70.54GB/s ± 1% +974.23% (p=0.008 n=5+5)
    ColInt16_EncodeColumn-32 2.98GB/s ± 2% 61.46GB/s ± 1% +1963.38% (p=0.008 n=5+5)
    ColInt256_EncodeColumn-32 10.3GB/s ± 5% 46.6GB/s ± 1% +350.56% (p=0.008 n=5+5)
    ColInt32_EncodeColumn-32 5.80GB/s ± 2% 67.62GB/s ± 2% +1065.42% (p=0.008 n=5+5)
    ColInt64_EncodeColumn-32 11.2GB/s ± 1% 70.2GB/s ± 1% +524.41% (p=0.008 n=5+5)
    ColInt8_EncodeColumn-32 1.88GB/s ± 5% 54.23GB/s ± 1% +2778.57% (p=0.008 n=5+5)
    feat(proto): optimize encoding by ernado · Pull Request #11 · go-faster/ch

    name old time/op new time/op delta ColBool_Raw_EncodeColumn-32 701ns ± 1% 702ns ± 0% ~ (p=0.635 n=5+5) ClientHello_Encode-32 34.5ns ...

  • https://t.me/clickhouse_ru
    @catent #251852 01:21 PM, 01 Jan 2022
    Но и без этой оптимизации наша имплементация быстрее благодаря более аккуратной работе с BCE.
  • https://t.me/clickhouse_ru
    @catent #251853 01:27 PM, 01 Jan 2022
    Вообще изначально я радовался новым фичам в клиенте (типа DateTime64, open telemetry, проброс прогресса/логов/событий профайлера с сервера), а скорость это так, побочный продукт уже, мы просто увидели что можно ещё быстрее сделать

    Допишу доки, насчёт API как раз думаю, как его улучшить. Дженерики тут сильно помогут для всяких сложных вещей вроде Low cardinality, Map, Nullable, Array и т.д.
  • https://t.me/clickhouse_ru
    @kshvakov #251854 01:45 PM, 01 Jan 2022
    Да, дженерики неплохая штука, ровно как и кодогенерация для типов, можно будет и в clickhouse-go добавить. Кстати, @alexanderzaitsev вы не нашли человека чтоб clickhouse-go мейнтейнил, там есть пул задач, где-то на месяц-два, чтоб привести его в порядок )
  • https://t.me/clickhouse_ru
    Мы не искали, но как раз в этом году появляется задача, где можно допилить драйвер тоже
  • https://t.me/clickhouse_ru
    @kshvakov #251856 01:53 PM, 01 Jan 2022
    Я почему-то помню, что вы его тоже хотели поддерживать) Нам тоже нужно, чтоб новые типы он поддерживал и есть мысли или добавить в то что есть или обновить его полностью и выкинуть старые костыли
  • https://t.me/clickhouse_ru
    @catent #251857 02:03 PM, 01 Jan 2022
    Если что, я буду рад скооперироваться и дать права мейнтейнера на go-faster/ch, так что пишите, если это будет интересно. Не хочется дублировать усилия.

    Думал чуть позже сделать обёртку над database/sql с возможностью когда надо спускаться на уровень ниже.
  • https://t.me/clickhouse_ru
    А так не получится, к сожалению, clickhouse-go нужно поддерживать. Тут, скорее, в обратную сторону лучше;)
  • https://t.me/clickhouse_ru
    @catent #251860 02:25 PM, 01 Jan 2022
    Я изначально думал так сделать, но некоторые вещи без сильной архитектурной переделки не получилось завести.
  • https://t.me/clickhouse_ru
    @catent #251861 02:27 PM, 01 Jan 2022
    Возможно имеет смысл в clickhouse-go разработать высокоуровневый слой над ch, обратно совместимо для database/sql это возможно сделать.

    Но это уже не мне решать, наверное. go-faster/ch я в любом случае буду поддерживать, он используется в довольно критичных местах.
  • https://t.me/clickhouse_ru
    @kshvakov #251862 03:16 PM, 01 Jan 2022
    Я на днях посмотрю как лучше будет сделать, в любом случае реализацию недостающих типов мы подрежем в go-faster)
  • 02 January 2022 (32 messages)
  • @Enjoyq #251868 09:14 AM, 02 Jan 2022
    Всем привет! А только у меня materialized view не обновляется после изменений в таблицах на engine = PostgreSQL, или эти в принципе мёртвый кейс?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #251868 #251869 09:22 AM, 02 Jan 2022
    engine = PostgreSQL - это не полноценная таблица, а прокси, который делает запросы к pg по его протоколу. Она ничего не знает о событиях в pg.
    Если вам нужны именно события, то ваш выбор MaterializedPostgreSQL. Там все иначе - КХ работает членом pg кластера и получает апдейты через WAL. Тут есть шанс применить MV
  • @Enjoyq #251870 09:24 AM, 02 Jan 2022
    Спасибо за развёрнутый ответ
  • https://t.me/clickhouse_ru
    О, materializedpsql убрали тег experimental.
  • https://t.me/clickhouse_ru
    И я бы задался вопросом, какие изменения. Т к materialized view только про инсерты
  • @Enjoyq #251873 09:28 AM, 02 Jan 2022
    Да, только инсерты
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #251872 #251874 09:38 AM, 02 Jan 2022
    я пока не пробовал - самому интересно что там будет прилетать (и будет ли вобще тригериться MV). но по задумке там скорее всего можно и апдейты получить. Это же WAL, который транслируется в события для ArrgeratingMT. Так что некоторые инсерты будут похожи на апдейты :)
  • @kayhanyuksel #251875 11:51 AM, 02 Jan 2022
    Joined.
  • @kayhanyuksel #251876 11:51 AM, 02 Jan 2022
    hello
  • @kayhanyuksel #251877 11:52 AM, 02 Jan 2022
    I would like to ask a question if possible, how can we change the server time of clickhouse to GMT+3 ?
  • @751538974 #251878 11:57 AM, 02 Jan 2022
    На каком языке лучше документация? Вроде замечал какие-то отличия между русской и английской. На каком более полная, свежая?
  • @kayhanyuksel #251879 11:58 AM, 02 Jan 2022
    Я хотел бы задать вопрос, если можно, как мы можем изменить время сервера clickhouse на GMT + 3?
  • https://t.me/clickhouse_ru
    You can change option <timezone>Europe/Moscow</timezone> in confg.xml if you have access to it.
  • https://t.me/clickhouse_ru
    На английском более полная, чем на русском.
  • спасибо
  • https://t.me/clickhouse_ru
    Бывает и на китайском больше описано. Например про bitmap
  • это интересно) спасибо
  • ok , thank you very much.
  • @kayhanyuksel #251886 12:03 PM, 02 Jan 2022
    also I would like to join the slack channel but couldnt login to that
  • https://t.me/clickhouse_ru
    ClickHouse

    ClickHouse DBMS discuss and help

  • will do , thank you very much
  • @1079610813 #251896 05:46 PM, 02 Jan 2022
    /stat
  • https://t.me/clickhouse_ru
    @combot #251897 b o t 05:46 PM, 02 Jan 2022
    Total messages: 251896
  • https://t.me/clickhouse_ru
    На английском, но могут быть отличия в разных языках, так как приносят контрибьюторы.

    И altinity документация очень полезная!
  • @lamestin #251903 09:21 PM, 02 Jan 2022
    Здравствуйте. Запустил по мануалу CH в докере на wsl2. Это нормальная постоянная загрузка ЦП?
  • https://t.me/clickhouse_ru
    А скок у вас цпу и какая версия кх
  • image yandex/clickhouse-server
    4 ядра core i-5 2.5 GHz
  • https://t.me/clickhouse_ru
    Таблиц много?
  • чистая установка, стартовал ничего не добавлял, запросы не выполнял
  • https://t.me/clickhouse_ru
    asynchronous_metrics_update_period_s

    flush_interval_milliseconds

    https://github.com/ClickHouse/ClickHouse/issues/29053#issuecomment-921872518

    Попробуйте
    Sometimes got big iowait after upgrade to 21.8 · Issue #29053 · ClickHouse/ClickHouse

    prev version 21.3 current version 21.8 after upgrading sometimes get big cpu iowait time example: image try to set asynchronous_metrics_update_period_s=60 but its doesnt help

  • @lamestin #251909 09:56 PM, 02 Jan 2022
    а как это вообще диагностировать, что именно использует ресурс?
  • https://t.me/clickhouse_ru
    @djoxid ↶ Reply to #251909 #251910 10:34 PM, 02 Jan 2022
    Я бы начал с docker status
    А так же можно зайти внутрь и там htop, либо глянуть аналоги, которые в образе можно использовать
    Далее почитать логи CH
  • 03 January 2022 (70 messages)
  • @306808707 #251911 07:22 AM, 03 Jan 2022
    Ребята, может немного не в тему. Посоветуйте базу для работы с деньгами, транзакциями (хранение денег в системе, переводы между кошельками). Требования:
    - ACID (особо важна атомарность, изоляция)
    - Максимальная надёжность
    - Возможность шардить
    - Нагрузка около 1к операций в секунду с таблицей

    На данный момент для этого используем Mysql, теоретически должен выполнять задачу свою, тем более опыт с ним есть. Возможно какие-то есть ещё решения, который могут быть использованы в данном кейсе, о которых мы не знаем.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #251911 #251912 07:54 AM, 03 Jan 2022
    clickhouse - аналитическая СУБД, в которой нет ACID и нагрузка в 1k запросов в секунду считается высокой. Оставайтесь на mysql или переходите на postgress. Для транзакций.
    Однако поток транзакций можно отвести в сторону, в другую базу, чтобы делать там аналитические запросы - запросы, которые затрагивают большое количество записей, например вычисление top100 самых активных кошельков за год. Такой запрос убьет mysql, а чтобы оно работало в postgress вам нужен очень продвинутый dba. Тут КХ вам поможет. Но не вместо транзакционной базы, а вместе с ней. Придется обслуживать два отдельных кластера.
  • https://t.me/clickhouse_ru
    xtdb :)
  • Ну и еще вариант: если аналитика не динамическая (считаем всегда одно и тоже) то можно считать с помощью всяких там kafka streams к примеру
  • https://t.me/clickhouse_ru
    1000 tps это небольшая нагиузка для mysql

    Для шардинга возьмите vitess.io
    И не слушайте тех кто будет агитировпть за постгрю

    Это просто пропаганда из зависти что Моську продали два раза
  • @306808707 #251916 09:06 AM, 03 Jan 2022
    Всем спасибо за советы
  • @softbot_xxl #251917 09:12 AM, 03 Jan 2022
    Вы какой уровень изоляции используете? 1к ТПС без шардирования на serializable уже будет на грани, кмк. Поэтому сразу думайте, как будете расширяться (vytess).
  • @softbot_xxl #251918 09:13 AM, 03 Jan 2022
    А использовать repeatable read для денег я бы побоялся.
  • https://t.me/clickhouse_ru
    @nikitosiusis #251919 09:14 AM, 03 Jan 2022
    а как шардирование дружит с атомарными транзакциями?
  • @softbot_xxl #251920 09:15 AM, 03 Jan 2022
    Я думаю витес просто форвардит по ключу.
  • https://t.me/clickhouse_ru
    Да, но не факт, что он serializable поддерживает?
  • https://t.me/clickhouse_ru
    @yourock88 #251922 09:20 AM, 03 Jan 2022
    Я бы лично не рисковал использовать Vitess для денег, но я и не настоящий сварщик и вообще это же правда оффтопик
  • https://t.me/clickhouse_ru
    @catent #251923 09:21 AM, 03 Jan 2022
    Есть ещё Citus (аналог Vitess на постгре), витес использовать не советовал бы, слишком уж там автофейловер сбоку сделан.

    Как минимум нужно пару недель проверить как это себя все ведёт в эксплуатации, мы как раз витесс после такого и отбросили.
  • https://t.me/clickhouse_ru
    @kshvakov #251924 09:58 AM, 03 Jan 2022
    Citus очень кривая штука, да и он для аналитики, хоть и не тянет. Сейчас нет столько денег, чтоб для них БД шардировать нужно было. Так что не стоит себе на ровном месте искать приключений. Умеете в MySQL - юзайте MySQL
  • https://t.me/clickhouse_ru
    @catent #251925 10:05 AM, 03 Jan 2022
    А чем Citus очень кривой? Вроде Microsoft его как-то в своём облаке юзает. Можно где-то почитать о его кривости?
    Для аналитики вроде больше Greenplum упоминают, в Citus есть колоночный движок, но я не знаю, насколько оно там всё хорошо работает, т.к. не пробовал.

    Когда настолько везёт, что данные умещаются на один сервер, действительно лучше использовать один сервер.
    Причем умещаются они даже у LetsEncrypt: https://letsencrypt.org/2021/01/21/next-gen-database-servers.html

    Просто взяли сервера с 2ТБ памяти.
  • https://t.me/clickhouse_ru
    @kshvakov #251926 10:07 AM, 03 Jan 2022
    Мы использовали Citus до clickhouse, потом мигрировали с 9 машин в одну и уменьшили время запросов пары минут до пары секунд, причем часть запросов на Citus не выполнялась никогда. При этом он часто валился, сбоил и разваливался.
  • https://t.me/clickhouse_ru
    @catent #251927 10:11 AM, 03 Jan 2022
    Насколько я понимаю, под задачу нужна OLTP, а не OLAP, но опыт в принципе универсалный.
    То что он разваливася и сбоил это грустно, мы в своем тесте так и не дошли до Citus, остановившись на монге (нам она как раз подошла под OLTP, но там не было вещей вроде биллинга).

    У меня оставалась надежда, что хоть с Citus все более-менее нормально.
  • https://t.me/clickhouse_ru
    @kshvakov #251928 10:18 AM, 03 Jan 2022
    Есть https://github.com/yugabyte/yugabyte-db. Они сильно интереснее чем Citus. Но шардированная реплицируемая БД с транзакциями это очень много компромиссов и зачастую это мало кому реально нужно
    GitHub - yugabyte/yugabyte-db: The high-performance distributed SQL database for global, internet-scale apps.

    The high-performance distributed SQL database for global, internet-scale apps. - GitHub - yugabyte/yugabyte-db: The high-performance distributed SQL database for global, internet-scale apps.

  • @softbot_xxl #251929 10:20 AM, 03 Jan 2022
    Югабайт (Кальвин) заставит делать транзакции предсказуемыми, т.е. интерактивного выяснения, что там лежит прежде чем модифицировать не получится.
  • https://t.me/clickhouse_ru
    @devozerov #251930 10:26 AM, 03 Jan 2022
    Calvin использует FaunaDB, внутри YugaByte идеи Спаннера: http://dbmsmusings.blogspot.com/2018/09/newsql-database-systems-are-failing-to.html
    NewSQL database systems are failing to guarantee consistency, and I blame Spanner

    (Spanner vs. Calvin, Part 2) [TL;DR I wrote a post in 2017 that discussed Spanner vs. Calvin that focused on performance differences. Th...

  • https://t.me/clickhouse_ru
    @yourock88 #251931 10:29 AM, 03 Jan 2022
    Ну собственно также как и CockroachDB, TiDB и FoundationDB, хотя они все немного разные, и я лично ни одну из бы не юзал для денег :))
  • Виноват.
  • https://t.me/clickhouse_ru
    @rvkggwp #251933 11:31 AM, 03 Jan 2022
    Всем привет. Кто-нибудь знает, поменялось ли что-то в поведении argMax и null. Т.е решение через argMax(tuple(x), y).1 вернет null, но это сильно замедляет работу запросов. Может кто знает как получить null без костылей. Приставка orNull отдает дефолты.
  • https://t.me/clickhouse_ru
    Ну стоит отметить, что вроде цитус улучшали относительно недавно.

    Но раньше он действительно был на любителя
  • @packofopinions #251935 01:57 PM, 03 Jan 2022
    Добрый день. Не подскажете, есть ли способ вернуть определенное количество записей, где сумма значений поля составляет определенный процент от суммы этого поля по всем записям?
  • https://t.me/clickhouse_ru
    Две оконки

    Одна считает кумулятивную сумму, вторая просто сумму по всем элементам.

    В внешнем подзапросе сделать WHERE cum_sum < sum*percent
  • @usernameqwe1 #251938 02:23 PM, 03 Jan 2022
    мужики никто не знает как адекватно пагинацию сделать? с where id > n fetch first rows будет нормально работать в кх?
  • LIMIT | ClickHouse Documentation

    LIMIT Clause LIMIT m allows to select the first m rows from the result. LIMIT n, m allows to select the m rows from the

  • https://t.me/clickhouse_ru
    а с какой версией цитуса работали?
  • https://t.me/clickhouse_ru
    Не очень совет
    Чем больше страница тем больше данных обрабатывается перед отдачей
  • https://t.me/clickhouse_ru
    where id > xxx limit page_size
  • спс попробую
  • https://t.me/clickhouse_ru
    Насколько я помню с 5-й
  • https://t.me/clickhouse_ru
    @graid2030 #251947 06:22 PM, 03 Jan 2022
    Всех с новым годом!

    Подскажите есть какие-то хорощие практики CH как бить запрос для большой вставки которая не влезает в память
    INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
    Результирующая таблица ReplicatedAggregatingMergeTree
  • https://t.me/clickhouse_ru
    Performance | ClickHouse Documentation

    Performance According to internal testing results at Yandex, ClickHouse shows the best performance (both the highest thr

  • https://t.me/clickhouse_ru
    Это же про перворманс, обычные вставки нет проблем делать. Мне нужно большую таблицу пересобрать как-то
  • https://t.me/clickhouse_ru
    ну так делаете или таким же образом как обычные вставки, написав скрипт, или через buffer таблицы, или через дополнительные утилиты по типу clickhouse-bulk, емнип
  • https://t.me/clickhouse_ru
    @critskiy #251951 06:30 PM, 03 Jan 2022
    если у вас это должно быть ровно один раз, то я б на вашем месте шел или в buffer таблицы, или скрипт простой запилил бы
  • https://t.me/clickhouse_ru
    Мне кажется вы мне маленько про противоположное. Мне не маленькие запросы нужно склеить, мне большой разбить. Вот как это сделать лучше не понятно, не с offset’ом же по запросу ходить
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #251947 #251954 06:35 PM, 03 Jan 2022
    а что в select? Случайно не group by/join? Может там проблема?
  • https://t.me/clickhouse_ru
    GROUP BY messageId
  • https://t.me/clickhouse_ru
    я вам и говорю про решения проблемы с большим запросом вставки из одной таблицы в другую
  • https://t.me/clickhouse_ru
    @critskiy #251957 06:36 PM, 03 Jan 2022
    какие могут быть в вашем случае, чтобы с offset не ходить
  • https://t.me/clickhouse_ru
    Так а как там buffer и ch-bulk взяжутся, может я чего-то не понимаю
  • https://t.me/clickhouse_ru
    Вставлять данные без группировки и ждать когда их схлопнет разве хорошая идея?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #251955 #251960 06:39 PM, 03 Jan 2022
    попробуйте
    set max_bytes_before_external_group_by='4G'
    max_threads=1
    а buffer тут конечно ничем не поможет.
  • https://t.me/clickhouse_ru
    запись просядет
  • https://t.me/clickhouse_ru
    @critskiy #251962 06:39 PM, 03 Jan 2022
    мы ж не знаем надо проседание записи или нет)
  • https://t.me/clickhouse_ru
    @critskiy #251963 06:40 PM, 03 Jan 2022
    и он получит считай запись из одной таблицы в другую до нескольких суток :)
  • https://t.me/clickhouse_ru
    @critskiy #251964 06:40 PM, 03 Jan 2022
    хотя если устроит это решение проблемы - то ок
  • https://t.me/clickhouse_ru
    @bvt123 #251965 06:41 PM, 03 Jan 2022
    что значит просядет? Как я понимаю, человеку надо 1 раз перегнать таблицу. Тут без вариантов - или память добавлять или кусками, или по простому - через диск. Если за ночь справится - я бы так и оставил
  • https://t.me/clickhouse_ru
    @bvt123 #251966 06:44 PM, 03 Jan 2022
    ну или да - если там много ярдов-терабайт в таблице, то написать скрипт с выборкой по месяцам/годам (или что там ещё в order by) - будет быстрее.
  • https://t.me/clickhouse_ru
    мы не знаем сколько весит изначальная таблица, сколько оперативки у него на машине, поэтому тут очень много вариантов решения проблем, но каждая со своими изъянами :)
  • https://t.me/clickhouse_ru
    Да похоже то что нужно, спасибо
  • https://t.me/clickhouse_ru
    Еще один уточняющий вопрос, зачем здесь max_threads=1
  • https://t.me/clickhouse_ru
    @bvt123 #251972 06:49 PM, 03 Jan 2022
    КХ обычно читает в несколько тредов (вроде 8?) каждый тред жрет память, меньше тредов - меньше памяти занимает. Но медленнее. Экспериментируйте.
  • https://t.me/clickhouse_ru
    @5030195105 #251973 06:50 PM, 03 Jan 2022
    Все благодаря мистеру Фрэнку Стивену, который научил меня, как зарабатывать прибыль с небольшим капиталом в 650 евро. Я получил обратно 12500 евро всего за 48 часов торговли. Свяжитесь с ним и поблагодарите меня позже, после получения прибыли. Нажмите на ссылку ниже, чтобы начать зарабатывать как можно скорее. как можно

    https://t.me/+igRmPHZRhQdkZWE0
  • https://t.me/clickhouse_ru
    Примного благодарен 🙏
  • Можно разбивать на несколько батчей через хэш + остаток от деления
    cityHash64(message_id) % 10 = 0(1, 2...9) 10 раз
  • https://t.me/clickhouse_ru
    В новых версиях ок,

    Кх там делать optimize_on_insert и схлопывает блоками по 1 млн строк
  • https://t.me/clickhouse_ru
    Интересный вариант =)
    Только нужно понимать на сколько батчей бить
  • https://t.me/clickhouse_ru
    Спасибо и вам, тоже полезно
  • https://t.me/clickhouse_ru
    @rasstr0en #251980 09:25 PM, 03 Jan 2022
    Привет! А никто под М1 в докере кх не запускал? ругается ё
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @windoozatnick #251983 09:27 PM, 03 Jan 2022
    а он не должен быть aarch64?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @rasstr0en #251985 09:27 PM, 03 Jan 2022
    спасибо!
  • https://t.me/clickhouse_ru
    @rasstr0en #251987 09:47 PM, 03 Jan 2022
    а в альтините прм образы как часто обновляются? хочется 21.11.5 , только самому собрать?
  • @garikanet #251988 10:25 PM, 03 Jan 2022
    Может странноватый вопрос;) Как понять что CH не запущен в кластере?
    Только так?

    select * from system.clusters
    where cluster not like 'test_cluster%' and cluster not like 'test_shard_%'
    and cluster != 'test_unavailable_shard'

    -- или так
    select * from system.clusters
    where host_name != 'localhost' and host_name not like '127.0.0.%'

    Поставил тестовую ноду из коробки и вижу в таблице clusters записи...
  • 04 January 2022 (239 messages)
  • https://t.me/clickhouse_ru
    @gilza #251990 01:21 AM, 04 Jan 2022
    пупсики, как жизнь протекает в 2022-ом? ☺️
  • https://t.me/clickhouse_ru
    @gilza #251991 01:21 AM, 04 Jan 2022
    кидайте фотографии ладоней я вам погадаю
  • https://t.me/clickhouse_ru
    @gilza #251992 01:21 AM, 04 Jan 2022
    на стабильность ваших кластеров
  • https://t.me/clickhouse_ru
    @gilza #251993 01:21 AM, 04 Jan 2022
    блин 4 утра, а я какой то херней занимаюсь.... охх .... эххх...
  • https://t.me/clickhouse_ru
    @catent #251994 01:36 AM, 04 Jan 2022
    лучше бы кто нибудь из магов сказал почему раст клиент так тормозит на райзене

    вот реально загадка Жака Фреско
  • @qhang #251995 05:38 AM, 04 Jan 2022
    perf top в помощь
  • https://t.me/clickhouse_ru
    @viktoriviki #251997 08:40 AM, 04 Jan 2022
    мда уж
  • https://t.me/clickhouse_ru
    Межядерные взаимодействия слишком велики, вестимо. Используйте третье поколение :)
    Ну или проблема не в кукурузене
  • https://t.me/clickhouse_ru
    @catent ↶ Reply to #251998 #251999 08:56 AM, 04 Jan 2022
    Да остальные клиенты то нормально работают
  • https://t.me/clickhouse_ru
    @catent #252000 08:57 AM, 04 Jan 2022
    Я думаю что дело в LLVM, но я не умею в раст и perf, я гошник
  • https://t.me/clickhouse_ru
    @catent #252001 08:58 AM, 04 Jan 2022
    Ryzen 9 5950x вроде бы достаточно современный (может быть слишком?)

    Надо бы попробовать nightly
  • https://t.me/clickhouse_ru
    @good_developer #252002 08:58 AM, 04 Jan 2022
    Ну дык это не удивительно. Вы бы если посмотрели бенчмарки старых поколений, то увидели бы много интересного - на каком нибудь условном Си, го и многих других он готов пошатать трубу интела, а как дело доходило до пэхэпе или пайтона - беда
  • https://t.me/clickhouse_ru
    @good_developer #252003 08:59 AM, 04 Jan 2022
    Ну правда там просадка не супер сильная, но всё же явно видна
  • https://t.me/clickhouse_ru
    @catent #252004 08:59 AM, 04 Jan 2022
    Вот как раз присадка очень сильная и это смущает
    Чуть ли не в 20 раз
  • https://t.me/clickhouse_ru
    @good_developer #252005 08:59 AM, 04 Jan 2022
    О, тогда вряд-ли дело в кукурузене
  • попробуйте раст фронтенд для gcc
  • https://t.me/clickhouse_ru
    @orx4n #252007 09:48 AM, 04 Jan 2022
    Здравствуйте. Получаю unmerged парты через этот запрос. Целый день не было Инсертов . Но это цифра не уменьшается
  • @zhora9001 #252008 09:50 AM, 04 Jan 2022
    Добрый день! Подскажите, как грамотно решить ситуацию, когда требуется динамический (и уникальный для каждого запроса) словарь? Например, пусть есть таблица events с колонками UserID, Amount и мы хотим писать что-то вроде SELECT UserNames[UserID], Amount FROM events. Мы навскидку придумали делать временную таблицу (WITH UserNames AS (SELECT 1 as ID, 'Name' as Name UNION ALL SELECT ...)) и джоинить ее. Работает хорошо, но не покидает ощущение, что можно красивее 🙂
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252007 #252009 09:50 AM, 04 Jan 2022
    Одновременно точно не знаю этот запрос получает парты или партиции
  • select count(*) from system.parts where active;
    что возвращает
  • возвращает парты
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252010 #252012 09:52 AM, 04 Jan 2022
    Это дает 22К
  • https://t.me/clickhouse_ru
    @orantius #252013 09:53 AM, 04 Jan 2022
    а сколько надо?
  • https://t.me/clickhouse_ru
    @orx4n #252014 09:53 AM, 04 Jan 2022
    Интересно что: Целый 24 часа не было инсертов . Почему не уменьшились парты
  • а почему должна уменьшаться?
  • https://t.me/clickhouse_ru
    @orx4n #252016 09:54 AM, 04 Jan 2022
    Я имею ввиду парты. Они же удаляются после мерджа к партициям
  • https://t.me/clickhouse_ru
    @orx4n #252017 09:55 AM, 04 Jan 2022
    Или я что то перепутал
  • там только system БД будет добавлять парты(запросы, метрики)
  • вы что-то перепутали, партиция это набор партов, в партицию ничего не мержиться, только парты между собой
  • @simpl1g #252020 09:57 AM, 04 Jan 2022
    Denny Crane [Starship Captain at Altinity (NB,Canada)] in ClickHouse не тормозит

    Постоянно мержить до одной партиции очень невыгодно. Такой цели вообще не стоит, все совершенно наоборот. Цель иметь минимальное кол-во кусков, при этом делая как можно меньше мержей. Мержи потребляют дичайшее кол-во дисковых и cpu ресурсов. Merges are eventual and may never happen. It depends on the number of inserts that happened after, the number of parts in the partition, size of parts. If the total size of input parts are greater than the maximum part size then they will never be merged.

  • https://t.me/clickhouse_ru
    @orx4n #252021 09:58 AM, 04 Jan 2022
    У меня есть КХ из 4 шардов в кубере. Есть дистрибьютед таблица . Воркеры пишут постоянно в эту таблицу . За 24 часа примерно 4 миллиона инсерта . Папка этой дистрибьютед таблицы увеличивается очень быстро
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252021 #252022 10:02 AM, 04 Jan 2022
    отдельных инсертов или строк? нельзя делать 46 инсертов в секунду. Нужно делать 1 инсерт в 10 секунд. Или реже.
  • скорее всего у вас не успевает вставиться всё и накапливается, должны ошибки в логах наваливать
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252022 #252024 10:03 AM, 04 Jan 2022
    То есть каждые 10 секунд зделать батч инсерт ?
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252023 #252026 10:04 AM, 04 Jan 2022
    Там постоянно пишет : <Debug> MemoryTracker: Peak memory usage (for query): 4.05 MiB.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252024 #252027 10:05 AM, 04 Jan 2022
    именно. Можете по простому воспользоваться engine = Buffer. Можете в своем коде буфферизировать, можете архитектурно что-то добавить типа кафки.
  • https://t.me/clickhouse_ru
    @orx4n #252028 10:06 AM, 04 Jan 2022
    папка дистрибьютед таблицы уже выросло до 70гб .последний раз КХ не долго запустилась из за этого . Я удалил эту папку затем смог запустить инстанс
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252028 #252029 10:07 AM, 04 Jan 2022
    ничего удивительного при 46 rps по инсертам. "всегда так бывает".
  • https://t.me/clickhouse_ru
    @artemiy_uo #252030 10:07 AM, 04 Jan 2022
    А можно перед дистрибутед таблице поставить буфер таблицу? Сам с кх ещё не работал, но планирую начать в ближ время.
  • https://t.me/clickhouse_ru
    @ValarMorghuliis #252031 10:07 AM, 04 Jan 2022
    Всем привет! А final намного медленнее чем под-запрос с "group by ID + argMax" делать в ReplacingMergeTree, или все же в последних версиях КХ мало разницы чувствуется на большом объеме данных?
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252029 #252032 10:09 AM, 04 Jan 2022
    есть ещё один момент что я отключил воркеры . за 24 часа не было инсертов. но размер этой папки не уменьшилось
  • Зависит от ваших данных, тут можно примеры посмотреть https://kb.altinity.com/engines/mergetree-table-engine-family/replacingmergetree/
  • https://t.me/clickhouse_ru
    @orx4n #252034 10:11 AM, 04 Jan 2022
    есть ли какой то лимит сколько инсертов должно быть в одном батче ?
  • чем больше - тем лучше
  • Это не ошибки. Что-то вроде Too many parts/partitions нету?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252031 #252037 10:14 AM, 04 Jan 2022
    вроде ускорили - проверяйте сами на своих данных. Более того, в последних версиях работает do_not_merge_across_partitions_select_final, что позволяет не заниматься дедубликацией на старых партициях.
  • https://t.me/clickhouse_ru
    @orx4n #252038 10:14 AM, 04 Jan 2022
    пожалуйста скажите что это за папка ?
  • Можно, но лучше конечно писать без Distributed
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252036 #252040 10:16 AM, 04 Jan 2022
    раньше было . я увеличил лимит до 3 тысяч
  • https://t.me/clickhouse_ru
    @artemiy_uo #252041 10:16 AM, 04 Jan 2022
    Да, но это требует значительных доработок приложения, а это проблема, особенно когда сразу нужен уникальный ключ записи, можно конечно самому генерить, но это все проблемно.
    А почему буфер лучше не юзать?
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252038 #252042 10:16 AM, 04 Jan 2022
    это внутри дистрибьютед таблицы
  • https://t.me/clickhouse_ru
    @artemiy_uo #252043 10:17 AM, 04 Jan 2022
    Так же интересно услышать о новой функциональности, которую недавно добавили, инсертить можно часто. Какие там минусы проблемы? Мне бы вставить, получить уник ключ и забыть, дальше работать в не блок режиме.
  • получить ключ после вставки? аля как в постгресе?
  • Я не писал что Buffer лучше не юзать. Как стартовое решение норм вариант. Но данные можно потерять если сервер ляжет.
  • https://t.me/clickhouse_ru
    Да, Я щас подумал что наверно нет такого, слышал что нет уникальных ключей (изучаю пока)
  • Можно подробности?
  • https://t.me/clickhouse_ru
    @artemiy_uo #252048 10:24 AM, 04 Jan 2022
    ClickHouse v21.11 Released

    We're continuing our monthly release cadence and blog updates at ClickHouse, Inc. The 21.11 release includes asynchronou

  • а еще нет удаления и апдейта (грубо говоря)
  • https://t.me/clickhouse_ru
    @artemiy_uo #252050 10:27 AM, 04 Jan 2022
    Да, Я в курсе, есть апдейт, но медленный
  • https://t.me/clickhouse_ru
    @artemiy_uo #252051 10:27 AM, 04 Jan 2022
    Ну и обещают улучшить, но не один конечно, но и не надо
  • Так это неинтересно, с тем же успехом можно накапливать инсерты на стороне клиента и вставлять батчем. Те же гарантии консистентности.
  • https://t.me/clickhouse_ru
    @artemiy_uo #252053 10:27 AM, 04 Jan 2022
    Мы как замену эластика изучаем
  • для чего?
  • https://t.me/clickhouse_ru
    Вот мне как раз интересно что бы не усложнять бек
  • https://t.me/clickhouse_ru
    Вы мягкое с тёплым путаете
  • https://t.me/clickhouse_ru
    @critskiy #252057 10:28 AM, 04 Jan 2022
    OLAP и поисковой движок :)
  • ну мож в эластике графики рисовать и всякую статистику по логам к примеру щупать
  • https://t.me/clickhouse_ru
    Много букв, хранить попытки атак / скана ресурсов клиентов.
  • https://t.me/clickhouse_ru
    @artemiy_uo #252060 10:28 AM, 04 Jan 2022
    Я не путаю ничего
  • а зачем юник кей?
  • https://t.me/clickhouse_ru
    @artemiy_uo #252062 10:29 AM, 04 Jan 2022
    Мы юзаем эластик как олап базу
  • https://t.me/clickhouse_ru
    Что бы ссылаться из других таблиц
  • @111010502 #252064 10:30 AM, 04 Jan 2022
    ну такое. а потом в кх джойнить?
  • https://t.me/clickhouse_ru
    @artemiy_uo #252065 10:30 AM, 04 Jan 2022
    Не обязательно
  • https://t.me/clickhouse_ru
    @critskiy #252066 10:31 AM, 04 Jan 2022
    А зачем тогда кх и эластик, когда для этого можно использовать с тем же успехом postgresql или mysql?
  • https://t.me/clickhouse_ru
    @artemiy_uo #252067 10:31 AM, 04 Jan 2022
    Нельзя, данных очень много и нужна быстрая выборка.
  • можете собирать «ключ» из данных например
  • https://t.me/clickhouse_ru
    @artemiy_uo #252069 10:32 AM, 04 Jan 2022
    Нужно нормальное шардирование, а не как в пг
  • https://t.me/clickhouse_ru
    Что значит быстрая выборка? Вам надо статистику собирать по атакам?
  • https://t.me/clickhouse_ru
    Да, я понимаю, сгенерим сами, не проблема, просто сейчас думаю как проще прикрутить кх сбоку к имеющейся системе, что бы потом смотреть и развивать и мб когда то уехать с эластика.
  • если что то типа кафки есть, то я бы просто сбоку прикрутил и собирал данные и пробовал себя в изучении кх
  • https://t.me/clickhouse_ru
    Быстрая, это значит до секунды запрос к любым атакам клиента за месяц, например.
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252038 #252074 10:33 AM, 04 Jan 2022
    никто не знает ?
  • https://t.me/clickhouse_ru
    Мы так и сделаем, но без Кафки, есть фоновые воркеры которые пишут и очереди.
  • А сколько у него атак в месяц?
  • ну вот и решение. в бою сразу видно будет подойдет или нет
  • https://t.me/clickhouse_ru
    @artemiy_uo #252078 10:35 AM, 04 Jan 2022
    Много, разные клиенты, можно считать что сотни млн в месяц, в каждой может быть млны хитов (запросов), атака это "группа"
  • https://t.me/clickhouse_ru
    Мы так и планируем, в начале квартала начнем, пока думаем и изучаем.
  • а не думали в реалтайме это все чекать и результаты уже писать?
  • https://t.me/clickhouse_ru
    @artemiy_uo #252081 10:37 AM, 04 Jan 2022
    Нет особо результатов, это уже результат, надо просто хранить и на лету делать разные аналит запросы. Щас в эластике как раз стараемся считать в потоке что бы потом быстро выбирать посчитанные, но это не хорошо, это не то.
  • https://t.me/clickhouse_ru
    @artemiy_uo #252082 10:38 AM, 04 Jan 2022
    Все что можно посчитать и сгруппировать уже
  • на лету если считать всякие ивенты (в окнах к примеру) - kafka streams. удобно получается. мы вот комбинируем, kafka streams и aggregatingmergetree для подстраховки
  • https://t.me/clickhouse_ru
    @artemiy_uo #252084 10:40 AM, 04 Jan 2022
    Мы понимаем, что можно считать считаем, нужна гибкость запросов, нужен кх, эластик не тянет, ну и руководство и мы хотим попробовать кх 😄
  • @111010502 #252085 10:41 AM, 04 Jan 2022
    Ну если система позволяет - то только пробовать)
  • https://t.me/clickhouse_ru
    @artemiy_uo #252086 10:44 AM, 04 Jan 2022
    Такой вопрос ещё. Нужна возможность изменить Стейт записи (атаки, хита), типо удаленным отметить. Думал создать таблицу стейтов и джойнить, это ок или есть другой лучший подход?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252063 #252087 10:44 AM, 04 Jan 2022
    Тут так не принято. В КХ вы делаете большую широкую таблицу, включая в нее все другие связанные таблицы. Посмотрите в документации на тип Nested и примеры таблиц яндекс аналитики. Это позволяет убрать большинство join и делать быстрые выборки и аггрегации. Обычный последовательный ID мешает построению распределенных систем.
  • CollapsingMergeTree к примеру
  • https://t.me/clickhouse_ru
    Я понимаю, а что делать если через некоторое время, мне нужно свойство родительской записи (группы поменять), что делать? Апдейтить млрд записей? Вот я не хочу и хочу поменять одну строку. Джойнить особо не придется тк это грубо говоря папки и файлы и я просто выберу сначала папку, потом файлы.
  • Возможно дикий совет, но может подумать о данных с другой стороны?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252071 #252091 10:48 AM, 04 Jan 2022
    если в режиме "посмотреть", то я бы сделал простенький ELT скрипт, который выкачивает данные из старой системы (джойнит их прямо в ней) и вставляет в КХ. Сразу делал бы широкую таблицу, и батчинг автоматически получится. Запустил бы раз в минуту по крону. А потом уже принимал решения про кафки и прочие.
  • https://t.me/clickhouse_ru
    Не получается. Есть запросы к сайту (грубо) и нужно их анализировать и хранить, они объединяются в лог группы.
  • В общем вы серебряную пулю ищите
  • https://t.me/clickhouse_ru
    @viktoriviki #252094 10:50 AM, 04 Jan 2022
    тухлячок чот тут(
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252086 #252095 10:51 AM, 04 Jan 2022
    джойнить даже и не думайте. тут принято вставлять другую запись и как-то группировать. Смотрите на ReplacingMT & AggregatingMT
  • https://t.me/clickhouse_ru
    Мы ничего не ищем, мы работаем и решаем свои задачи. 😄
  • https://t.me/clickhouse_ru
    Да, Я читал про них, вообщем то я хотел сделать тоже самое, но руками, да видимо будем юзать их.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252089 #252098 10:54 AM, 04 Jan 2022
    вставите новую версию. Не проблема. Тут основная идея - иммутабельность данных. У вас лежат данные, никогда не меняются, понихоньку накапливаются, вы по ним делаете выборки и отчеты. Одна из ключевых техник - дедубликация. Так и живем :)
  • https://t.me/clickhouse_ru
    Я это все знаю, знаю что такое аналитическая бд, имею большой опыт работы с бд и разработки.
  • Я бы стартанул с того, что бы понять почему и как кх хранит данные и как вытаскивает. И отсюда уже думать как лучше их складывать в Вашем случае. Тоже самое с шардированием, может оно в Вашем случае будет еще хуже чем у пг?
  • А давно эта папка такого размера ? Может у вас левый шард в конфиге кластера раньше был?
  • https://t.me/clickhouse_ru
    @artemiy_uo #252102 10:56 AM, 04 Jan 2022
    Я читал все доки и представляю себе все это
  • @111010502 #252103 10:56 AM, 04 Jan 2022
    Меня вот как и Вас поначалу тоже ломало. Потом втянулся 😂
  • https://t.me/clickhouse_ru
    @artemiy_uo #252104 10:57 AM, 04 Jan 2022
    Меня не ломает, просто опыта с кх нет ну и в основном опыт с олтп.
  • https://t.me/clickhouse_ru
    @artemiy_uo #252105 10:57 AM, 04 Jan 2022
    Я понимаю все особенности и не собираюсь идти со своим уставом, буду советоваться и изучать.
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252101 #252106 10:59 AM, 04 Jan 2022
    я не собирал эту систему с нуля - может быть до меня кто то подключил левый шард. Просто мне нужно знать что это за папка - удалить или оставить
  • https://t.me/clickhouse_ru
    @yourock88 #252107 11:06 AM, 04 Jan 2022
    Иногда, кстати, если очень нужны джойны и таблицы легко влезают в память, можно рассмотреть использование словарей
  • https://t.me/clickhouse_ru
    @yourock88 #252108 11:06 AM, 04 Jan 2022
    Или Join движка
  • https://t.me/clickhouse_ru
    @yourock88 #252109 11:07 AM, 04 Jan 2022
    Но для наилучшей производительности лучше делать так, как советуют и использовать ReplacingMergeTree или аналоги и иметь широкую таблицу со всей нужной инфой. Иногда это нецелесообразно, тогда смотрите совет про словари выше
  • https://t.me/clickhouse_ru
    в память не влезает SELECT
    потому что видимо у вас там большой GROUP BY и ORDER BY в придачу?
    если нет, то должно влезать
    сколько у вас памяти?
  • https://t.me/clickhouse_ru
    выглядит как output папка для distributed таблицы c данными которые не попали в сервер
  • https://t.me/clickhouse_ru
    вы в кубере пытаетесь запустить ваш кластер?
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252113 #252114 03:10 PM, 04 Jan 2022
    да кластер работает кубере
  • https://t.me/clickhouse_ru
    папка конкретно где находится?
    полный путь покажите
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252112 #252116 03:10 PM, 04 Jan 2022
    внутри его .bin файлы есть .последняя дата изменения этой папки 27 сентября
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252115 #252117 03:11 PM, 04 Jan 2022
    внутри папки дистрибьютед таблицы
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252115 #252118 03:12 PM, 04 Jan 2022
    data/{database name}/{table name}/
  • https://t.me/clickhouse_ru
    ну у вас 69 гигов не скинутых .bin файлов в distributed таблице, в underlying таблицу

    в хост с названием
    chi-clickhouse-digitalks-0-0

    это имя kubernetes service
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252115 #252120 03:12 PM, 04 Jan 2022
    этот файл есть у каждого шарда
  • https://t.me/clickhouse_ru
    расшарьте

    SHOW CREATE TABLE {database name}/{table name}
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252121 #252122 03:14 PM, 04 Jan 2022
    долго выполняется
  • https://t.me/clickhouse_ru
    можете на сервер зайти и посмотреть
    /var/lib/clickhouse/medatata/dmp/event_logs.sql ?
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252123 #252124 03:30 PM, 04 Jan 2022
    там DDL таблицы
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    SELECT create_table_query, hostName() h FROM cluster('all-sharded', system.tables) WHERE database='dmp' AND name=`event_logs_local
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252126 #252127 03:35 PM, 04 Jan 2022
    Локальные таблицы у меня MergeTree
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252126 #252128 03:36 PM, 04 Jan 2022
    CREATE TABLE dmp.event_logs_local (user_id UUID, pixel_id UUID, new_user UInt8, ip IPv4, time DateTime, headers String, browser String, browser_major String, os String, os_major String, device String, city String, city_id UInt64, country String, country_id UInt64, country_iso String, time_zone String, longitude Float64, latitude Float64, data String, page_url Nullable(String), view UInt8 DEFAULT 0) ENGINE = MergeTree PARTITION BY (pixel_id, toYYYYMMDD(time)) PRIMARY KEY cityHash64(user_id) ORDER BY cityHash64(user_id) SAMPLE BY cityHash64(user_id) SETTINGS index_granularity = 8192
  • >раньше было . я увеличил лимит до 3 тысяч

    PARTITION BY (pixel_id, toYYYYMMDD(time)) - кажется вам сюда стоит обратить внимание
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252129 #252130 03:51 PM, 04 Jan 2022
    не имею большого опыта с КХ . подскажите пожалуйста какие проблемы могут быть с таким партиционированием ? и по какому ключу лучше было бы это зделать ?
  • каждая партиция - отдельная папка, в ней по 2 файла на каждую колонку, с таким мелким партиционириванием у вас будет миллиард маленьких файлов

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

    в какой-то момент у вас всё станет колом и вы не запустите сервер
    если не разбираетесь - самый популярный вариант PARTITION BY toYYYYMM(time)

    а какие запросы планируете делать?
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252131 #252132 04:09 PM, 04 Jan 2022
    происходит то что описываете вы . некоторые шарды стартуютса очень медленно . SELECT запросы тоже медленно выполняются

    если делать ALTER TABLE и менять PARTITION BY . тогда КХ будет заново партиционировать уже умеющие парты ? или это будет относиться к новым данным ?
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252131 #252133 04:10 PM, 04 Jan 2022
    есть одно что - количество pixel_id не очень много . максимум 200
  • нельзя поменять PARTITION BY, создаёте правильную таблицу, переливаете данные и меняете их местами
  • ну это не так плохо, а сколько дат уже есть?
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252135 #252136 04:12 PM, 04 Jan 2022
    от сентября до сегодняшного числа . 2021.09.01 - 2022.01.04
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252134 #252137 04:13 PM, 04 Jan 2022
    понятно это спасибо большое
  • уже много получается, ~25000 партиций, лучше до 1000 иметь(в зависимости от вашего железа может быть и меньше)
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252138 #252139 04:16 PM, 04 Jan 2022
    select count(*) from system.parts where active;

    дает 22 917

    это один из шардов . количество данных у них почти равно
  • всеравно плохо)
    видимо каких-то pixel_id не было в какую-то дату
  • https://t.me/clickhouse_ru
    пароль для default пользователя не меняли?
  • https://t.me/clickhouse_ru
    кривая схема данных (кривой PARTITION BY)
    и изменение константы вместо того чтобы понять что она значит...
    сейчас у вас будет никакая производительность в итоге

    судя по всему при вставке в distributed таблицу у вас ноды между собой не могут связаться для того чтобы в MergeTree таблицу данные передать...

    у вас с одной ноды на другую с default пользователем позволяет коннектиться?
    зайдите в контейнер kubectl exec -n clickhouse ... -- clickhouse-client
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252141 #252144 04:28 PM, 04 Jan 2022
    не менял
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252140 #252145 04:30 PM, 04 Jan 2022
    SELECT у меня чаще бывают именно с условием pixel_id и с датой
  • https://t.me/clickhouse_ru
    зайдите внутрь pod
    смотрите логи /var/log/clickhouse-server/clickhouse-server.log
  • https://t.me/clickhouse_ru
  • так почему бы в ORDER BY не поставить pixel_id на первое место? зачем вам там cityHash64(user_id)? и зачем вам SAMPLE?
  • а там разве не старые данные лежат в дистрибьютед папке?, больше похоже на то что раньше в сентябре криво было настроено а сейчас это уже пофикшено и просто остались старые данные
  • https://t.me/clickhouse_ru
    @Rainb0wD4sh #252151 04:48 PM, 04 Jan 2022
    Други, тут такое дело. ПО ОЧЕНЬ НЕ ПРОВЕРЕННОЙ информации:
    если запускать CH на амазоне то как будто на 10-15% медленнее работают запросы по сравнению если собрать CH из исходников грепнув clickhouse на clownseeds (или любое 10 символьное значение)
    конспирологи спрашивают может ли быть такое что AWS тормозит специально. или это всё брихня?
  • https://t.me/clickhouse_ru
    @Rainb0wD4sh #252152 04:50 PM, 04 Jan 2022
    @milovidov_an такое возможно?
  • @kon19s #252154 05:01 PM, 04 Jan 2022
    Добрый вечер, не подскажите как конвертировать datetime64 в кол-во миллисекунд, конвертация в int возвращает секунды?
  • https://t.me/clickhouse_ru
    Type Conversion | ClickHouse Documentation

    Type Conversion Functions Common Issues of Numeric Conversions When you convert a value from one to another data type, y

  • @kon19s #252156 05:03 PM, 04 Jan 2022
    Не заметил, спс!
  • https://t.me/clickhouse_ru
    Очень маловероятно, но проверить просто.

    Берете ec2 инстанс, собираете два билда и сравниваете скорость.
  • https://t.me/clickhouse_ru
    вроде как конспиролог это проделал, я хотел мнение общества (сам я пользователь не админ)
  • https://t.me/clickhouse_ru
    Ну пусть этот конспиролог по этапам все действия распишет и создаст issue на github с результатами, тогда с этим уже можно будет работать.

    Может он собрал с включенным AVX512, а в мастере вроде отключено
    https://github.com/ClickHouse/ClickHouse/pull/30014
    add x86 feature avx2/avx512 support for accelerating filter operation by jinjunzh · Pull Request #30014 · ClickHouse/ClickHouse

    Co-authored-by: @vesslanjin jun.i.jin@intel.com Changelog category (leave one): Performance Improvement Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md...

  • https://t.me/clickhouse_ru
    так и форварду
  • https://t.me/clickhouse_ru
    @Rainb0wD4sh #252161 05:07 PM, 04 Jan 2022
    чтобы давало +15%?
  • https://t.me/clickhouse_ru
    Test Baseline optimized perf improvement
    Q1 14.13ms 12.40ms 12.2%
    Q2 11.75ms 9.76ms 10.9%
  • https://t.me/clickhouse_ru
    @Rainb0wD4sh #252163 05:08 PM, 04 Jan 2022
    тут 2
  • https://t.me/clickhouse_ru
    @Rainb0wD4sh #252164 05:09 PM, 04 Jan 2022
    AVX, AVX2, and Enhanced Networking are only available on instances launched with HVM AMIs.
  • https://t.me/clickhouse_ru
    Вроде все +- новые (не 10 лет которым) используют HVM AMI
  • https://t.me/clickhouse_ru
    @Rainb0wD4sh #252166 05:10 PM, 04 Jan 2022
    пойду трясти конспиролога, пусть оформит
  • https://t.me/clickhouse_ru
    а прочему он по дефалту не включён если не секрет?
  • https://t.me/clickhouse_ru
    @Rainb0wD4sh #252168 05:11 PM, 04 Jan 2022
    можно собрать версию КХ на максималках :D
  • https://t.me/clickhouse_ru
    AVX512 поддерживают только +-новые железки, те далеко не все инсталляции кх смогут использовать.

    А автоматический "выбор" алгоритма не был реализован в том пр, поэтому выключили пока.
    Плюс машины используемые в CI не умеют в AVX512
    > Then we can introduce dynamic dispatching for this code.
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252148 #252170 05:14 PM, 04 Jan 2022
    Это всё зделал предыдущий разраб . по user_id тоже делается выборка . как вы говорите это логично - буду попробовать заново создать таблицу перенести данные на него
  • https://t.me/clickhouse_ru
    это не реализуется на стадии пакетов?
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252149 #252172 05:15 PM, 04 Jan 2022
    да дата изменения папки именно последний раз был в сентябре
  • https://t.me/clickhouse_ru
    Это будет жуткий костыль, люди должны будут выбрать другой пакет и тд.

    Все это можно сделать в коде, что бы автоматически работало.

    Кое где это уже сделано: https://github.com/ClickHouse/ClickHouse/issues/1017
    FR: dynamic dispatch of SIMD algorithms to support AVX2/AVX512 · Issue #1017 · ClickHouse/ClickHouse

    I dived into the code and addressed some SSE optimizations. Well done guys, I appreciate that you delivered and shared such a greate AP system. And I found nothing about AVX optimizations, it is on...

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

    Кто то должен это сделать, пока таких желающих не нашлось, а у основной команды кх эта задача не самая приоритетная.
  • https://t.me/clickhouse_ru
    @Rainb0wD4sh #252176 05:21 PM, 04 Jan 2022
    печаль, приоритет
  • https://t.me/clickhouse_ru
    сверьте структуру distributed и mergetree таблицы
    судя по всему она у вас не совпадает
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252177 #252178 05:25 PM, 04 Jan 2022
    исправил это
  • https://t.me/clickhouse_ru
    ну ждите теперь, пока у вас ваши 69 гигов не вставленной даты разъедутся
  • @oix555 #252180 05:58 PM, 04 Jan 2022
    @tron_wai,вопрос относительно user_dn_detection для определения DN для member поиска групп,он же в таком виде подставляется CN=Петров Евгений,ou=… ? или просто идет name ? как вообще увидеть что в {user_dn} ? просто даже если явно вставить верный DN ,то почему-то даже аутентификация не проходит,если сделать пустым,то ошибка not enough,нет прав,что верно,как можно произвести debug подключению к ldap?
  • https://t.me/clickhouse_ru
    user_dn_detection обычно нужен для Active Directory - там байндится пользователь по одному DN, а member в группе указан другой (основной) DN. Поэтому и есть этот шаг/функциональность.
    Вы уверены, что это актуально для вашего сетапа? Как выглядить типичный bind DN, который вы используете? И как выглядят записи списка пользователей в группах?
  • @oix555 #252182 06:11 PM, 04 Jan 2022
    да,у нас как раз AD ,как раз ваш фильтр для нас актуален,т.к bind делаем под samAccountName,т.е логин в CH делаем под ним,DN такой CN= Петров Сергей Петрович,Ou=Developers Users,OU=Users,dc=local,dc=com
  • @oix555 #252183 06:11 PM, 04 Jan 2022
    а сам samAccountname=s.petrov
  • https://t.me/clickhouse_ru
    ну вот вместо того что в примере в документации:

    <user_dn_detection>
    <base_dn>CN=Users,DC=example,DC=com</base_dn>
    <search_filter>(&amp;(objectClass=user)(sAMAccountName={user_name}))</search_filter>
    </user_dn_detection>

    подставте свое:

    <user_dn_detection>
    <base_dn>OU=Developers Users,OU=Users,DC=local,DC=com</base_dn>
    <search_filter>(&amp;(objectClass=user)(sAMAccountName={user_name}))</search_filter>
    </user_dn_detection>
  • @oix555 #252185 06:19 PM, 04 Jan 2022
    да все верно
  • @oix555 #252186 06:20 PM, 04 Jan 2022
    <bind_dn>DOMEN/{user_name}
  • @oix555 #252187 06:20 PM, 04 Jan 2022
    у нас именно проблема с mapping
  • @oix555 #252188 06:21 PM, 04 Jan 2022
    после попытки подставить {user_dn} получаем ошибки
  • https://t.me/clickhouse_ru
    @tron_wai #252189 06:22 PM, 04 Jan 2022
    ну вот с таким конфигом должно сработать
  • @oix555 #252190 06:22 PM, 04 Jan 2022
    если же я сделаю фильтр в виде objectclass=group,samaccountname = имя группы,он отсекает префикс,маппит локальную группу,запрос проходит
  • @oix555 #252191 06:23 PM, 04 Jan 2022
    для блока role_mapping
  • https://t.me/clickhouse_ru
    @tron_wai #252192 06:23 PM, 04 Jan 2022
    ну да, значит надо user_dn детектить и подставлять,
  • @oix555 #252193 06:23 PM, 04 Jan 2022
    т.е именно проблема в подстановке member
  • @oix555 #252194 06:24 PM, 04 Jan 2022
    даже в явном виде в фильтре ошибки получаем
  • https://t.me/clickhouse_ru
    @tron_wai #252195 06:24 PM, 04 Jan 2022
    ага
  • https://t.me/clickhouse_ru
    @tron_wai #252196 06:24 PM, 04 Jan 2022
    <search_filter>(&amp;(objectClass=group)(member={user_dn}))</search_filter>
  • @oix555 #252197 06:26 PM, 04 Jan 2022
    да именно,если просто {} пустым сделать,то честно группу не находит,но аутентификация проходит в CH,а если оставить то и аутентификация с ошибкой ,хотя почему непонятно
  • @oix555 #252198 06:27 PM, 04 Jan 2022
    также и если явно указать DN для member верный,я читал код,такое ощущение что ошибка в парсинге
  • https://t.me/clickhouse_ru
    @tron_wai #252199 06:28 PM, 04 Jan 2022
    если оставить, он пытается сначала найти и собрать этот user_dn, и в процессе этого возникает ошибка, тогда и вся аутентификация завершается с ошибкой
  • @oix555 ↶ Reply to #252199 #252200 06:28 PM, 04 Jan 2022
    да,так и понял
  • Проверьте с помощью https://clickhouse.com/benchmark/hardware/

    (ссылка, как сделать бенчмарк - внизу страницы)

    А что такое clownseeds?

    А зачем собирать ClickHouse? Для сравнения железа надо использовать один бинарник (только готовую сборку).
    Performance comparison of ClickHouse on various hardware

    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
    если вы скопируете примеры из документации и только свои изменения внесете по минимуму - все должно сработать. если нет, значит детекшн user_dn возвращает ошибку. Можно тогда попробовать вручную выполнить ldap search идентичный тому, что делает clickhouse
  • https://t.me/clickhouse_ru
    попробую да, clownseeds это 10ть знаков замены clickhouse чтобы исключить случайную адресную оптимизацию при компиляции.
  • @oix555 ↶ Reply to #252202 #252204 06:33 PM, 04 Jan 2022
    да,уже сделал, все именно так как в документации,я понимаю,что user_dn_detection находит DN для member по user_name ,что в bind,вижу что в user_dn это длинный обьект записывается,поиск в ldap с этим DN отлично находит нужные группы
  • https://t.me/clickhouse_ru
    > я понимаю,что user_dn_detection находит DN для member по user_name
    Не находит, а должен находить. Это вам нужно проверить.
  • https://t.me/clickhouse_ru
    @tron_wai #252206 06:35 PM, 04 Jan 2022
    фейлится аутентификация скорее всего из-за ошибок на этом этапе.
  • @oix555 #252207 06:36 PM, 04 Jan 2022
    но как только это все запускается в CH ,на этапе попытки dn дать member ошибка,я проверил на самой последней версии ,ошибка сохраняется
  • https://t.me/clickhouse_ru
    где ошибка? лог есть?
  • https://t.me/clickhouse_ru
    @tron_wai #252209 06:36 PM, 04 Jan 2022
    есть лог AD сервера?
  • @oix555 ↶ Reply to #252205 #252210 06:37 PM, 04 Jan 2022
    проверил,дает нужный DN в ldap поиске,я же говорю,что в фильтре явно указал нужный dn и все равно ошибка
  • @oix555 ↶ Reply to #252209 #252211 06:37 PM, 04 Jan 2022
    есть
  • https://t.me/clickhouse_ru
    я не понимаю, там несколько фильтров
  • https://t.me/clickhouse_ru
    @tron_wai #252213 06:39 PM, 04 Jan 2022
    можно полную картину, того что есть, должно работать, но не работает?
  • https://t.me/clickhouse_ru
    @tron_wai #252214 06:39 PM, 04 Jan 2022
    с конфигами и логами
  • https://t.me/clickhouse_ru
    @tron_wai #252215 06:39 PM, 04 Jan 2022
    лучше даже в GitHub issues
  • @oix555 ↶ Reply to #252215 #252217 06:41 PM, 04 Jan 2022
    ок,попробую,могу и личную переписку перейти
  • https://t.me/clickhouse_ru
    @tron_wai #252218 06:42 PM, 04 Jan 2022
    Лог AD с запросами кликхауса
  • @oix555 ↶ Reply to #252218 #252219 06:44 PM, 04 Jan 2022
    надо у windows администраторов запросить будет,чтобы с DC выслали,в случае openldap проблем мы не видели
  • https://t.me/clickhouse_ru
    да, там будет видно какой запрос сделал clickhouse при этом user_dn detection, и каким был ответ
  • https://t.me/clickhouse_ru
    что если подставить вместо {user_dn} - заработает?
  • @oix555 ↶ Reply to #252220 #252223 06:50 PM, 04 Jan 2022
    а если явно вставить user_dn в виде верного DN то ведь тоже должен отработать поиск группы?
  • https://t.me/clickhouse_ru
    да (удалив секцию user_dn_detection)
  • @oix555 ↶ Reply to #252222 #252225 06:51 PM, 04 Jan 2022
    так писал,что подставил ,точный DN и ошибка аутентификации,точно такая же если оставить user_dn
  • @oix555 ↶ Reply to #252224 #252226 06:52 PM, 04 Jan 2022
    да,ошибка будет такая же
  • https://t.me/clickhouse_ru
    @tron_wai #252227 06:52 PM, 04 Jan 2022
    ок, нужны логи AD
  • https://t.me/clickhouse_ru
    @orx4n #252229 09:21 PM, 04 Jan 2022
    как менять таймауты КХ оператора ?
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252229 #252230 09:22 PM, 04 Jan 2022
    @BloodJazMan @unamedrus извиняюсь за беспокойство
  • https://t.me/clickhouse_ru
    В смысле выходные? В смысле ночь? У кого-то рабочий день и 21:26 например
  • https://t.me/clickhouse_ru
    @sumekenov #252233 09:27 PM, 04 Jan 2022
    Понял, извиняюсь
  • https://t.me/clickhouse_ru
    @LoganFrench #252235 09:48 PM, 04 Jan 2022
    а можно закрыть 9000 порт httpшный?
  • https://t.me/clickhouse_ru
    Iptables, firewall, редирект
  • 05 January 2022 (83 messages)
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252235 #252237 06:02 AM, 05 Jan 2022
    Можно но не будут работать клиент программы
  • https://t.me/clickhouse_ru
    @pxlvgg #252239 06:59 AM, 05 Jan 2022
    Кто может подсказать, как починить/убрать потребление памяти на сервере, которое фиксится перезагрузкой Clickhouse? (у меня памяти немного, и из-за этого некоторые данные перестают записываться)
  • https://t.me/clickhouse_ru
    @pxlvgg #252240 07:01 AM, 05 Jan 2022
    Но после перезагрузки ЦП в 100% нагружается
  • https://t.me/clickhouse_ru
    не надо их менять
    сначала разберитесь что случиось и почему у во время реконсайла kind: ClickHouseInstallation, name: clickhouse исчез (вы его удалили?)
  • https://t.me/clickhouse_ru
    он не httpшный
    но если вы обратитесь по нему через HTTP протокол, вам вернется HTTP ответ что нибудь типа 400 bad request
  • https://t.me/clickhouse_ru
    не много памяти это сколько?
  • https://t.me/clickhouse_ru
    как именно меряете что память отожралась?
  • https://t.me/clickhouse_ru
    если у вас отжирается Page Cache и Buffered то это нормальное поведение и ничего страшного в этом нет

    если RSS
    надо смотреть

    у вас в целом запросы выдают какой нибудь Memory required ошибки? если нет, то нет повода для беспокойства
  • https://t.me/clickhouse_ru
    @pxlvgg ↶ Reply to #252243 #252246 07:28 AM, 05 Jan 2022
    40 гб примерно
  • https://t.me/clickhouse_ru
    @pxlvgg #252247 07:28 AM, 05 Jan 2022
    после перезагрузки 2 гб освобождается
  • @GrouthHacker #252248 08:58 AM, 05 Jan 2022
    Подскажите, можно ли как-то за один проход получить данные о максимальном количестве страниц просмотренных юзером за несколько разных интервалов....
    Сейчас делаем несколько запросов:

    `SELECT g, max(h) from (SELECT user g, toStartOfMinute(time) v, uniq(page) h from hide.klo WHERE time>=today() group by g,v) group by g

    SELECT g, max(h) from (SELECT user g, toStartOfHour(time) v, uniq(page) h from hide.klo WHERE time>=today() group by g,v) group by g`

    можно как-то оптимизировать данный процесс?
  • @s4851 ↶ Reply to #252248 #252249 09:00 AM, 05 Jan 2022
    Union?
  • @GrouthHacker #252250 09:06 AM, 05 Jan 2022
    Думал может есть вариант без union. В принципе сейчас запросы делает скрипт, который объединяет ответы. Тут задача увеличить скорость (и ради интереса узнать альтернативные варианты запросов)
  • https://t.me/clickhouse_ru
    вы сейчас про оперативную память или про что вообще?
    "примерно 40" это сколько?
    и на остальные вопросы вы не ответили
  • @s4851 ↶ Reply to #252250 #252252 09:21 AM, 05 Jan 2022
    Если все данные по которым необходимо получить интервалы находятся в небольшом диапазоне(относительно)
    Тогда можно считать их в временную таблицу и потом из неё получить через union необходимые группировки.
    Тогда у вас будет только один запрос на чтение данных из Таблицы, а не несколько разных как сейчас
  • https://t.me/clickhouse_ru
    @stepan_stepanov #252253 09:25 AM, 05 Jan 2022
    Добрый день

    Подскажите пожалуйста

    Хочу делать выборку с много-много строк в where in

    Когда без особых настроек отправляю в Clickhouse он ругается, мол http request is too large

    Как-то можно быстро и без боли замтавить CH принимать огромные запросы?
  • Через POST запрос
  • @s4851 ↶ Reply to #252253 #252256 09:35 AM, 05 Jan 2022
    Можно сделать insert в виртуальную таблицу и потом использовать ее в запросе where in
  • @sergey_alaev #252257 09:38 AM, 05 Jan 2022
    Кто использовал grpc интерфейс в кликхаусе? Были проблемы с ним?
  • https://t.me/clickhouse_ru
    потом эту таблицу грохнуть ?
    в этом случае там также будет работать group by и order by ?
  • @s4851 ↶ Reply to #252258 #252259 09:41 AM, 05 Jan 2022
    Она виртуальная, когда соединение закроете она сама грохнется
    Конечно будет работать это же таблица и на неё работает все что можно написать в sql
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252248 #252260 09:47 AM, 05 Jan 2022
    можно попробовать group by WITH ROLLUP. Не факт что будет быстрее, но попробовать можно. По крайней мере будет компактнее в коде.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252253 #252261 09:53 AM, 05 Jan 2022
    отправляйте временную таблицу через POST и сразу используйте её в запросе - https://clickhouse.com/docs/ru/engines/table-engines/special/external-data/
    Внешние данные для обработки запроса | Документация ClickHouse

    Внешние данные для обработки запроса ClickHouse позволяет отправить на сервер данные, необходимые для обработки одного з

  • https://t.me/clickhouse_ru
    @stepan_stepanov #252262 09:55 AM, 05 Jan 2022
    Спасибо за советы, буду проверять
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @alex_spiridonov #252265 11:28 AM, 05 Jan 2022
    всем привет

    есть кластер СН из двух нод
    на обеих нодах создана:
    table A (...) engine = ReplicatedMT

    на первой ноде есть таблица К() engine = KafkaEngine и MV для перекачки данных из K в A

    есть желание создать table A_agg(...) engine = ReplicatedAggregatingMT,
    которая будет заполняться с помощью
    matview A_agg_mv to A_agg (...) from A

    вопросы:
    1. Правильно ли я понимаю, что необходимо и достаточно создавать A_agg_mv только на одной из нод?
    2. Есть ли разница, на какой из нод его создавать? (на одной в A вставляет mv из KafkaEngine, на второй - механизм репликации)
  • @oleynikpp #252267 11:35 AM, 05 Jan 2022
    Коллеги, подскажите. я в ДокереКомпозе запускаю КХ

    clickhouse_server:
    ulimits:
    nproc: 65535
    nofile:
    soft: 20000
    hard: 362144
    image: yandex/clickhouse-server
    environment:
    CLICKHOUSE_DB: Audit
    ports:
    - "8123:8123"
    - "9000:9000"
    volumes:
    - ./sql/clickhouse/init.sql:/docker-entrypoint-initdb.d/init.sql
    - ./data/clickhouse:/var/lib/clickhouse
    - ./data/clickhouse/shm:/dev/shm
    - ./data/clickhouse/logs:/var/log/clickhouse-server
    networks:
    - common-net

    когда БД не существует, то все создается нормально, контейнер запускается. а со второго раза получаю ошибку
    2022.01.05 11:21:07.621397 [ 58 ] {} <Information> Application: It looks like the process has no CAP_IPC_LOCK capability, binary mlock will be disabled. It could happen due to incorrect ClickHouse package installation. You could resolve the problem manually with 'sudo setcap cap_ipc_lock=+ep /usr/bin/clickhouse'. Note that it will not work on 'nosuid' mounted filesystems.
    2022.01.05 11:21:07.627975 [ 58 ] {} <Information> StatusFile: Status file /var/lib/clickhouse/status already exists - unclean restart. Contents:
    PID: 58
    Started at: 2022-01-05 11:18:47
    Revision: 54456

    и контейнер НЕ стартует. что я делаю не так?
  • https://t.me/clickhouse_ru
    @orx4n #252268 11:49 AM, 05 Jan 2022
    как делать выборку чтобы буффер таблица дала только данные размещенные в буффере не в related таблице ?
  • https://t.me/clickhouse_ru
    никак

    при выборке из buffer выбираются данные из underlying таблицы
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252269 #252270 12:11 PM, 05 Jan 2022
    А как узнать количество данных в буффере ? Мониторить инсерты ?
  • https://t.me/clickhouse_ru
    контейнер как стопаете?
  • останавливаю проект dockercompose в Visual studio 2022
  • https://t.me/clickhouse_ru
    вы параметры очистки буффера при создании создаете

    какую проблему вы решаете?
    Buffer теряет данные при рестарте, это by design

    можно остановить INSERT
    и сделать OPTIMIZE TABLE buffer_table
    (есть шанс что это не просто игнор а данные флашнутся, но не уверен что работает в новых версиях)
  • https://t.me/clickhouse_ru
    А почему тогда бы не использовать стандартный docker контейнер ?
  • @oleynikpp #252275 12:13 PM, 05 Jan 2022
    ну мне нужно запустить в докер композе несколько контейнеров
  • https://t.me/clickhouse_ru
    Windows ?
  • @oleynikpp #252277 12:14 PM, 05 Jan 2022
    подскажите ссылку откуда брать правильный стандартный контейнер?
  • нет все контейнеры линуховые
  • @oleynikpp #252279 12:15 PM, 05 Jan 2022
    вообщем у меня задача такая. запустить кх и сразу в нем запустить создание таблицы если она не создана
  • https://t.me/clickhouse_ru
    sudo docker run -d --restart=always --name clickhouse_1 \
    --ulimit nofile=262144:262144 \
    -p 0.0.0.0:8123:8123 -p 0.0.0.0:9000:9000 \
    -v путь/log:/var/log/clickhouse-server \
    -v путь/data:/var/lib/clickhouse \
    -v путь/users.xml:/etc/clickhouse-server/users.xml \
    -v путь/config.xml:/etc/clickhouse-server/config.xml \
    yandex/clickhouse-server
  • и руками каждый раз запускать?
  • @oleynikpp #252282 12:17 PM, 05 Jan 2022
    а как указать скл который создается при старте?
  • https://t.me/clickhouse_ru
    вообще то что вы показали, это не ошибка а просто information

    смотрите логи дальше в ./data/clickhouse/logs
  • Processing configuration file '/etc/clickhouse-server/config.xml'.

    Merging configuration file '/etc/clickhouse-server/config.d/docker_related_config.xml'.

    Logging trace to /var/log/clickhouse-server/clickhouse-server.log

    Logging errors to /var/log/clickhouse-server/clickhouse-server.err.log

    Processing configuration file '/etc/clickhouse-server/config.xml'.

    Merging configuration file '/etc/clickhouse-server/config.d/docker_related_config.xml'.

    Saved preprocessed configuration to '/var/lib/clickhouse/preprocessed_configs/config.xml'.

    Processing configuration file '/etc/clickhouse-server/users.xml'.

    Saved preprocessed configuration to '/var/lib/clickhouse/preprocessed_configs/users.xml'.

    ClickHouse init process failed.

    вот в консоли Докера
  • этот файл пустой clickhouse-server.err.log

    а вот файл clickhouse-server.log
  • и вот он не стартует
  • https://t.me/clickhouse_ru
    ClickHouse init process failed.

    что у вас вот в этом файле написано?
    - ./sql/clickhouse/init.sql:/docker-entrypoint-initdb.d/init.sql
  • @oleynikpp #252288 12:45 PM, 05 Jan 2022
  • файл выше прикрепил. там просто таблица создается. первый раз при запуске она успешно создается, никаких проблем нет
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #252289 #252290 12:47 PM, 05 Jan 2022
    Не смотрел в файл но может сделать IF NOT EXISTS ?)
  • https://t.me/clickhouse_ru
    @solard #252291 12:47 PM, 05 Jan 2022
    Файл инит запускается при каждом рестарте
  • внутри написано так

    create table if not exists Audit.AuditData
    (
    Number Int64,
    ClientName LowCardinality(String),
    ServiceName LowCardinality(String),
    OperationName LowCardinality(String),
    SenderName String,
    SenderRegister String,
    ReceiverName String,
    ReceiverRegister String null,
    IdSender String,
    IdReceiver String,
    DateTime DateTime64(6),
    Amount Decimal(30,18),
    PaymentSystem LowCardinality(String),
    CurrencyName LowCardinality(String),
    BalanceSender Nullable(Decimal(30,18)),
    BalanceReceiver Nullable(Decimal(30,18)),
    UpdateDateTime DateTime64(6) default now64(6)
    ) engine = ReplacingMergeTree(UpdateDateTime)
    partition by (ClientName, toMonth(DateTime))
    order by (ClientName, ServiceName, Number);
  • https://t.me/clickhouse_ru
    а кто будет делать
    CREATE DATABASE IF NOT EXIST Audit ?
  • environment:
    CLICKHOUSE_DB: Audit

    вот эта команда делает. уточню еще раз. у меня таблица создается, проблем нет. после остановки и запуска КХ, он уже НЕ стартует
  • https://t.me/clickhouse_ru
    @orx4n #252296 01:17 PM, 05 Jan 2022
    Кластер КХ из 4 шардов деплойен на кубере через оператор .
    SELECT
    host_name,
    host_address
    FROM system.clusters

    дает этот результат.

    проблема: каждый шард видит свой IP как 127.0.0.1
  • https://t.me/clickhouse_ru
    Это нормально, а в чем у вас проблема
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252297 #252298 01:23 PM, 05 Jan 2022
    Проблема возникает когда выполняется Distributed DDL - отдаёт таймаут
  • https://t.me/clickhouse_ru
    @orx4n #252299 01:23 PM, 05 Jan 2022
    помимо этого есть 3 ноды zookeeper
  • https://t.me/clickhouse_ru
    SELECT
    host_name,
    host_address,
    is_local
    FROM system.clusters
  • https://t.me/clickhouse_ru
    @unamedrus #252301 01:23 PM, 05 Jan 2022
    А вот так что покажет?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252298 #252304 01:25 PM, 05 Jan 2022
    но запрос выполняется на всех шардах . проблема в основном в этом
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252305 #252306 01:36 PM, 05 Jan 2022
    читал, это не решает проблему
  • https://t.me/clickhouse_ru
    initialization proccess failed

    осталось понять почему

    очень странно что у вас clickhouse-server.err.log пустой
    не должно такого быть

    у вас какая хостовая операционная система? windows ?
  • да хост на вин 10, Docker Desktop 4.3.2 (72729) is currently the newest version available. Docker Engine v20.10.11
  • https://t.me/clickhouse_ru
    возможно проблема в том что вы volume пробрасываете
    для данных
    и это все создается через 9p

    попробуйте volume для данных не пробрасывать и закоментарить вот это

    - ./data/clickhouse:/var/lib/clickhouse
    - ./data/clickhouse/shm:/dev/shm
  • закочентарил эти 2 строки и Да, работает без проблем. но мне нужно данные сохранять на хост машине
  • теперь появились ошибки 2022.01.05 13:51:41.671957 [ 1 ] {} <Warning> Application: Listen [::]:9004 failed: Poco::Exception. Code: 1000, e.code() = 0, DNS error: EAI: Address family for hostname not supported (version 21.11.3.6 (official build)). If it is an IPv6 or IPv4 address and your host has disabled IPv6 or IPv4, then consider to specify not disabled IPv4 or IPv6 address to listen in <listen_host> element of configuration file. Example for disabled IPv6: <listen_host>0.0.0.0</listen_host> . Example for disabled IPv4: <listen_host>::</listen_host>
    2022.01.05 13:51:41.673272 [ 1 ] {} <Warning> Application: Listen [::]:9005 failed: Poco::Exception. Code: 1000, e.code() = 0, DNS error: EAI: Address family for hostname not supported (version 21.11.3.6 (official build)). If it is an IPv6 or IPv4 address and your host has disabled IPv6 or IPv4, then consider to specify not disabled IPv4 or IPv6 address to listen in <listen_host> element of configuration file. Example for disabled IPv6: <listen_host>0.0.0.0</listen_host> . Example for disabled IPv4: <listen_host>::</listen_host>
  • https://t.me/clickhouse_ru
    @viktoriviki #252312 02:28 PM, 05 Jan 2022
    что уж
  • @kiosaku #252314 02:37 PM, 05 Jan 2022
    всем привет. в документации не нашёл описания миграции mergetree -> replicatedmergetree для конфигурации multi-disk - такое вообще есть в плане инструкций?
  • @kiosaku #252315 02:38 PM, 05 Jan 2022
    и я правильно понимаю, что ch не умеет самостоятельно распределять реплики для шардов? их (узлы) надо явно прописывать в конфигурации кластера?
  • https://t.me/clickhouse_ru
    добавьте
    environment:
    CLICKHOUSE_DO_NOT_CHOWN: 1
  • вроде бы помогло, спс вам огромное!!!!!!!!!
  • неа. все равно останавливается
  • https://t.me/clickhouse_ru
    shm уберите, оно вам вообще не нужно...
  • с опцией CLICKHOUSE_DO_NOT_CHOWN: 1 не запускается и первый раз :(

    Necessary directory '/var/lib/clickhouse/tmp/' isn't accessible by user with id '101'

    Necessary directory '/var/lib/clickhouse/' isn't accessible by user with id '101'
  • https://t.me/clickhouse_ru
    @horseheaxx #252321 03:10 PM, 05 Jan 2022
    знакомлюсь кста
  • https://t.me/clickhouse_ru
    кликхаус с тремя нодами настроишь?
  • https://t.me/clickhouse_ru
    даш кредитку, она тебе и гео-распределенный-high-availability сделает =)
  • https://t.me/clickhouse_ru
    уверен? :))))))))
  • @zhora9001 #252325 04:32 PM, 05 Jan 2022
    Добрый день! Подскажите, можно ли как-то отключить predicate pushdown для выражений, содержащих обращение к словарям (и оставить для остальных)? Сломались запросы в кейсах, когда словарь есть только на одном сервере
  • https://t.me/clickhouse_ru
    Лучше переписать запрос (-ы) так чтобы подзапросом выбиралось с удаленных машин - совсем выключить эквивалент положить сеть и всегда сканить всё
  • 06 January 2022 (95 messages)
  • https://t.me/clickhouse_ru
    @kbespalov #252331 02:00 AM, 06 Jan 2022
    Привет! А какой статус у GRPC интерфейса в Clickhouse, уже Stable ?
  • https://t.me/clickhouse_ru
    да
  • вот в том и беда, что в подзапросы пушдаун тоже пролазит: в запросе виде SELECT dictGet(‘users’, ‘name’, t.userId) as userName FROM (SELECT userId FROM events WHERE …) t WHERE userName LIKE ‘ivan%’ условие LIKE вместе с dictGet будет передано на шарды (если events - Distributed таблица)
  • https://t.me/clickhouse_ru
    @236380181 #252335 09:59 AM, 06 Jan 2022
    Joined.
  • https://t.me/clickhouse_ru
    А если в подзапрос фиктивный лимит?
    Если не поможет - то группировка и парамка что-то типа distributed_group_by_no_merge

    Ну и с обратной стороны можно зайти - сначала из дикта выковырять ид, и подставить инлайном в global in (...) - если рациональное количество конечно.
  • принял, попробуем, спасибо!
  • https://t.me/clickhouse_ru
    @tkostyan #252338 02:07 PM, 06 Jan 2022
    Подскажите, а как добавить колонку в MatView в БД с Atomic движком? С движком Ordinary это работает, а с Atomic -- нет. Версия ClickHouse — 21.12.3.32.

    :) create database test_atomic ENGINE = Atomic;

    0 rows in set. Elapsed: 0.003 sec.

    :) use test_atomic;

    USE test_atomic

    0 rows in set. Elapsed: 0.001 sec.

    :) CREATE TABLE test (date Date, hour Int8, x Int32) Engine = MergeTree ORDER BY tuple();

    Ok.

    0 rows in set. Elapsed: 0.005 sec.

    :) CREATE MATERIALIZED VIEW mv (date Date, x Int32) ENGINE = SummingMergeTree() ORDER BY tuple() AS SELECT date, sum(x) AS x FROM test GROUP BY date;

    Ok.

    0 rows in set. Elapsed: 0.009 sec.

    :) DETACH VIEW mv;

    DETACH VIEW mv

    Ok.

    0 rows in set. Elapsed: 0.001 sec.

    :) show tables

    SHOW TABLES

    ┌─name───────────────────────────────────────────┐
    │ .inner_id.21030636-49a4-462c-a103-063649a4262c │
    │ test │
    └────────────────────────────────────────────────┘

    2 rows in set. Elapsed: 0.002 sec.

    :) ALTER TABLE ".inner_id.21030636-49a4-462c-a103-063649a4262c" ADD COLUMN y Int32;

    Ok.

    0 rows in set. Elapsed: 0.004 sec.

    :) ATTACH MATERIALIZED VIEW mv (date Date, x Int32, y Int32) ENGINE = SummingMergeTree() ORDER BY tuple() AS SELECT date, sum(x) AS x, 1 AS y FROM test GROUP BY date;

    0 rows in set. Elapsed: 0.001 sec.

    Received exception from server (version 21.12.3):
    Code: 80. DB::Exception: Received from localhost:9000. DB::Exception: Incorrect ATTACH TABLE query for Atomic database engine. Use one of the following queries instead:
    1. ATTACH TABLE mv;
    2. CREATE TABLE mv <table definition>;
    3. ATTACH TABLE mv FROM '/path/to/data/' <table definition>;
    4. ATTACH TABLE mv UUID '<uuid>' <table definition>;. (INCORRECT_QUERY)
  • https://t.me/clickhouse_ru
    @rclick #252339 02:26 PM, 06 Jan 2022
    Подскажите плз, проекции уже можно на продакшн использовать или то, что мы не напоролись на ошибки в тестах еще не означает, что все гладко?
  • https://t.me/clickhouse_ru
    В целом можно, автор проекций уже с ~апреля использует в продакшене и в целом отзывчиво фиксит баги
  • https://t.me/clickhouse_ru
    @rclick ↶ Reply to #252340 #252341 02:28 PM, 06 Jan 2022
    Звучит многообещающе, спасибо!
  • https://t.me/clickhouse_ru
    @rclick #252342 02:29 PM, 06 Jan 2022
    А clickhouse-keeper уже тоже достаточно предсказуем?
  • https://t.me/clickhouse_ru
    В целом pre-production, но некоторые уже используют в проде пару месяцев.

    Наверное через пару месяцев выкатят как продакшен фичу.

    А вы новый кластер поднимаете?
  • https://t.me/clickhouse_ru
    @rclick #252344 02:31 PM, 06 Jan 2022
    да, переезжаем на новый кластер, с параллельным изменением схем данных, поэтому хочется по-максимуму отбросить рудименты и пересмотреть часть логики
  • https://t.me/clickhouse_ru
    лучше всего делать MV вместе с TO dst_table
    потом DETACH MATERIALIZED VIEW + ALTER TABLE dst_table ADD COLUMN
    и потом делать CREATE OR REPLACE MATERIALIZED VIEW
  • https://t.me/clickhouse_ru
    Ну если новый, то можете пробовать clickhouse-keeper думаю
  • @VitalVas #252348 05:51 PM, 06 Jan 2022
    Подскажите, плиз, как можно эфективно хранить масив uint64?
  • @unamedrus, по этим двум вопросам нет ли каких-либо мыслей?
  • https://t.me/clickhouse_ru
    Array(UInt64)?
  • увы, много занимает…
  • https://t.me/clickhouse_ru
    можно ещё отсортировать как сам массив, так и колонку
  • https://t.me/clickhouse_ru
    @nyoroon #252353 06:07 PM, 06 Jan 2022
    без этого сильно лучше вряд ли будет
  • https://t.me/clickhouse_ru
    @nyoroon #252354 06:09 PM, 06 Jan 2022
    с хранением рандомных циферок всегда тяжело (а судя по жирности колонки они там рандомные)
  • масив уже отсортирован… колонку еще не пробовал
  • @VitalVas #252356 06:11 PM, 06 Jan 2022
    там не совсем рандомо…. около 10к уникальных числа… в масиве можем быть в среднем 3-6 елемента
  • https://t.me/clickhouse_ru
    Мр, а какая версич
  • https://t.me/clickhouse_ru
    @unamedrus #252358 06:12 PM, 06 Jan 2022
    В целом не отличается для варианта с 1 диском
  • Там же еще можно модификаторы на колонки, как именно хранить, дифами, отрезать лидирующие нули и тд CODEC(LZ4HC) по-умолчанию
  • https://t.me/clickhouse_ru
    groupBitmap но тут сложно, может и не поможет
  • 21.12.3.32
  • а вот тут не очень понятно, metadata-то в нескольких местах будет … как и данные
  • https://t.me/clickhouse_ru
    Метадата в одном месть
  • https://t.me/clickhouse_ru
    @unamedrus #252364 06:14 PM, 06 Jan 2022
    В общем просто сделайте

    Alter table xxx Attach partition from
  • https://t.me/clickhouse_ru
    @unamedrus #252365 06:14 PM, 06 Jan 2022
    Для всех партиций
  • @kiosaku #252366 06:14 PM, 06 Jan 2022
    это в документации есть
  • @kiosaku #252367 06:15 PM, 06 Jan 2022
    но там есть и копирование метаданных. видимо, придётся проверять
  • а вот тут вот?
  • данных местами много с вертики тащить 🙁
  • @kiosaku #252370 06:16 PM, 06 Jan 2022
    заранее спасибо
  • https://t.me/clickhouse_ru
    Да, не умеет
  • https://t.me/clickhouse_ru
    @unamedrus #252372 06:17 PM, 06 Jan 2022
    Ручками в remote servers прописываете
  • @kiosaku #252373 06:17 PM, 06 Jan 2022
    тоска-печаль 🙁
  • @kiosaku #252374 06:17 PM, 06 Jan 2022
    +1 машина в кластер и рихтуй конфиг заново
  • https://t.me/clickhouse_ru
    Ну уже сделали автодискавери, так что не за горами все
  • @kiosaku #252376 06:18 PM, 06 Jan 2022
    /me задумчиво вспоминает aerospike
  • Не вспоминай 😂 забудь и живи на светлой стороне.
  • @kiosaku #252378 07:00 PM, 06 Jan 2022
    ты вообще мог бы и промолчать. а то ещё ДМ вспомню 🙂
  • https://t.me/clickhouse_ru
    OLAP и OLTP обычно это сильно разные задачи, и если КХ Вам не подходит, возможно у Вас просто OLTP задача
  • я про автоматическое шардирование
  • https://t.me/clickhouse_ru
    Это вроде коммерческая фича КХ ?
  • @kiosaku #252382 07:04 PM, 06 Jan 2022
    ну и репликацию тоже
  • https://t.me/clickhouse_ru
    @yourock88 #252383 07:04 PM, 06 Jan 2022
    Но я не шарю
  • https://t.me/clickhouse_ru
    @yourock88 #252384 07:04 PM, 06 Jan 2022
    Репликация в КХ вроде автоматическая все же :)
  • да ну?
  • @kiosaku #252386 07:05 PM, 06 Jan 2022
    Репликация данных | Документация ClickHouse

    Репликация данных Репликация поддерживается только для таблиц семейства MergeTree: ReplicatedMergeTree ReplicatedSumming

  • @kiosaku #252387 07:05 PM, 06 Jan 2022
    а это тогда про что?
  • https://t.me/clickhouse_ru
    @nyoroon #252388 07:05 PM, 06 Jan 2022
    изменение движка таблицы
  • @kiosaku #252389 07:05 PM, 06 Jan 2022
    и?
  • https://t.me/clickhouse_ru
    ну а причем тут репликация?
  • @kiosaku #252391 07:05 PM, 06 Jan 2022
    требуется ещё изменения в <cluster>
  • @kiosaku #252392 07:06 PM, 06 Jan 2022
    ещё требуется zk ...
  • “ClickHouse хранит метаинформацию о репликах в Apache ZooKeeper”
  • https://t.me/clickhouse_ru
    ну так КХ хранит, для пользователя это прозрачно (пока жив ЗК)
  • Можете так автоматически зашардировать что потом сами не найдете данные)
  • я тебе уже этот вопрос задавал, не надо тут 🙂
  • https://t.me/clickhouse_ru
    @catent ↶ Reply to #252381 #252397 07:08 PM, 06 Jan 2022
    Такие вообще есть разве?
  • @kiosaku #252398 07:09 PM, 06 Jan 2022
    всё, притормозим пока-что. чёткого ответа нет. а что там дальше вылезет - посмотрим
  • @irusin ↶ Reply to #252332 #252399 07:14 PM, 06 Jan 2022
    А для gRPC интерфейса работает оптимизация асинхронных вставок ? ( Которая появилась осенью и вроде как работала для HTTP протокола и не работала для TCP)?
  • https://t.me/clickhouse_ru
    не в курсе
  • https://t.me/clickhouse_ru
    Значит я это придумал. Со мной бывает
  • https://t.me/clickhouse_ru
    @viktoriviki #252402 07:33 PM, 06 Jan 2022
    мда уж
  • https://t.me/clickhouse_ru
    Ее вообще нет и не было.
  • https://t.me/clickhouse_ru
    @pxlvgg ↶ Reply to #252251 #252405 07:39 PM, 06 Jan 2022
    про внутреннюю эмм
  • https://t.me/clickhouse_ru
    @pxlvgg ↶ Reply to #252244 #252406 07:39 PM, 06 Jan 2022
    df -H
  • https://t.me/clickhouse_ru
    @pxlvgg #252407 07:39 PM, 06 Jan 2022
    и график есть
  • https://t.me/clickhouse_ru
    @pxlvgg #252408 07:40 PM, 06 Jan 2022
    слева - предел, память очистилась когда clickhouse был перезапущен
  • https://t.me/clickhouse_ru
    А какая версия клика?
  • https://t.me/clickhouse_ru
    @mark_frost #252413 07:53 PM, 06 Jan 2022
    Мы когда обновились до последней стабильной версии проблемы с памятью ушли
  • https://t.me/clickhouse_ru
    Если только 10к то зачем uint64? Есть способ уменьшить, скажем, до uint16? Вообще мы хранили в массивах до нескольких миллионов уникальных значений. Проблемы были, но больше с тем, что в одной записи значений могло быть много
  • uint64 - это просто результат работы xxhash и много лени по работе со справочниками….
    думаю вообще выкинуть масивы - переписав работу со справочником
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252415 #252416 08:10 PM, 06 Jan 2022
    У вас там какие-то строки были изначально? С кардинальностью 10к? выкидывайте xxhash и отдайте в КХ "работу со справочниками" - Array(LowCardinality(String))
  • изначально там масив ключ-значения
    там больше подходит Map(LowCardinality(String), String), но go-шный драйвер не поддерживает работу с таким
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252417 #252418 08:16 PM, 06 Jan 2022
    Ну так сделайте Tuple(LowCardinality(String), String) - отличия от Map при хранении невелики, если понадобится - соберете в Map прямо в рамках select
  • спасибо, попробую
  • https://t.me/clickhouse_ru
    Скоро будет
  • https://t.me/clickhouse_ru
    @catent #252421 08:57 PM, 06 Jan 2022
    Map поддерживает разве LowCardinality(String) в качестве K?
  • https://t.me/clickhouse_ru
    @catent #252422 08:57 PM, 06 Jan 2022
    А, да
  • это будет прекрасно
  • @zhora9001 #252424 09:15 PM, 06 Jan 2022
    Раз уж тут обсуждается мап, позволю себе поднять старый вопрос: есть ли какие-то планы по работе с map как с хэш-таблицей (в части доступа за единицу вместо линии, если быть точным)? По банальным тестам все выглядит так, что поиск по ключу в map работает медленнее, чем, например JOIN временной таблицы из этих же значений (видимо, потому, что JOIN создает хэш-таблицу)

    Или мы что-то упускаем?
  • https://t.me/clickhouse_ru
    Условно, map это некоторый "сахар" над двумя массивами: ключи и значения. В КХ нет и невозможны индексы в классическом их понимании из-за объема хранящихся данных и особенностей хранения (блоками). Те всегда читаем много и, относительно, oltp - долго.
  • https://t.me/clickhouse_ru
    @catent #252426 09:32 PM, 06 Jan 2022
    Теоретически наверное можно было хранить блок с Map в другой структуре данных, но не факт что это было бы быстрее чем сейчас
  • да, я так и понял, но не совсем ясно, что мешает на лету превращать Map в хэш-таблицу, если запрос использует индексер? Это ведь O(N), вроде ничего не теряем. А вот из-за того, что это не делается, наблюдаются вот такие приколы:

    SELECT count(*) FROM (
    WITH map(0, 1, ..., 255) AS lookup
    SELECT number, lookup[n.number % 256] FROM numbers(1e8) n
    )

    1 rows in set. Elapsed: 4.974 sec. Processed 100.03 million rows, 800.21 MB (20.11 million rows/s., 160.88 MB/s.)

    SELECT count(*) FROM (
    WITH lookupTable AS (SELECT 0 key, 1 value UNION ALL SELECT 2 key, 3 value ... UNION ALL SELECT 254 key, 255 value)
    SELECT number, lookupTable.value FROM numbers(1e8) n
    INNER JOIN lookupTable ON lookupTable.key = n.number % 256
    )

    1 rows in set. Elapsed: 1.411 sec. Processed 100.03 million rows, 800.21 MB (70.88 million rows/s., 567.06 MB/s.)
  • ну и да, линия вылазит стоит только увеличить N:

    SELECT count(*) FROM (
    WITH map(0, 1, ..., 1023) AS lookup
    SELECT number, lookup[n.number % 1024] FROM numbers(1e8) n
    )

    1 rows in set. Elapsed: 17.441 sec. Processed 100.03 million rows, 800.21 MB (5.73 million rows/s., 45.88 MB/s.)

    в то время, как

    SELECT count(*) FROM (
    WITH lookupTable AS (SELECT 0 key, 1 value UNION ALL SELECT 2 key, 3 value ... UNION ALL SELECT 1022 key, 1023 value)
    SELECT number, lookupTable.value FROM numbers(1e8) n
    INNER JOIN lookupTable ON lookupTable.key = n.number % 1024
    )

    1 rows in set. Elapsed: 1.265 sec. Processed 100.03 million rows, 800.21 MB (79.05 million rows/s., 632.38 MB/s.)
  • @zhora9001 #252429 10:10 PM, 06 Jan 2022
    Бтв прекрасно понимаю все ньюансы (для маленьких Map, для выборки малого процента ключей, для большого кол-ва разных Map и тд строить хэши будет по итогу медленнее, чем поискать за линию, например), но быть может полезно было бы сделать какую-нибудь функцию а-ля hashMap, чтобы можно было проактивно сказать «вот тут буду много искать/искать в большой мапе, давайте конвертить в хэш-таблицу»?
  • та-же проблема - go драйвер не поддерживает… (unsupported Tuple(T) type [map[string]string])
  • https://t.me/clickhouse_ru
    @kshvakov #252432 10:37 PM, 06 Jan 2022
    Там все плохо с типами которые появились в последние 3-и года. Еще легаси много, добавлю в v2, там будут обратно не совместимые фичи типа нормальных плейсхолдеров для bind, использование контекстов и прочее, типа собственного интерфейса доступа без database/sql
  • 07 January 2022 (34 messages)
  • https://t.me/clickhouse_ru
    Это не память
    Это свободное дисковое пространство
  • https://t.me/clickhouse_ru
    Почитайте что такое сортировка слиянием

    И поищите стать на habr про merge tree

    Почитайте в документации что такое system.query_log
    Посчитайте по нему как часто и насколько малыми порциями вы вставляете данные

    Что выдает у вас select active, database, count() from system.parts group by active,database ?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252431 #252436 07:29 AM, 07 Jan 2022
    значит через два отдельных массива. Хоть это-то поддерживается?
    create table test ( a Nested(b LowCardinality(String),c String) ) engine = Memory;
    insert into test values (['b1','b2'],['c1','c2']);
    select cast((a.b,a.c),'Map(String,String)') from test;
    {'b1':'c1','b2':'c2'}
  • https://t.me/clickhouse_ru
    @trillij #252437 09:12 AM, 07 Jan 2022
    По словам очевидцев, к 11 часам утра стрельба в Алма-Ате прекратилась

    Сейчас в городе задержаны более 70 участников беспорядков, нападавших на административные здания, и более 30 мародёров.

    SHOT
  • https://t.me/clickhouse_ru
    @koshakm5 #252438 09:37 AM, 07 Jan 2022
    привет, у нас в логе вот такая ошибка, не могу понять про что это
  • https://t.me/clickhouse_ru
    @koshakm5 #252439 09:38 AM, 07 Jan 2022
    Exception: Code: 192, e.displayText() = DB::Exception: Received from 0node0119.xxx:9000. DB::Exception: Received from 2node0114.xxx:9000. DB::Exception: root: User has been dropped. (version 21.8.10.19 (official build))
  • https://t.me/clickhouse_ru
    @koshakm5 #252440 09:38 AM, 07 Jan 2022
    это ноды в разных шардах
  • https://t.me/clickhouse_ru
    кажется нашёл, и это не связано с кх, похоже на сетевую проблему
  • https://t.me/clickhouse_ru
    @vulgarnykarlson #252442 11:48 AM, 07 Jan 2022
    Привет! Можно ли в кх запросах используя WITH прокидывать в название таблицы
  • https://t.me/clickhouse_ru
    @vulgarnykarlson #252443 11:48 AM, 07 Jan 2022
    Условно так: WITH 'custom_name' AS name
    SELECT * FROM name
  • https://t.me/clickhouse_ru
    @vulgarnykarlson #252444 11:50 AM, 07 Jan 2022
    Проблематика: не знаю как в графане через variable прокинуть в названии таблицы, и пытаюсь схитрить через WITH , так как напрямую прокинуть нельзя, конкатинировать подобно
    FROM ('custom_table', name)
    тоже нету возможности
  • https://t.me/clickhouse_ru
    судя по всему вы хотите некоторый аналог eval
    так не получится
  • https://t.me/clickhouse_ru
    @vulgarnykarlson #252446 12:09 PM, 07 Jan 2022
    @BloodJazMan даже без извращений по типу EXECUTE ?)
  • https://t.me/clickhouse_ru
    @vulgarnykarlson #252447 12:10 PM, 07 Jan 2022
    Просто как я вижу сам клиент кликхауса поддерживает подобного рода техники
  • https://t.me/clickhouse_ru
    @vulgarnykarlson #252448 12:10 PM, 07 Jan 2022
    Клиент командной строки | Документация ClickHouse

    Клиент командной строки ClickHouse предоставляет собственный клиент командной строки: clickhouse-client. Клиент поддержи

  • https://t.me/clickhouse_ru
    ну это немного другое

    сделайте это через
    https://clickhouse.com/docs/ru/interfaces/http/#cli-queries-with-parameters

    у вас в качестве клиента какой язык \ библиотека?
    HTTP-интерфейс | Документация ClickHouse

    HTTP-интерфейс HTTP интерфейс позволяет использовать ClickHouse на любой платформе, из любого языка программирования. У

  • https://t.me/clickhouse_ru
    Видимо нативный клиент CH интегрированный в Grafana
  • https://t.me/clickhouse_ru
    @pavel_gear #252452 12:20 PM, 07 Jan 2022
    Подскажите пожалуйста, для движков MergeTree индексы нормально совмещаются с ключами? Пример: в order by ключе поля c1 и c2, индекс bloom_filter по полю c3, выборка такая: c1 = 1 and c3 = 3.
  • https://t.me/clickhouse_ru
    Там же нужно ставить расширения, чтобы с CH работать
  • https://t.me/clickhouse_ru
    @vulgarnykarlson #252454 12:21 PM, 07 Jan 2022
    Нашел решение! SELECT * FROM ${variableCustomName:raw} всем спасибо
  • https://t.me/clickhouse_ru
    @vulgarnykarlson #252455 12:22 PM, 07 Jan 2022
    Но данное решение работает только в графане.
  • https://t.me/clickhouse_ru
    Все верно, расширение и стоит, и в качестве сорса используется отдельный коннект к бд
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252452 #252457 12:39 PM, 07 Jan 2022
    Совмещаются. Насколько нормально судить вам:
    EXPLAIN PLAN indexes=1 select ....
  • https://t.me/clickhouse_ru
    @Vitaly_Ivanov #252458 02:58 PM, 07 Jan 2022
    Коллеги, подскажите можно ли собрать “сложный” кластер? Например, часть таблиц на медленных серверах, а часть на быстрых, так чтобы можно было обе группы серверов одновременно использовать для запросов?
  • https://t.me/clickhouse_ru
    Да, ноды в кх полностью независимы, одна и та же нода может участвовать в нескольких кластерах
  • https://t.me/clickhouse_ru
    потому что этот темплейтинг на стороне grafana делается
  • https://t.me/clickhouse_ru
    а какой профит пытаетесь достичь?
    какое у вас окружение? облака? bare-metal?

    сколько у вас серверов в кластере планируется?

    обычно несбалансированные кластера получаются когда bare-metal
    и железо просто докупается по мере необходимости и новые данные просто льются на новые сервера, а старые данные хранятся на старых

    но это надо пару лет чтобы кластер рос линейно

    если сразу делать "не сбалансированный кластер",

    может проще сделать multi volume storage policy по дискам?
    https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/#table_engine-mergetree-multiple-volumes_configure ?
    MergeTree | ClickHouse Documentation

    MergeTree The MergeTree engine and other engines of this family (*MergeTree) are the most robust ClickHouse table engine

  • https://t.me/clickhouse_ru
    Идея такая чтобы иметь горячие данные на одной группе серверов с ssd и холодные данные которые нужны редко на 2х серверах с большими дисковыми полками. Железо, не облака.
  • https://t.me/clickhouse_ru
    тут проблема в том как вы данные будете между серверами переливать с горячего на холодное
    всякие storage_policy они в рамках одного сервера работают между разными дисками...

    можно конечно изголяться и делать что-то типа
    INSERT INTO slow_distributed_table SELECT ... FROM hot_local_table WHERE _partition_id='YYYYMM'
    +
    ALTER TABLE hot_local_table DROP PARITITION 'YYYYMM'
    но это не транзакционно и будет окно когда в медленных дисках и в быстрых данные дублирются

    ну как немного костыльный вариант
    "медленные сервера с полками"
    на них можно minio поднять

    и в горячих серверах сделать s3 диски
    https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/#table_engine-mergetree-s3

    но будет хуже data locality, CPU на дисковых полках обсчетами никакими заниматься не будет и будет простаивать

    лучший вариант "экономить на железе"
    это пара NVMe на 1-2Tb в JBOD storage_policy под быстрые данные и пара HDD на 5Tb+ тоже в JBOD под холодные

    но я так понимаю "сервера" у вас уже давно есть?
    MergeTree | ClickHouse Documentation

    MergeTree The MergeTree engine and other engines of this family (*MergeTree) are the most robust ClickHouse table engine

  • https://t.me/clickhouse_ru
    данных у вас живых уже сколько?
  • @garikanet #252465 06:24 PM, 07 Jan 2022
    Возникала задача развернуть несколько CH разных версий на одном PH, хочется получить одновременно 18,21,dev22 версии и кластреную сборку из 21-вых и чтобы это можно было через один YAML делать.
    Подскажите смогу я это сделать через MiniKube и Altinity ClickHouse Operator ? (не разу не работал с кубером )))
    Может кто то поделится готовыми примерами yml
  • https://t.me/clickhouse_ru
    clickhouse-operator имеет некую минимальную версию кх которую он поддерживает/тестируют
    И она старше чем 18.

    Мб вам в сторону простого docker-compose посмотреть?
  • https://t.me/clickhouse_ru
    А зачем вам для этого вообще Kubernetes? Самое простое - это описать сервисы в Docker Compose. Пример https://github.com/ClickHouse/clickhouse-go/blob/v2/docker-compose.yml
  • @garikanet #252469 07:30 PM, 07 Jan 2022
    Хотелось сразу operator потрогать - чтобы подумать с UI для него, докеры я по наделал... но хотелось чтобы UI к operator умел тушить, переставлять CH
    Если там 18 минимум то ок, 1ю версию я и в docker подинму
  • 08 January 2022 (104 messages)
  • https://t.me/clickhouse_ru
    https://github.com/Altinity/altinity-dashboard

    Есть альфа версия простенького дашборда для оператора.
    GitHub - Altinity/altinity-dashboard: Altinity Dashboard helps you manage ClickHouse installations controlled by clickhouse-operator.

    Altinity Dashboard helps you manage ClickHouse installations controlled by clickhouse-operator. - GitHub - Altinity/altinity-dashboard: Altinity Dashboard helps you manage ClickHouse installations ...

  • @704332192 #252475 08:12 AM, 08 Jan 2022
    Здравствуйте, помогите пожалуйста перестал работать ноутбук не знаю что делать?
  • Села батарейка bios скорее всего, зайдите в биос и выставьте текущую дату время!
  • https://t.me/clickhouse_ru
    А у вас кликхаус случаем не тормозил перед этим ?
  • https://t.me/clickhouse_ru
    У моих знакомых как-то ClickHouse на ARM-процессоре тормозил, а потом оказалось, что они шину питания не подключили и процессор только за счет энергии от шины данных работал :)
  • https://t.me/clickhouse_ru
    @dbalashov #252479 08:21 AM, 08 Jan 2022
    (задёргался глаз)
  • @sergey_alaev #252480 08:22 AM, 08 Jan 2022
    Мой внутренниий инженер говорит "расстрелять"
  • :)
  • Дату выстовил! Теперь появилось это! Не выходит теперь отсюда
  • @alexey58 #252483 08:27 AM, 08 Jan 2022
    Винт не видет, если не можешь разобраться обратись к специалисту
  • Обратился к одному он мне сказал я не не знаю что делать
  • @qhang #252485 08:41 AM, 08 Jan 2022
    Попробуйте uefi загрузку выключить, возможно поэтому загрузочный диск не виден
  • https://t.me/clickhouse_ru
    @pimpmyyoba #252486 08:45 AM, 08 Jan 2022
    Всем привет. Кто-то видел модуль на кликхаус для вычисления kmeans?
  • Как это сделать?
  • @qhang #252488 08:50 AM, 08 Jan 2022
    Не знаю как это сделать на этой модели, посмотрите на сайте производителя user manual. Судя по видео сейчас включена uefi загрузка. Что бы она работала нужно чтобы диск в gpt-формате был отформатирован. Если это не так, то диск не будет отображаться в списке загрузочных устройств, что сейчас и наблюдается. Варианта тут два - или диск не подключен или он в mbr отформатирован и тогда нужно в bios включить csm загрузку
  • https://t.me/clickhouse_ru
    Вы, конечно, извините, но это вроде канал о CH и вопросах, связанных с ним, а не кружок "очумелые ручки". Или я неправ?
  • Прав! Думал добрые люди помогают своими знаниями! Я просто не знал куда написать! Если подскажите куда написать скиньте ссылку пожалуйста! Я просто живу в селе и возможности нету отдать в ремонт у нас есть один мастер но он не решил эту проблему!
  • https://t.me/clickhouse_ru
    @aichesnokov #252491 10:26 AM, 08 Jan 2022
    Как изменить BIOS с UEFI на устаревшую поддержку - Lenovo B50-70 - Lenovo Support RU
    https://support.lenovo.com/ru/ru/solutions/ht503657-how-to-change-bios-from-uefi-to-legacy-support-lenovo-b50-70
    Как изменить BIOS с UEFI на устаревшую поддержку - Lenovo B50-70 - Lenovo Support RU

    Как перейти с UEFI на устаревший BIOS на Lenovo B50-70

  • https://t.me/clickhouse_ru
    Ссылка На решение
  • @shamsuyarov_sr #252493 11:38 AM, 08 Jan 2022
    Ребята подскажите пожалуйста сдуру разделил csv через ',' вместо , теперь не могу разобраться как импортнуть пробую FORMAT CustomSeparated SETTINGS format_custom_escaping_rule = 'CSV', format_custom_row_between_delimiter = '','' ", как правильно экранировать?
  • https://t.me/clickhouse_ru
    а нельзя обратно поменять на нормальные разделители в самом файле?
  • @shamsuyarov_sr #252495 12:04 PM, 08 Jan 2022
    Можно но наверно не быстро 300мл строк
  • https://t.me/clickhouse_ru
    @BSolovyev #252496 12:05 PM, 08 Jan 2022
    Смотря сколько времени уйдёт на костыли (:
  • https://t.me/clickhouse_ru
    Ну 300 млн
  • https://t.me/clickhouse_ru
    @konnectrl #252498 12:15 PM, 08 Jan 2022
    Если нормально написать на питоне
  • https://t.me/clickhouse_ru
    @konnectrl #252499 12:15 PM, 08 Jan 2022
    То не очень долго
  • @111010502 #252500 12:15 PM, 08 Jan 2022
    Седом можно без проблем
  • https://t.me/clickhouse_ru
    @viktoriviki #252501 12:17 PM, 08 Jan 2022
    пишите котики
  • Да просто уже и в gz упаковал и в том докера закинул и тут сюрприз))
  • Экранирование через обратный слеш \ попробуйте сделать
  • @infisamk #252504 12:32 PM, 08 Jan 2022
    \',\' - как-то так, наверное
  • https://t.me/clickhouse_ru
    попробуйте свою на python сделать
    https://clickhouse.com/docs/en/sql-reference/functions/#user-defined-functions
    Introduction | ClickHouse Documentation

    Functions There are at least* two types of functions - regular functions (they are just called “functions”) and aggregat

  • https://t.me/clickhouse_ru
    Спасибо, что-то не нашёл этой доки
  • https://t.me/clickhouse_ru
    Это вроде недавно добавили, если что то получится можете мне скинуть ?
  • https://t.me/clickhouse_ru
    Пока исследую варианты, у нас есть скрипты уже под это, но думал как бы данные не выкачивать
  • https://t.me/clickhouse_ru
    Мы делаем K-means в PG
  • "INSERT INTO micro_tickets FORMAT CustomSeparated SETTINGS format_custom_escaping_rule = 'CSV', format_custom_field_delimiter = ''','''" вот так почти работает то-есть экранирование через двумя ' но ломается на пустых значениях когда встречает ','','. Короче сделаю норм CSV :))
  • @packofopinions #252511 01:59 PM, 08 Jan 2022
    Добрый вечер) Не подскажете, как можно посчитать произвадение всех значений сгруппированной колонки?
  • https://t.me/clickhouse_ru
    @Har01d #252512 02:01 PM, 08 Jan 2022
    Всем привет! Никто не сталкивался с ошибками типа “Code: 439. DB::Exception: Cannot schedule a task: cannot allocate thread (threads=59, jobs=59). CANNOT_SCHEDULE_TASK)” под нагрузкой (идёт довольно много и вставок в процессе перенаполнения данными, и чтений)? Версия 21.11.6.7.

    Ресурсы свободные у сервера вроде есть, не очень очевидно в какую сторону копать.
  • https://t.me/clickhouse_ru
    @Har01d #252513 02:09 PM, 08 Jan 2022
    На вставке ошибка может выглядеть так: Code: 439. DB::Exception: Cannot schedule a task: no free thread (timeout=0) (threads=10000, jobs=10000): While executing ParallelParsingBlockInputFormat. (CANNOT_SCHEDULE_TASK)
  • https://t.me/clickhouse_ru
    сколько CPU ядер на сервере?
  • https://t.me/clickhouse_ru
    @Har01d ↶ Reply to #252514 #252515 02:10 PM, 08 Jan 2022
    128 физических ядер, 256 тредов
  • https://t.me/clickhouse_ru
    <!-- Maximum number of threads in the Global thread pool.
    This will default to a maximum of 10000 threads if not specified.
    of the time, in which case a higher number of threads might be required.
    <max_thread_pool_size>10000</max_thread_pool_size>
    and to reuse mappings from several threads and queries,
  • https://t.me/clickhouse_ru
    @unamedrus #252517 02:12 PM, 08 Jan 2022
    Попробуйте эту настройку поднять
  • https://t.me/clickhouse_ru
    @Har01d #252518 02:15 PM, 08 Jan 2022
    Спасибо, сейчас на одном из серверов поменял, помониторим!
  • https://t.me/clickhouse_ru
    а как определяете что "ресурсы еще есть"?

    background_pool_size = 256
    поставьте

    и вообще посмотрите на все настройки
    SELECT * FROM system.settings WHERE name LIKE '%_pool_size'
  • https://t.me/clickhouse_ru
    @Har01d #252520 02:22 PM, 08 Jan 2022
    Или там 256 физических ядер, я уже чего-то забыл, по-моему у нас там два Эпика для Кликхауса, 128 это для Постгреса было :)

    Спасибо, по крайней мере понятно в какую сторону копать. Изменение max_thread_pool_size пока не помогло.

    “Ресурсы ещё есть” — проц утилизирован на 20%, на диск тоже гигантской нагрузки нет, запросы, которые выполняются, выполняются быстро, т.е. такое впечатление, что искусственный лимит какой-то.
  • https://t.me/clickhouse_ru
    я подумал что это мем какой-то и ждал подвоха,а тут тех поддержка, лучше бы мем был.
  • https://t.me/clickhouse_ru
    > Спасибо, по крайней мере понятно в какую сторону копать. Изменение max_thread_pool_size пока не помогло.

    Рестарт был?

    ulimit -Sa
    ulimit -Ha
  • https://t.me/clickhouse_ru
    @Har01d ↶ Reply to #252522 #252523 02:39 PM, 08 Jan 2022
    ulimit -Sa
    real-time non-blocking time (microseconds, -R) unlimited
    core file size (blocks, -c) 0
    data seg size (kbytes, -d) unlimited
    scheduling priority (-e) 0
    file size (blocks, -f) unlimited
    pending signals (-i) 4127416
    max locked memory (kbytes, -l) 132089736
    max memory size (kbytes, -m) unlimited
    open files (-n) 65635
    pipe size (512 bytes, -p) 8
    POSIX message queues (bytes, -q) 819200
    real-time priority (-r) 0
    stack size (kbytes, -s) 8192
    cpu time (seconds, -t) unlimited
    max user processes (-u) 4127416
    virtual memory (kbytes, -v) unlimited
    file locks (-x) unlimited

    ulimit -Ha
    real-time non-blocking time (microseconds, -R) unlimited
    core file size (blocks, -c) unlimited
    data seg size (kbytes, -d) unlimited
    scheduling priority (-e) 0
    file size (blocks, -f) unlimited
    pending signals (-i) 4127416
    max locked memory (kbytes, -l) 132089736
    max memory size (kbytes, -m) unlimited
    open files (-n) 65635
    pipe size (512 bytes, -p) 8
    POSIX message queues (bytes, -q) 819200
    real-time priority (-r) 0
    stack size (kbytes, -s) unlimited
    cpu time (seconds, -t) unlimited
    max user processes (-u) 4127416
    virtual memory (kbytes, -v) unlimited
    file locks (-x) unlimited

    background_pool_size пока тоже не помог. Рестарты Кликхауса были.
  • https://t.me/clickhouse_ru
    А когда вы поменяли настройку

    Code: 439. DB::Exception: Cannot schedule a task: no free thread (timeout=0) (threads=10000, jobs=10000): While executing ParallelParsingBlockInputFormat. (CANNOT_SCHEDULE_TASK)

    Числа в ошибке тоже изменились?
  • https://t.me/clickhouse_ru
    open files (-n) 65635

    Вообще лимит в 65к файлов выглядит подозрительным.
  • https://t.me/clickhouse_ru
    @Har01d ↶ Reply to #252525 #252526 02:44 PM, 08 Jan 2022
    Это из того, что я уже пробовал менять, он по умолчанию вообще 1024 как и сто лет назад
  • https://t.me/clickhouse_ru
    А можете для процесса клика это сделать?

    cat /proc/$PID/limits
  • https://t.me/clickhouse_ru
    @unamedrus #252528 02:46 PM, 08 Jan 2022
    И вопрос, вы же раскомментили настройку?
    max_thread_pool_size
  • https://t.me/clickhouse_ru
    @unamedrus #252529 02:47 PM, 08 Jan 2022
    ClickHouse/Server.cpp at 272ea7fc5be9fea73d24a9d2d12f0418045d064f · 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
    @Har01d ↶ Reply to #252524 #252530 02:48 PM, 08 Jan 2022
    Вообще не очень понятно, судя по всему нет. Со вставкой такие ошибки встречаются не очень часто, я пока назад вернул 10000, но весь лог и пока было 25000 вроде бы тоже показывал 10000. Ещё есть вариант со вставкой такой: Cannot schedule a task: cannot allocate thread (threads=0, jobs=0)

    Для селектов числа совершенно разные
    (threads=44, jobs=44)
    (threads=32, jobs=32)
    и т.д., в пределах 200
  • https://t.me/clickhouse_ru
    @Har01d ↶ Reply to #252528 #252531 02:49 PM, 08 Jan 2022
    Она в конфиге дефолтном раскомменченная и установленная в 10000, поменял на 25000, рестартанул clickhouse-server
  • https://t.me/clickhouse_ru
    А, ок

    Ну я бы попробовал еще такую установить

    https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings/#thread-pool-queue-size
    Server Settings | ClickHouse Documentation

    Server Settings builtin_dictionaries_reload_interval The interval in seconds before reloading built-in dictionaries. Cli

  • https://t.me/clickhouse_ru
    @Har01d ↶ Reply to #252527 #252533 02:50 PM, 08 Jan 2022
    cat /proc/1171195/limits
    Limit Soft Limit Hard Limit Units
    Max cpu time unlimited unlimited seconds
    Max file size unlimited unlimited bytes
    Max data size unlimited unlimited bytes
    Max stack size 8388608 unlimited bytes
    Max core file size 1073741824 unlimited bytes
    Max resident set unlimited unlimited bytes
    Max processes 4127416 4127416 processes
    Max open files 500000 500000 files
    Max locked memory 65536 65536 bytes
    Max address space unlimited unlimited bytes
    Max file locks unlimited unlimited locks
    Max pending signals 4127416 4127416 signals
    Max msgqueue size 819200 819200 bytes
    Max nice priority 0 0
    Max realtime priority 0 0
    Max realtime timeout unlimited unlimited us
  • https://t.me/clickhouse_ru
    @Har01d ↶ Reply to #252532 #252534 02:52 PM, 08 Jan 2022
    Спасибо, будем пробовать!
  • Может сразу для среднего геометрического массива кто-то знает способ?)
  • https://t.me/clickhouse_ru
    arrayProduct(groupArray(())

    Или через логарифмы и сумму.
  • https://t.me/clickhouse_ru
    @106936600 #252537 02:57 PM, 08 Jan 2022
    Можете подсказать, есть данные по типу
    1 2 3 4 5 6
    Таблица имеет 3 колонки id, sid, data
    Как внести через INSERT INTO FROM INFILE данные из файла, что бы было так
    id = 1
    sid = 2
    data = 3 4 5 6
  • Большое спасибо!
  • https://t.me/clickhouse_ru
    FORMAT LineAsString

    А потом либо регулярками либо чем еще разбить данную строку

    https://clickhouse.com/docs/en/sql-reference/functions/string-search-functions/
    For Searching in Strings | ClickHouse Documentation

    Functions for Searching in Strings The search is case-sensitive by default in all these functions. There are separate va

  • https://t.me/clickhouse_ru
    А можете привести пример синтаксиса?
  • https://t.me/clickhouse_ru
    @106936600 #252541 03:02 PM, 08 Jan 2022
    Или вы имеете ввиду это сделать через Memory таблицу?
  • https://t.me/clickhouse_ru
    Синтаксиса чего?
    Запроса? ну будет похож на что то подобное

    https://clickhouse.com/docs/en/sql-reference/table-functions/input/
    input | ClickHouse Documentation

    input input(structure) - table function that allows effectively convert and insert data sent to the server with given st

  • https://t.me/clickhouse_ru
    @unamedrus #252543 03:03 PM, 08 Jan 2022
    Только в вашем случае будет одна колонка
  • https://t.me/clickhouse_ru
    @106936600 #252544 03:04 PM, 08 Jan 2022
    Понял тогда
  • https://t.me/clickhouse_ru
    @106936600 #252545 03:04 PM, 08 Jan 2022
    Спасибо
  • https://t.me/clickhouse_ru
    @horseheaxx #252546 03:25 PM, 08 Jan 2022
    тухлячок чот тут(
  • зппп?
  • https://t.me/clickhouse_ru
    Нашёл решение получше
    INSERT INTO temp FROM INFILE '*.txt.gz' FORMAT Regexp SETTINGS format_regexp='^([^\t]+)\t([^\t]+)\t(.*)$', format_regexp_escaping_rule='Raw', format_regexp_skip_unmatched=1;
  • https://t.me/clickhouse_ru
    Тоже норм, но кмк сложнее чутка с нужно один хороший регексп писать
  • @msmk_cn #252552 04:13 PM, 08 Jan 2022
    Привет всем. Есть такой запрос: SELECT match_id, user_id FROM match_users JOIN matches USING match_id WHERE match_id = 321. Можно ли заставить кликхаус не выгружать всю таблицу в память, а отдельными запросами получить только нужную запись из matches?

    P. S. Предполагается, что в match_users при выборке с match_id количество записей будет не больше 5
  • https://t.me/clickhouse_ru
    А пробывал джойнить запрос ?
  • а-ля SELECT match_id, user_id FROM match_users JOIN (SELECT * FROM matches WHERE matches.match_id = match_users.match_id) WHERE match_id = 321?
  • https://t.me/clickhouse_ru
    Ну если тебе нужен 321, то ты можешь matches.match_id =321
  • В данном случае мне действительно нужен только 321. Но есть ситуации, когда нужен подобный запрос:

    SELECT match_id, user_id FROM match_users JOIN matches USING match_id WHERE user_id = 1 и тогда уже начинаются проблемы
  • Проблемы такого рода, что при выборке по match_users.user_id в основном не более 1000 записей и быстрее их кодом в цикле обойти и получить отдельно каждый matches.match_id, чем дожидаться пока кликхаус join выполнит
  • https://t.me/clickhouse_ru
    Я бы сказал, что тогда у вас схема хранения не правильная. https://www.youtube.com/watch?v=y8HsXqQEyfE , не помню на какой минуте, но требуется денормализация данных если вы храните их как таблицы. Если таблица не большая, то можно попробывать словарь для неё сделать.
  • Спасибо, ознакомлюсь. Проблема как раз в том, что таблица уже достаточно большая (около 400 гигабайт) и выгружать её в оперативку для такого запрос дорого и долго
  • https://t.me/clickhouse_ru
    Ну так она же не полностью выгружается, а только требуемые столбцы.
  • https://t.me/clickhouse_ru
    @konnectrl #252561 04:26 PM, 08 Jan 2022
    Вероятно всего у вас не все столбцы весят одинаково и не все требуются
  • Шутка в том, что выгружается почти полностью. Когда планировал архитектуру я ожидал, что JOIN'ы будут работать примерно таким образом:
    SELECT * FROM matches WHERE match_id IN (SELECT match_id FROM match_users WHERE user_id = 1)
    но получилось необычно)) так что буду копать, спасибо
  • https://t.me/clickhouse_ru
    А в чём проблема сделать из этого запроса JOIN ? Тестили IN vs JOIN на больших запросах, получили что IN вообще не выполняется :)
  • Да вот в том и проблема, что IN выполняется за 1 секунду, а JOIN на более мощном сервере с необходимым объёмом оперативки для выгрузки таблицы выполняется 250 секунд
  • @msmk_cn #252565 04:32 PM, 08 Jan 2022
    либо же я неправильно представляю как в рамках кликхауса сделать из этого запроса JOIN
  • https://t.me/clickhouse_ru
    @konnectrl #252567 04:35 PM, 08 Jan 2022
    SELECT * FROM mathces as ma
    JOIN ( SELECT math_id FROM match_users WHERE user_id =1 ) as mau ON ma.match_id = mau.match_id)
    Если примерно такой, то он сделает фулл скан таблицы левой, возможно если добавить снизу ещё например период и партиционирование по этому времени, то должно быть быстро
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252486 #252568 04:37 PM, 08 Jan 2022
    Ничего сложного это написать на SQL. Тут - http://www2.cs.uh.edu/~ordonez/pdfwww/w-2004-KDD-sqlkm.pdf - делают на террадате, а в КХ это все сильно проще можно сделать с использованием массивов и/или туплов. Вот примерно так:
    -- data
    drop table YH; create table YH (Y Tuple(UInt32,UInt32)) engine = Memory;
    insert into YH select (number as x, rand32() % 100 as y) from numbers(100);
    -- Centroids
    drop table WCR; create table WCR ( ts DateTime, j UInt32, C Tuple(UInt32,UInt32), P Array(Tuple(UInt32,UInt32)) ) engine = Memory;
    insert into WCR select now(), rowNumberInAllBlocks()+1, Y , [] from YH limit 10,5;
    -- k-means
    insert into WCR
    select now(), j,(avg(Y.1),avg(Y.2)) as C, groupArray(Y)
    from (select Y.1+1 as i, argMin(j,L2Distance(Y,C)) as j, Y
    from YH, (select * from WCR order by ts desc limit 1 by j) as WCR
    group by i, Y order by j)
    group by j order by j;
    Сошлось за 13 инсертов. Что там получилось - не проверял.
    (Из недостатоков - зря оно квадратный корень считает в L2Distance, но так было красивее по коду. groupArray(Y) в проде конечно не должен остаться, да и всякие weight посчитать тоже надо).
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252562 #252569 04:40 PM, 08 Jan 2022
    вот так и надо делать - без джойнов, но на подзапросах. Почему медленно - смотрите order by таблиц. Для match_users первым должен быть user_id
  • https://t.me/clickhouse_ru
    @Har01d ↶ Reply to #252532 #252570 05:16 PM, 08 Jan 2022
    Тоже не помогает…

    <max_thread_pool_size>20000</max_thread_pool_size>
    <thread_pool_queue_size>20000</thread_pool_queue_size>

    Отдельно странно, что

    SELECT *
    FROM system.settings
    WHERE name LIKE '%thread%'

    эти настройки не показывает
  • https://t.me/clickhouse_ru
    @xivan128 #252572 05:27 PM, 08 Jan 2022
    Добрый день! Подскажите как в КХ, при выводе допустим топ-5 по какому-то параметру. Пишу order desc, limit 5.
    Хочу, чтобы если этот параметр у 5 совпадал чем-то последующими, то выводилось бы не только топ-5 , но и то, что с 5 совпадает
  • https://t.me/clickhouse_ru
    Ничего не понятно, что вы хотите
  • With ties
  • https://t.me/clickhouse_ru
    LIMIT | ClickHouse Documentation

    LIMIT Clause LIMIT m allows to select the first m rows from the result. LIMIT n, m allows to select the m rows from the

  • https://t.me/clickhouse_ru
    Благодарю
  • https://t.me/clickhouse_ru
    @xivan128 #252577 05:31 PM, 08 Jan 2022
    Это только в CH или во всем SQL
  • Не во всём SQL, хотя есть ещё в Oracle, например, с другим синтаксисом
  • https://t.me/clickhouse_ru
    ничосе ничего сложного. Ты кликхаус нинздя, я так не могу
  • https://t.me/clickhouse_ru
    @margooso #252580 09:46 PM, 08 Jan 2022
    Joined.
  • https://t.me/clickhouse_ru
    @belyashik95 #252581 10:26 PM, 08 Jan 2022
    Joined.
  • 10 January 2022 (178 messages)
  • @mazzy_kgd #252585 07:56 AM, 10 Jan 2022
    народ, в клике есть база с внешним коннектом , но внешняя база легла и следовательно не стартует клик. есть возможность удалить базу с внешним коннектом у лежащего клика пока внешнюю базу чиним ? колдунство сильное но вдруг ))
  • https://t.me/clickhouse_ru
    Не очень сильное колдунство

    mv /var/lib/clickhouse/metadata/remote_database.sql /tmp/
    systemctl start clickhouse-server
    # чиним remote базу
    clickhouse-client < /tmp/remote_database.sql
  • знающему человеку и колдунство не колдунство )) благодарю, выручил. помогло
  • @pavel_maksimow #252588 08:14 AM, 10 Jan 2022
    Здравствуйте. Подскажите, как исправить проблему с сертификатом. КХ в докер контейнере, ошибка вызывается при запросе к удаленному серверу КХ, через remoteSecure

    Code: 210, e.displayText() = DB::NetException: SSL Exception: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
  • https://t.me/clickhouse_ru
    @sibbarb #252589 08:15 AM, 10 Jan 2022
    Всем привет, читаю про MV
    В доке написано:
    Материализованное представление устроено следующим образом: при вставке данных в таблицу, указанную в SELECT-е, кусок вставляемых данных преобразуется этим запросом SELECT, и полученный результат вставляется в представление.
    Правильно ли я понимаю что MV будет само обновляться ? и не нужно его закидывать в cron
  • https://t.me/clickhouse_ru
    @Vinnyard #252590 08:16 AM, 10 Jan 2022
    Да, но не забывайте об апдейтах и делитах
  • https://t.me/clickhouse_ru
    Само
  • https://t.me/clickhouse_ru
    @sibbarb #252592 08:18 AM, 10 Jan 2022
    Вот так чудеса) если указать движок AggregatingMergeTree , оно тоже будет само????)
  • https://t.me/clickhouse_ru
    Server Settings | ClickHouse Documentation

    Server Settings builtin_dictionaries_reload_interval The interval in seconds before reloading built-in dictionaries. Cli

  • https://t.me/clickhouse_ru
    "само" ничего не происходит
    все "через код"

    первый раз аггрегация будет на уровне вставки

    второй раз на уровне background merge

    третий уровень до-аггрегации еще и через SELECT ... FROM mv FINAL (может быть довольно медленно, народ выкручивается по всякому)
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #252343 #252595 08:23 AM, 10 Jan 2022
    Если это не ложное посленовогоднее воспоминание, то Алексей на YaTalks (ссылка на видео припинена) говорил, что keeper объявлен production ready.
  • https://t.me/clickhouse_ru
    @ilejn #252597 08:27 AM, 10 Jan 2022
    С точки зрения человека из PostgreSQL на что как бы намекает nickname, в ClickHouse с materialized view все происходит само, в PostgreSQL (и в Greenplum) они статичны, нужно делать refresh.
  • https://t.me/clickhouse_ru
    @vanyasvl #252599 08:57 AM, 10 Jan 2022
    Подскажите пожалуйста по кафке. Ходил кликхаус в одну кафку и вроде было все хорошо, добавили вторую табличку с кафкой+второй mat view который пишет в ту же таблицу, что и первая кафка с mat view. И начались проблемы, решистрируем постоянно скачащий lag на кафке до 5минут. При этом вторая кафка вообще пуская, туда попадают данные, только если первая падает. Но это сказалось на производительности кликхауса
  • https://t.me/clickhouse_ru
    @vanyasvl #252600 08:58 AM, 10 Jan 2022
    SETTINGS kafka_broker_list = ‘x.x.x.x’, kafka_topic_list = ‘xxxx’, kafka_group_name = 'clickhouse', kafka_format = 'Protobuf', kafka_max_block_size = 1048576, kafka_num_consumers = 16, kafka_skip_broken_messages = 1000, kafka_thread_per_consumer = 1, kafka_schema = ‘xxx’
  • https://t.me/clickhouse_ru
    @vanyasvl #252601 09:08 AM, 10 Jan 2022
    загрузка cpu при этом около нулевая
  • https://t.me/clickhouse_ru
    А нагрузку на сеть смотрели ?
  • https://t.me/clickhouse_ru
    да, тоже все хорошо, далеко от предела
  • https://t.me/clickhouse_ru
    @vanyasvl #252605 09:11 AM, 10 Jan 2022
    а по lag такая картина
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @vanyasvl #252607 09:12 AM, 10 Jan 2022
    данные в кафку попадают абсолютно равномерно
  • https://t.me/clickhouse_ru
    @kirilldikalin #252608 09:25 AM, 10 Jan 2022
    Всем привет!
    Есть такая дата 0001-01-01T00:00:00+00:00
    Когда делаю инсерт в таблицу кликхауса выдаёт ошибку
    clickhouse:DB::Exception: Cannot parse string '1-01-01 00:00:00.000000'

    Такую дату например ест нормально 2021-09-24T23:59:09+03:00 так что ошибка не в форме
    Подскажите пожалуйста, что можно сделать
  • https://t.me/clickhouse_ru
    Поддерживаются значения от 1 января 1925 г. и до 11 ноября 2283 г.
    https://clickhouse.com/docs/ru/sql-reference/data-types/datetime64/
    DateTime64 | Документация ClickHouse

    DateTime64 Позволяет хранить момент времени, который может быть представлен как календарная дата и время, с заданной суб

  • https://t.me/clickhouse_ru
    а вам зачем такую дату хранить?
    в то время технически еще не было григорианского календаря :)
  • https://t.me/clickhouse_ru
    @solard #252611 09:28 AM, 10 Jan 2022
    Не хочет человек null хранить)
  • https://t.me/clickhouse_ru
    Ну тогда это должна быть дата "все нули"
  • https://t.me/clickhouse_ru
    @kirilldikalin #252613 09:29 AM, 10 Jan 2022
    Прилетело во время парсинга json-а )
  • https://t.me/clickhouse_ru
    хм, логично, я что-то не сообразил
  • https://t.me/clickhouse_ru
    Но наверное Вы правы, идея у товарища была именно эта, судя по всему
  • https://t.me/clickhouse_ru
    @kirilldikalin #252616 09:30 AM, 10 Jan 2022
    Как вариант делать из них стринги? Видимо в DT не получится запихнуть
  • https://t.me/clickhouse_ru
    посмотрите с другой стороны
    что вы хотите получить в итоге?

    если хотите хранить как в источнике - можно хранить String, но тогда на фильтрах будете ломаться или приводить к дате с -orNull
    если хотите нормальную дату - можно предполагать, что все "кривые" даты - null или там 1970-01-01..., но тогда потеряете исходную строку
    можно совместить - хранить и строку и попытку распарсить в дату, но тогда места будет больше занимать...
  • https://t.me/clickhouse_ru
    @kirilldikalin #252618 09:40 AM, 10 Jan 2022
    Хочется сохранить формат dt потому-что надо для аналитики и исключать ошибки даты 9999 года ну или 0001 если вдруг будут прилетать
  • https://t.me/clickhouse_ru
    Вот этот 1970 раздражает. Если на null поменять случай инсерте пустой даты то не замедлится? Я вроде читал что лучше налы избегать
  • https://t.me/clickhouse_ru
    в целом стоит избегать, т.к. это буквально еще один файл с битовой маской (+ раньше нельзя было добавлять nullable столбцы в order by/partition by, а сейчас это мб все еще не prod-ready, видел такое замечание в github)
    но если не критично, можно и null использовать, как я и писал
  • https://t.me/clickhouse_ru
    Критично, как раз ключевая огромная таблица логов. Спс
  • @shadeofwee #252622 09:55 AM, 10 Jan 2022
    Всем привет! Хотел узнать у вас, можно ли как-то заджойниться с generateRandom? Или как-то иначе сделать мой случай: есть таблица, в которой есть поле id, которое должно быть сидом тут:
    SELECT (d % 100) / 100 FROM generateRandom('d UInt8', 1332, 100, 2) gr LIMIT 1;
    Вместо 1332 должен быть id. И на выходе должны быть поля id и высчитанное из данных generateRandom рандомное значение d с сидом id.
  • https://t.me/clickhouse_ru
    @lex_zen #252625 10:25 AM, 10 Jan 2022
    Коллеги, хочу сделать процесс, в котором кликхаус будет забирать данные из кафки, потом матвьюха перекладывает эти данные в обычную таблицу. Процесс выглядит так:
    *** - Kafka - CH kafka table - CH matview - CH table
    Все по доке https://clickhouse.com/docs/ru/engines/table-engines/integrations/kafka/

    Сделал данный процесс на старой версии КХ (не помню какая версия), все работало. Была необходимость обновиться до 21.12.3.32 версии (актуальная на текущий момент), процесс падает с ошибкой Code: 620. DB::Exception: Direct select is not allowed. To enable use setting stream_like_engine_allow_direct_select. (QUERY_NOT_ALLOWED)
    Пробовал исправить поставив stream_like_engine_allow_direct_select=true, также пробовал ставить kafka_commit_on_select = 1, ошибка не пропала.
    https://github.com/ClickHouse/ClickHouse/blob/master/CHANGELOG.md

    Кто-нибудь сталкивался с чем-то похожим, подскажите как исправить.
    Kafka | Документация ClickHouse

    Kafka Движок работает с Apache Kafka. Kafka позволяет: Публиковать/подписываться на потоки данных. Организовать отказоус

  • https://t.me/clickhouse_ru
    > Сделал данный процесс на старой версии КХ (не помню какая версия), все работало. Была необходимость обновиться до 21.12.3.32 версии (актуальная на текущий момент), процесс падает с ошибкой Code: 620. DB::Exception: Direct select is not allowed. To enable use setting stream_like_engine_allow_direct_select. (QUERY_NOT_ALLOWED)

    Что то странное

    direct_select это ошибка если бы вы делали через консоль

    SELECT * FROM kafka table LIMIT 1;
  • https://t.me/clickhouse_ru
    @lex_zen #252627 10:38 AM, 10 Jan 2022
    @unamedrus Да, предыдущая версия КХ позволяла сделать запрос к кафка таблице. В этом же нет ничего криминального, из кафки данные забираются в КХ кафка таблицу, мы делаем к этим данным 1 запрос, после с данными не можем работать, они пропадают.
    Матвьюха по сути делает то же самое
    CREATE MATERIALIZED VIEW matview TO table
    AS
    SELECT * FROM kafka_table;
  • https://t.me/clickhouse_ru
    В этом же нет ничего криминального, из кафки данные забираются в КХ кафка таблицу, мы делаем к этим данным 1 запрос, после с данными не можем работать, они пропадают.

    Криминал был в том, что люди не ожидали что в таком случае MV не увидит эти данные.
    Так что отключили из этих соображений.
  • https://t.me/clickhouse_ru
    @karpuhin_dmitry #252630 10:44 AM, 10 Jan 2022
    Коллеги, вопрос: попробовали с коллегой нативную репликацию с mysql и altinity mysql reader. Первый работает, но не удалось заставить писать его в Engine=MergeTree. Altinity пишет , но отъедает 90% процессора. Это нормальная нагрузка для Altinity? почему так, интересно…
  • https://t.me/clickhouse_ru
    > Первый работает, но не удалось заставить писать его в Engine=MergeTree.

    А в чем проблема/идея?

    По дефолту там используются VersionedCollapsingMergeTree
  • https://t.me/clickhouse_ru
    Так, стало хорошо, после того как kafka_num_consumers опустил с 16 до 8. Почему это могло помочь? Партишенов в топике 16, ядер на сервере с КХ больше 16
  • https://t.me/clickhouse_ru
    @vanyasvl #252633 10:49 AM, 10 Jan 2022
    Какой-то глобальный лимит на число потоков?
  • https://t.me/clickhouse_ru
    @No1zzz #252634 10:49 AM, 10 Jan 2022
    Может диски не вывозили?
  • https://t.me/clickhouse_ru
    Потому, что каждому консьюмеру нужна своя партиция в кафке, если этого нет, то начинается борьба за партиции, кто то при этом страдает.

    А вообще у вас какой поток сообщений в кафке, 8 консьюмеров это многовато
  • https://t.me/clickhouse_ru
    У меня как раз 16 партиций. Поток около 20-30к в секудну
  • https://t.me/clickhouse_ru
    И вам не хватает 1 консьюмера?
  • https://t.me/clickhouse_ru
    > Ходил кликхаус в одну кафку и вроде было все хорошо, добавили вторую табличку с кафкой+второй mat view который пишет в ту же таблицу, что и первая кафка с mat view.

    Как я понимаю, вы создали 2 таблицы с kafka_num_consumers = 16 и одинаковым kafka_group_name = 'clickhouse'

    Следовательно вам нужны 32 партиции в топике
  • https://t.me/clickhouse_ru
    Ну в тестах, пытаясь выжать макс производительность всей связки не хватало, где-то в 80-100к упиралост кажется, не помню уже, поэтому сразу слеолао по числу партиций. Не стоит так делать?
  • https://t.me/clickhouse_ru
    Они смотрят в две разных кафки
  • https://t.me/clickhouse_ru
    Версия кх?
  • https://t.me/clickhouse_ru
    Да не знаю даже. Почитали документацию. Настроили репликацию следующим образом: CREATE TABLE System.queue_log(
    time DateTime,
    callid String,
    queuename String,
    agent String,
    event String,
    data String,
    data1 String,
    data2 String,
    data3 String,
    data4 String,
    data5 String) Engine=MySQL('mysql_ip:3306', 'System_one', 'queue_log', 'system', 'db_pass');
    попытки сменить Engine не увенчались успехом. Начали пробовать коннектор от Altinity.
  • https://t.me/clickhouse_ru
    21.11.5.33 и 21.7.6.39, поведение одинаковое
  • https://t.me/clickhouse_ru
    Так подождите, Engine=MySQL не занимается репликацией, это что то вроде VIEW которая смотрит в другую таблицу
  • https://t.me/clickhouse_ru
    Ммм. Это объясняет низкую скорость. Поделитесь плз примером настройки инативной репликации.
  • https://t.me/clickhouse_ru
    https://github.com/ClickHouse/ClickHouse/pull/11388#issuecomment-638893203

    https://kb.altinity.com/altinity-kb-integrations/altinity-kb-kafka/altinity-kb-kafka-main-parsing-loop/

    background_message_broker_schedule_pool

    SELECT *
    FROM system.metrics
    WHERE metric ILIKE '%pool%'
    Better settings for Kafka by filimonov · Pull Request #11388 · ClickHouse/ClickHouse

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

  • https://t.me/clickhouse_ru
    Попробуйте посмотреть в сторону https://clickhouse.com/docs/en/engines/database-engines/materialized-mysql/

    Но там есть свои подводные камни
    MaterializedMySQL | ClickHouse Documentation

    [experimental] MaterializedMySQL Warning This is an experimental feature that should not be used in production. Creates

  • @oix555 ↶ Reply to #252227 #252648 10:57 AM, 10 Jan 2022
    @tron_wai ,посмотрели логи AD ,ничего не нашли,кроме success log on,каких-то фильтров тоже не нашли,все-таки как понять,какой user_dn передаётся
  • @beleychev #252649 10:58 AM, 10 Jan 2022
    Привет, эксперты. Подскажите, пожалуйста, как легчайшим образом превратить [1,2,3] и [1,2,3] в tuple(1,1), tuple(2,2), tuple(3,3)
  • https://t.me/clickhouse_ru
    arrayZip
  • спасибо!
  • а как жили без него? Мне, видимо, надо костыль придумывать, версия 19.14
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252579 #252653 11:18 AM, 10 Jan 2022
    переделал с туплов на массивы и выложил - https://github.com/bvt123/clickhouse-k-means
    Надо сделать view к своим данным и запустить bash скрипт.
    В понятных случаях алгоритм дает ожидаемый результат. Однако ломается если кластеры очень хорошо отделены друг от друга. Но это сам k-means такой - человеку (в 2D) все понятно, а алгоритм лажает. Зато быстный.
  • https://t.me/clickhouse_ru
    Боря, спасибо большое. Попробую
  • https://t.me/clickhouse_ru
    может тебе имеет смысл как-то в этом PR поучаствовать https://github.com/ClickHouse/ClickHouse/pull/6185/files
    Incremental clustering by Quid37 · Pull Request #6185 · ClickHouse/ClickHouse

    I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en For changelog. Remove if this is non-significant change. Category (leave one): New Feature Short descript...

  • https://t.me/clickhouse_ru
    круто =) молодец
  • https://t.me/clickhouse_ru
    BackgroundDistributedSchedulePoolTask │ 16
    А где этот background_message_broker_schedule_pool меняется? В system.settings его не вижу, но это больше для информации, я понял что дофига консьюмеров делать незачем
  • https://t.me/clickhouse_ru
    Ну в логе должны быть отражены все запросы, по ним можно понять, что спросил кликхаус, что ответил AD.
    Давайте попробуем произвести тот же запрос, что делает кликхаус, вручную, через ldapsearch, с той же машины, и посмотрим на результат.
  • https://t.me/clickhouse_ru
    arrayMap((x,y) -> (x,y), arr_1, arr_2)
  • https://t.me/clickhouse_ru
    в профиле default пользователя

    background_message_broker_schedule_pool

    И нужен рестарт сервера. (но трогать не стоит)
  • https://t.me/clickhouse_ru
    Вообще таплы мне нравятся больше, тк таплы быстрее чем массивы работают
  • https://t.me/clickhouse_ru
    Спасибо большое, стало понятнее. И я правильно жн понимаю, что кроме kafka_max_block_size больге ничего трогать не стоит для оптимизации кафки?
  • https://t.me/clickhouse_ru
    @rvkggwp #252663 12:18 PM, 10 Jan 2022
    Добрый день, подскажите, как понять в какой момент времени происходит слияние кусков данных в таблице? Например кейс с VersionedCollapsingMergeTree, когда идет отмена данного, но отмена не происходит, потому что строчки лежат в разных кусках данных. Как хотя бы примерно понять, когда будет слияние кусков данных и оно удалится. Т.е это час или два или сутки. Может есть настройка раз в сколько производить слияние (не нашел, но пока что сильно не копал).
  • https://t.me/clickhouse_ru
    Там уже лям по дефолту должен быть в новых версиях.

    В целом крутить kafka_num_consumers можно, не не ставить сразу в 16, а 2-4
  • @85954625 #252665 12:21 PM, 10 Jan 2022
    Привет. Бинарник не доступен https://builds.clickhouse.com/master/aarch64/clickhouse. Подскажите плиз, может есть какие альтернативные источники?
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    А вы для какой платформы хотите7 (apple silicon?)
  • @85954625 #252668 12:25 PM, 10 Jan 2022
    да, apple silicon
  • https://t.me/clickhouse_ru
    Тогда можете посмотреть на наше homebrew

    https://github.com/Altinity/homebrew-clickhouse

    Там должны быть готовые бинари для последней версии mac os
    GitHub - Altinity/homebrew-clickhouse: ClickHouse Homebrew tap (by Altinity)

    ClickHouse Homebrew tap (by Altinity). Contribute to Altinity/homebrew-clickhouse development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    @konnectrl #252670 12:28 PM, 10 Jan 2022
    Приветствую. Я тестирую сейчас шардирование. Вопрос такой,как реализовать MV на два шарда ? Я правильно понимаю, что я вешаю на таблицу с данными MV, а на таблицу с данными из MV смотрю с помощью distributed таблицы ?
  • https://t.me/clickhouse_ru
    В целом да

    Можете еще посмотреть презентацию по MV
    https://kb.altinity.com/altinity-kb-schema-design/materialized-views/#presentation
  • Спасибо большое
  • https://t.me/clickhouse_ru
    @unamedrus #252673 12:31 PM, 10 Jan 2022
    Только нужно создать MV на всех шардах-репликах
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252661 #252674 12:32 PM, 10 Jan 2022
    мне тоже, я с них и начал. Но не получилось вычислить avg(Tuple()) без ручного перечисления элементов. Если есть такая функция (или какое-то хорошее преобразование туда-обратно) - конечно стоит на таплах все сделать.
    Ещё был минус, что L2Distance считает с квадратным корнем, который в этой задаче не нужен (тут просто сравнивают на больше-меньше).
  • https://t.me/clickhouse_ru
    Спасибо! 👍
  • https://t.me/clickhouse_ru
    Хм, вам нужно найти среднее всех элементов тапла?(и их число может быть большим? те многомерное пространство?))
  • https://t.me/clickhouse_ru
    @bvt123 #252677 12:33 PM, 10 Jan 2022
    нужно найти среднее по каждому измерению. Да, там многомерное пространство - агрегируются несколько векторов в один.
  • https://t.me/clickhouse_ru
    @unamedrus #252678 12:41 PM, 10 Jan 2022
    Не совсем понял, по какому критерию сворачивать, но вот три варианта

    SELECT avgForEach([untuple((number, number))]) AS res
    FROM numbers(10)

    ┌─res───────┐
    │ [4.5,4.5] │
    └───────────┘

    SELECT avgArray([untuple((number, number))]) AS res
    FROM numbers(10)

    ┌─res─┐
    │ 4.5 │
    └─────┘

    SELECT arrayAvg([untuple((number, number))]) AS res
    FROM numbers(10)

    ┌─res─┐
    │ 0 │
    │ 1 │
    │ 2 │
    │ 3 │
    │ 4 │
    │ 5 │
    │ 6 │
    │ 7 │
    │ 8 │
    │ 9 │
    └─────┘
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252678 #252679 12:47 PM, 10 Jan 2022
    спасибо. нужен первый. До этого бешенного конвеера из untuple [] ForEach я не дошел, хотя был близок :) Логично вобщем-то.
  • https://t.me/clickhouse_ru
    Можно попробовать поизгалятся с APPLY, но оно неумеет прямо на untuple работать :(
    Зато должно работать быстрее из за того, что собираем массивы только в самом конце(дешево)

    SELECT * APPLY avg
    FROM
    (
    SELECT untuple((number, number)) AS tpl
    FROM numbers(10)
    )

    Query id: e88d7c59-2d51-420b-8195-088b4cb3b8f8

    ┌─avg(tpl.1)─┬─avg(tpl.2)─┐
    │ 4.5 │ 4.5 │
    └────────────┴────────────┘

    SELECT [* APPLY avg]
    FROM
    (
    SELECT untuple((number, number)) AS tpl
    FROM numbers(10)
    )

    Query id: 1ef2d226-1d7e-44d5-8ad1-bfed46ca1e98

    ┌─array(avg(tpl.1), avg(tpl.2))─┐
    │ [4.5,4.5] │
    └───────────────────────────────┘
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252680 #252682 01:23 PM, 10 Jan 2022
    а есть мысль как массив обратно в тапл превратить?
  • https://t.me/clickhouse_ru
    У меня такое получилось

    insert into WCR
    select now(), j, tuple(COLUMNS('tupleElement') APPLY avg) as C, groupArray(i)
    from ( with arrayMap(j->(j.1, L2Distance(j.2,Y)),WCR) as D
    select untuple(Y), i, arrayReduce('argMin',D.1,D.2) as j from YH
    global cross join (select groupArray((j,C)) as WCR from (select j,C from WCR order by ts desc limit 1 by j) ) as W
    )
    group by j order by j;
  • https://t.me/clickhouse_ru
    > from WCR order by ts desc

    Сортировка не очень нравится правда :)

    Можно сделать так

    WITH (SELECT max(ts) FROM WCR) as max_ts

    FROM WCR WHERE ts = max_ts
  • Дмитрий, может есть источники предыдущих версий? 21.12, 21.11 и т.д?
  • https://t.me/clickhouse_ru
    @unamedrus #252686 01:27 PM, 10 Jan 2022
    groupArray((j,C))

    Можно переписать arrayZip(groupArray(j), groupArray(C))
    https://github.com/ClickHouse/ClickHouse/issues/33156
    groupArray(column_1,column_2) -> Array(Tuple(column_1, column_2)) · Issue #33156 · ClickHouse/ClickHouse

    Use case SELECT groupArray((number, number - 1)) FROM numbers(10000000) GROUP BY number % 10000 FORMAT `Null` MemoryTracker: Peak memory usage (for query): 653.52 MiB. 0 rows in set. Elapsed: 1.726...

  • https://t.me/clickhouse_ru
    Идете по стрелочкам.

    Для других версий откройте бранчи с соответствующим названием.
  • https://t.me/clickhouse_ru
    @konnectrl #252688 01:29 PM, 10 Jan 2022
    Переливаю сейчас данные из одного КХ в другой КХ через remote с помощью clickhouse-client. По счётчикам где то проходит миллион строк и снова зависает ... Это может быть лаг отображения клиента ?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252684 #252689 01:29 PM, 10 Jan 2022
    там замысел в том, чтобы добыть последнюю пачку рассчетов - несколько строк. Но order by стоит по времени, так что будет быстро работать (хотя да, надо сеттинг добавить)
  • https://t.me/clickhouse_ru
    Так в моем случае будет тоже самое

    Мы возьмем максимальное время и для него достанем все строки
  • https://t.me/clickhouse_ru
    Кх записывает на диск блоками по 1 млн строк, вот и подвисает
    Можете поиграться настройками
    https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-data-migration/remote-table-function/#q-can-i-tune-insert-speed-to-make-it-faster
  • скорее всего ещё optimize_on_insert включён, он качает блок и сортирует перед вставкой
  • Благодарю 👍
  • https://t.me/clickhouse_ru
    @nomedeno #252694 01:35 PM, 10 Jan 2022
    Всем привет, подскажите как можно изящно решить данную проблему.
    Есть таблица с партициями ( по 1 дню ) около 500кк строк и +-50 столбцов, движок используется ReplicatedMergeTree , своего рода статистика .
    Раз в день необходимо изменять 40% записей ( изменение одного столбца, денежная сумма x_sum ) . Раз в отчетный месяц есть необходимость пересчитать партиции ( за прошлый месяц ).

    Пробовали банально в лоб использовать ALTER TABLE UPDATE ... WHERE ( без указания IN PARTITION ) но теряли производительность, вставка данных занимала больше времени и фоновые операции ( из-за мутации ) тормозило всё.
    Подумываем о двух вариантах как :
    1. делать FREEZE партиции ( за предыдущий день), запускать UPDATE для данной партиции, получить mutation_id и в SELECT * FROM system.mutations ждать пока мутация не будет в is_done = 1 ; и вернуть её обратно ( DETACHED оригинальную партиции и ATTACH обновленную )

    2. создавать новую партицию и перегонять из оригинальной партиции INSERT с CASE WHEN (обновленное значение поля x_sum предварительно посчитанного ) и подмена партиций на обновленную
  • https://t.me/clickhouse_ru
    Одну колонку должно быть несложно обновить

    А откуда берете результующие значения для этой колонки?
  • https://t.me/clickhouse_ru
    @Vitaly_Ivanov #252696 01:38 PM, 10 Jan 2022
    Коллеги, попробую задать глупый вопрос)
    Можно ли попросить кликхаус поставить на пуазу вставку данных вместо того чтобы вернуть ошибку “252 too many parts”
    max_delay_to_insert=4
    parts_to_delay_insert=300
    parts_to_throw_insert=600

    Еще вопрос все ли вставляющие запросы умеют падать с такой ошибкой?
  • https://t.me/clickhouse_ru
    @alex_spiridonov #252697 01:39 PM, 10 Jan 2022
    всем привет!
    есть таблица MT, в которой есть полей UUID session_guid
    поле не участвует в order by и PK
    order by (app_id, when) , где app_id нобольшое количество
    да в целом для основных сценариев использования и не надо

    но иногда надо найти все записи с session_guid по всем app_id за всё время (обычно они все в рамках пары часов +/- расположены, если это как-то поможет)

    сейчас есть данные за 2 недели: на 3B записей примерно 400M уникальных session_guid и поиск по session_guid захлёбывается (десятки секунд, а хочется быстрее)

    как помочь СН? индекс или отдельную таблицу/mv с order by session_guid или ..?
  • https://t.me/clickhouse_ru
    В новых версиях кх не будет кидать подобную ошибку на половине инсерта
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #252696 #252699 01:40 PM, 10 Jan 2022
    можно
  • https://t.me/clickhouse_ru
    Огонь! А как будет? Будет притормаживать?
  • https://t.me/clickhouse_ru
    > как помочь СН? индекс или отдельную таблицу/mv с order by session_guid или ..?

    Оба варианта возможны.

    Можно осторожно попробовать bloom_filter индекс на эту колонку
    Или попробовать пихнуть в PREWHERE session_guid = 'xxxxxx'
  • https://t.me/clickhouse_ru
    Ну притормозится как обычно из за parts_to_delay_insert, но выполнится
  • https://t.me/clickhouse_ru
    если кратко, то мы корректируем сумму по данным из внешнего источника, который в свою очередь делает эти корректировки без нашего участия и у нас появляется разбег в суммах
  • https://t.me/clickhouse_ru
    Ну хорошо, вам нужно обновить X строк

    Как вы мутацию делаете на десять тысяч+ разных строк с разным результатом?

    Не индивидуальными мутациями же?
  • https://t.me/clickhouse_ru
    Как?! Подскажите магию)
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #252696 #252706 01:43 PM, 10 Jan 2022
    Так вот же у вас параметры
  • https://t.me/clickhouse_ru
    @solard #252707 01:43 PM, 10 Jan 2022
    Накрутите посильнее
  • https://t.me/clickhouse_ru
    @solard #252708 01:44 PM, 10 Jan 2022
    <parts_to_delay_insert>150</parts_to_delay_insert>
    <max_delay_to_insert>5</max_delay_to_insert>
    <parts_to_throw_insert>900</parts_to_throw_insert>
  • https://t.me/clickhouse_ru
    @solard #252709 01:44 PM, 10 Jan 2022
    🙂
  • https://t.me/clickhouse_ru
    @unamedrus #252710 01:44 PM, 10 Jan 2022
    Да не стоит их крутить, вы что то явно не так делаете если они вылезают так
  • https://t.me/clickhouse_ru
    @unamedrus #252711 01:44 PM, 10 Jan 2022
    Вы просто упретесь в эти лимиты на 600 партов позже и ситуация будет тяжелее
  • https://t.me/clickhouse_ru
    @solard #252712 01:44 PM, 10 Jan 2022
    Но вообще я бы посмотрел на приложение - да. Зачем так часто вставки делать
  • https://t.me/clickhouse_ru
    @solard #252713 01:44 PM, 10 Jan 2022
    Непонятно
  • https://t.me/clickhouse_ru
    @Vitaly_Ivanov #252714 01:45 PM, 10 Jan 2022
    они вылезают только иногда, но по закону подлости в самый неподходящий момент
  • https://t.me/clickhouse_ru
    множество мутаций по условию WHERE x = 1 and y=2
    и так далее WHERE x = 3 and y=4
  • https://t.me/clickhouse_ru
    А, ну так не делайте так

    https://kb.altinity.com/altinity-kb-queries-and-syntax/update-via-dictionary/
  • https://t.me/clickhouse_ru
    @Vitaly_Ivanov #252717 01:49 PM, 10 Jan 2022
    Можете подсказать с какой версии кликхаус сможет сам притормаживать инсерты?
  • https://t.me/clickhouse_ru
    спасибо, попробую двигаться в этом направлении
  • https://t.me/clickhouse_ru
    Притормаживать умеет давно

    Просто в старых версиях, если на половине вставки случалось too many parts то кх кидал ошибку и прерывал вставку. в новых же он проверяет этот лимит только в самом начале, и это точно есть в 21.8
  • https://t.me/clickhouse_ru
    @Vitaly_Ivanov #252720 01:50 PM, 10 Jan 2022
    Супер!!! Спасибо!!!
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252683 #252721 02:09 PM, 10 Jan 2022
    спасибо, все получилось. проверил и закоммитил с вашими предложениями.
    Описал в комментах как работает этот сумашедший синтаксис tuple(COLUMNS('tupleElement') APPLY avg)
  • @oix555 ↶ Reply to #252658 #252722 02:11 PM, 10 Jan 2022
    так мы это сразу проверили,но это AD windows,там не работает ldapsearch,мы проверили через adsi,все работает,группы находятся
  • @oix555 #252723 02:12 PM, 10 Jan 2022
    просто,как только верный user_dn вставляется,так сразу ошибка
  • @oix555 #252724 02:14 PM, 10 Jan 2022
    вы можете сами проверить настроив AD windows,что при подстановке member=CN=Петров Сергей…,CH вернет ошибку,мы это проверили,собрав и настроив домен,только для этой задачи
  • @oix555 #252725 02:16 PM, 10 Jan 2022
    если бы в лог CH выводился user_dn ,мы бы локализовали проблему до поиска группы
  • https://t.me/clickhouse_ru
    Можно с любого линукса в сети
  • https://t.me/clickhouse_ru
    Это довольно долго для меня. Давайте перенесем обсуждение в GitHub issues, и там опишем steps to reproduce.

    Я же все это проверял в свое время.
  • @oix555 ↶ Reply to #252727 #252728 02:22 PM, 10 Jan 2022
    ок,давайте,заведу проблему
  • https://t.me/clickhouse_ru
    INSERT INTO WCR SELECT
    now(),
    j,
    tuple(COLUMNS('tupleElement') APPLY avg) AS C,
    groupArray(i)
    FROM
    (
    WITH
    arrayMap((j, C) -> (j, L2Distance(C, Y)), W.1, W.2) AS D,
    (
    SELECT
    groupArray(j),
    groupArray(C)
    FROM WCR
    WHERE ts = (
    SELECT max(ts)
    FROM WCR
    )
    ) AS W
    SELECT
    untuple(Y),
    i,
    arrayReduce('argMin', D.1, D.2) AS j
    FROM YH
    )
    GROUP BY j

    INSERT INTO WCR SELECT
    now(),
    j,
    tuple(COLUMNS('tupleElement') APPLY avg) AS C,
    groupArray(i)
    FROM
    (
    WITH
    arraySort((j, C) -> L2Distance(C, Y), W.1, W.2) AS D,
    (
    SELECT
    groupArray(j),
    groupArray(C)
    FROM WCR
    WHERE ts = (
    SELECT max(ts)
    FROM WCR
    )
    ) AS W
    SELECT
    untuple(Y),
    i,
    D[1] AS j
    FROM YH
    )
    GROUP BY j

    Можно дальше постараться уменьшить число применяемых функций.(Замена CROSS JOIN на WITH спорна, нужно смотреть что будет по производительности)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252729 #252730 02:44 PM, 10 Jan 2022
    Я тоже колебался между двумя этими вариантами, но остановился на global cross join потому как в шардированной конфигурации нужно отсылать текущий WCR (точнее его кусочек) на шарды, with так не умеет.
    И давно хотел спросить - в КХ есть оптимизации, чтобы CTE выражение не выполнялось для каждой строки заново? Скажем rand32() в строках и в with выполняется для каждой строки. А в случае cross join - только один раз.
  • https://t.me/clickhouse_ru
    WITH x as (SELECT * FROM numbers(10))

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

    WITH (SELECT groupArray(number) FROM numbers(10)) as x

    Выполнится только один раз (и должен будет отправить на все сервера тк эт скаляр)
  • https://t.me/clickhouse_ru
    @bvt123 #252732 02:48 PM, 10 Jan 2022
    with rand()%100 as x
    select number,x from numbers(10);
    number x
    0 99
    1 82
    2 76
    3 7
    4 30
    5 5
    6 68
    7 37
    8 6
    9 28
  • https://t.me/clickhouse_ru
    WITH (
    SELECT rand() % 100
    ) AS x
    SELECT
    number,
    x
    FROM numbers(10)

    Query id: 6ed06ca7-73aa-4179-96a9-5b3acbd85384

    ┌─number─┬──x─┐
    │ 0 │ 32 │
    │ 1 │ 32 │
    │ 2 │ 32 │
    │ 3 │ 32 │
    │ 4 │ 32 │
    │ 5 │ 32 │
    │ 6 │ 32 │
    │ 7 │ 32 │
    │ 8 │ 32 │
    │ 9 │ 32 │
    └────────┴────┘
  • https://t.me/clickhouse_ru
    Тоже забавное, надо будет кстати эту разницу записать (думаю так сделано только для rand() функции)
  • https://t.me/clickhouse_ru
    Дмитрий, скажите, Altinity clickhouse-mysql жрет 90% от двухъядерного проца виртуалки это нормально?
  • https://t.me/clickhouse_ru
    Честно, он вроде был сделан для определенного клиента (или даже просто как POC) давным-давно и после этого толком не развивали. (забавно наблюдать, что люди в issue сами решают свои вопросы и закрывают их)

    Так что хз.
    Если делать стриминг из mysql я бы смотрел либо в сторону MaterializedMySQL либо debezium + Kafka(RedPanda)
  • https://t.me/clickhouse_ru
    Ок понятно. Спасибо. Буду смотреть в эту сторону
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252729 #252738 03:18 PM, 10 Jan 2022
    > Можно дальше постараться уменьшить число применяемых функций
    после вашей правки особо и уменьшать-то некуда.
    Там может возникнуть более серьезная проблема, когда на большом объеме данных массив с ключами изначальной таблицы будет слишком большим. Скажем если делить ярд строк на 5 кластеров, то в одном массиве может оказаться 200M элементов. Это наверное нехорошо. Возможно стоит применить bitmap - будет компактнее.
  • Хмм, а что если надо с определенной позиции данные забирать?
  • @KekDl #252741 03:21 PM, 10 Jan 2022
    Привет, какие есть варианты прибить optimize table final,
    kill, как я уже понял, ему непочем, что будет в таком случае, если сделать restart server?
  • https://t.me/clickhouse_ru
    > Это наверное нехорошо.

    Да, это сильно грустно (особенно учитывая, что в случае с JOIN там этот массив будет размножаться на каждую строку)
    Я бы вообще смотрел в другую сторону -> вместо того что бы собрать все значения в 1 массив, побить все по сетке? и джойнить только те, которые находятся ближе чем некоторое заданное наперед X.
  • https://t.me/clickhouse_ru
    позиции где или чего? (как вы ее определяете?)
  • Mysql, в вашем демоне можно указывать с какой позиции начинать читать бинлог
  • https://t.me/clickhouse_ru
    https://debezium.io/documentation/reference/1.7/connectors/mysql.html

    В debezium можно достать позицию и отфильтровать по ней.
  • Интересно, спасибо, когда такую переливку данных делал, только ваш проект почему-то нашел)
  • https://t.me/clickhouse_ru
    размер блока на вставку миллион строк по умолчанию
    можно увеличить
    max_insert_block_size
  • https://t.me/clickhouse_ru
    Мы увеличили min(не помню точно названия) и поставили 5 потоков, стало только хуже
  • https://t.me/clickhouse_ru
    А так как мы переливаем данные через select insert , то она бесполезно, как мы поняли
  • @msmk_cn #252750 04:14 PM, 10 Jan 2022
    Привет всем. Есть две таблицы с разными структурами, хочу обе слить в одну. Можно ли это сделать в clickhouse?
  • Что значит слить в одну?
  • Есть отношение OneToMany по полю match_id, хотел как в реляционных базах использовать JOIN для запросов, но поскольку одна таблица 1.5 терабайта, а другая 70 гигабайт, у меня нет возможности выгружать ни одну из них в оперативку. В связи с этим, чтобы отказаться от JOIN'ов, хочу иметь все данные в одной таблице
  • скорее всего это нужно сделать до КХ
  • То есть выгрузить все данные и вставлять уже в нужную архитектуру?
  • вы хотите разово сделать одну большую таблицу и туда писать селекты или вы хотите писать в одну таблицу и потом из нее делать селекты?
  • Не совсем понял, а в чем принципиальная разница?
  • в том что если у вас статичные данные, то скорее всего можно несколькими запросами слить две таблицы в одну и из нее делать селекты.
    А если у вас динамические данные, то вам нужно перед вставкой в КХ соединить данные и вставлять в одну таблицу.
  • Данные статичные. Просто после сливания таблицы изменим запрос на вставку и будем объединять данные
  • тогда сделайте таблицу с нужной структурой, перелейте туда данные несколькими запросами из двух таблиц (чтобы правой таблице хватало памяти) и дальше меняйте запрос на вставку и пишите в новую таблицу
  • Понял, спасибо. Буду пробовать
  • https://t.me/clickhouse_ru
    @orx4n #252761 04:38 PM, 10 Jan 2022
    как понять эту ошибку ?
  • https://t.me/clickhouse_ru
    Матрица ,)))
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252762 #252763 04:56 PM, 10 Jan 2022
    Таким цветом не скучаешь перед логами ))))
  • https://t.me/clickhouse_ru
    @orx4n #252764 05:58 PM, 10 Jan 2022
    как настроить в операторе настройку send_crash_reports ?

    settings:
    send_crash_reports/enabled: true

    или

    settings:
    clickhouse/send_crash_reports/enabled: true
  • @alexeysetevoi #252765 06:01 PM, 10 Jan 2022
    Вечер добрый, господа.
    Кто-то проверял или помнит место в доке, где говорилось откуда конфиг загрузится первым и у кого приоритет?
    conf.d или config.d, при условии наличия обоих ?
  • @imozger #252766 06:12 PM, 10 Jan 2022
    Добрый вечер коллеги! А удавалось ли кому то поднять clickhouse на мак м1?
  • https://t.me/clickhouse_ru
    @tron_wai #252767 06:13 PM, 10 Jan 2022
    Ога
  • https://t.me/clickhouse_ru
    Были вопросы по этому поводу в чате поищите. Были слова brew, arm и т.д.
  • https://t.me/clickhouse_ru
    @tron_wai #252769 06:16 PM, 10 Jan 2022
    GitHub - Altinity/homebrew-clickhouse: ClickHouse Homebrew tap (by Altinity)

    ClickHouse Homebrew tap (by Altinity). Contribute to Altinity/homebrew-clickhouse development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #252761 #252770 06:42 PM, 10 Jan 2022
    ?
  • 11 January 2022 (115 messages)
  • https://t.me/clickhouse_ru
    @Viaprog #252776 02:13 AM, 11 Jan 2022
    что-то сломались ссылки на загрузку

    macOS — curl -O 'https://builds.clickhouse.com/master/macos/clickhouse' && chmod a+x ./clickhouse
    FreeBSD — curl -O 'https://builds.clickhouse.com/master/freebsd/clickhouse' && chmod a+x ./clickhouse
    AArch64 — curl -O 'https://builds.clickhouse.com/master/aarch64/clickhouse' && chmod a+x ./clickhouse
  • https://t.me/clickhouse_ru
    @kobzevvv #252778 03:12 AM, 11 Jan 2022
    задача вроде простая, но чето закопался, нужно сгенерировать последние 30 дней селектом (чтобы к ним джойнить ) другие штуки. у меня какая-то сложная хрень выходит. по идее можно как-то просто массивами или как-то еще. может кто-то сталкивался как в кликхаусе просто сделать?
  • @GrouthHacker #252779 04:16 AM, 11 Jan 2022
    Подскажите, использую настройки
    max_bytes_before_external_sort=7000000000, max_bytes_before_external_group_by=7000000000, max_memory_usage=0, distributed_aggregation_memory_efficient=1, aggregation_memory_efficient_merge_threads=1

    получаю ошибку:
    Code: 241, e.displayText() = DB::Exception: Memory limit (total) exceeded: would use 53.08 GiB (attempt to allocate chunk of 4197703 bytes), maximum: 53.08 GiB: While executing SourceFromNativeStream

    место на SSD ещё есть... что поправить?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252778 #252780 04:55 AM, 11 Jan 2022
    select toDate(now()) - interval number day from numbers(30);
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252779 #252781 05:05 AM, 11 Jan 2022
    я обычно ещё max_threads=1 ставлю. Ну или 2. Их там вроде 8 по умолчанию - получается 7*8=56Gb.
    а в чем смысл ставить max_memory_usage=0? рекомендуют в два раза больше чем max_bytes_before_external_group_by.
    и ещё миловидов как-то проговорился на презентации что можно писать так - max_bytes_before_external_group_by='40G'
  • https://t.me/clickhouse_ru
    Ну как проговорился, прям на слайде показал 😂
  • https://t.me/clickhouse_ru
    спасибо большое!
  • Как раз размышлял над этой проблемой
    Пришел к мысли, что возможно не S3 делать на "дешёвых серверах с HDD", а прокидывать блочное устройство по iSCSI в сервер, и по storage_policy туда переливать.
    В случае заполнения холодного - делаем новые сервера с iscsi, добавляем в виде диска в кликхаус. А на старом сервере, где был iSCSI-target поднимаем кликхаус, добавляем его в кластер и аттачим данные с локального диска, которые ранее по iscsi экспортили на другой хост. Получается полноценный clickhouse сервер с холодными данными с практически моментальной миграцией

    При этом основные сервера кликхауса , на которые идёт вставка и горячие запросы, останутся довольно мощными машинками, с SSD. А холодные данные через полгода-год уедут на дешёвые hdd/cpu
    Плюсы в сравнении с s3 - можно переподключить данные впоследствии как обычный диск. Ну и работать мне кажется должно побыстрее s3, как минимум будет работать дисковый кэш

    Задача - смигрировать старые данные на дешёвый сторадж
    Сейчас холодной хранилки нет вообще, в существующее железо добавить нельзя HDD (все слоты 2.5 и забиты SSD максимального объема)
    Можно было бы взять серверов с HDD, сделать на старых серверах detach старых партиций, переместить их на новые дешёвые сервера с hdd и там аттачнуть, но это полу-ручная работа, которую нужно контролировать
  • @EdigarevEA #252787 07:22 AM, 11 Jan 2022
    Подскажите, есть возможность распарсить json array в отдельные строки для вставки?
    echo '{"data": [{"aaa": "1","bbb": "11"},{"aaa": "2","bbb": "22"}]}'|jq
    {
    "data": [
    {
    "aaa": "1",
    "bbb": "11"
    },
    {
    "aaa": "2",
    "bbb": "22"
    }
    ]
    }
  • https://t.me/clickhouse_ru
    @SvPupok #252788 07:51 AM, 11 Jan 2022
    Привет. столкнулся со странной проблемой, при запросе типа
    select *
    FROM tab
    WHERE dt >= 1634320238 and dt <= 1634323838 ORDER BY eid;
    получаю ошибку вида
    SQL Error [1002]: ClickHouse exception, code: 1002, host: 172.16.36.2, port: 3504; Code: 9. DB::Exception: Size of filter doesn't match size of column.: While executing MergeTreeInOrder. (SIZES_OF_COLUMNS_DOESNT_MATCH) (version 21.11.4.14 (official build))

    поле dt типа int32 и согласно официальной документации может принимать значения
    Int32 — [-2147483648 : 2147483647]
  • а если привести фильтр значения к типу колонки? dt >=toInt32(1634320238), например
  • https://t.me/clickhouse_ru
    тот же результат
  • https://t.me/clickhouse_ru
    @SvPupok #252791 08:00 AM, 11 Jan 2022
    тип движка таблицы replicatedmergetree
  • https://t.me/clickhouse_ru
    @SvPupok #252792 08:01 AM, 11 Jan 2022
    та же самая табличка, но не в кластере с типом движка mergetree, и запрос отрабатывает нормально
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252787 #252793 08:35 AM, 11 Jan 2022
    with '{"data": [{"aaa": "1","bbb": "11"},{"aaa": "2","bbb": "22"}]}' as j
    SELECT arrayJoin(JSONExtractArrayRaw(j,'data'));
    или даже так:
    with '{"data": [{"aaa": "1","bbb": "11"},{"aaa": "2","bbb": "22"}]}' as j
    SELECT cast(JSONExtractKeysAndValues(arrayJoin(JSONExtractArrayRaw(j,'data')),'String'),'Map(String,String)');
  • https://t.me/clickhouse_ru
    @rvkggwp #252794 09:43 AM, 11 Jan 2022
    Правда ли, что при использовании ReplacingMergeTree и optimize_on_insert = 1 всегда при вставке данного с одинаковым order by будет происходить замена?
  • https://t.me/clickhouse_ru
    optimize_on_insert влияет только на те данные, которые вставляются
    в таблице данные в фоне еще будет досхлопываться
  • https://t.me/clickhouse_ru
    Но то что вставляет будет моментально схлопнуто, не в фоне, верно?
  • Да, сразу схлопнутся только данные из инсерта. Если есть такие же данные на диске они схлопнутся в фоне с новыми
  • https://t.me/clickhouse_ru
    Ок, спасибо за пояснение, это я и хотел услышать.
  • https://t.me/clickhouse_ru
    @brbrbr #252799 09:51 AM, 11 Jan 2022
    Всем привет.

    Есть реплицируемая на два сервера таблица с TTL 14 дней. Заметили, что сильно различается количество записей на серверах. Судя по всему, на одном сервере TTL отрабатывает (самая старая запись от 27.12), а на другом - нет (самая старая запись от 05.12).
    Данные пишутся кусками пачками по 20к поочерёдно то на один, то на другой сервер.
    CH 21.8.8.29

    Можете подсказать в какую сторону копать?
  • действия с партами реплицируются тоже, если на одном отработал то на втором тоже должен
  • @dj_mixer #252801 09:56 AM, 11 Jan 2022
    сравните именно парты из system.parts между серверами и посмотрите в system.part_log
  • https://t.me/clickhouse_ru
    да, если железо позволяет, можно iSCSI, но тут тоже наверное надо беспокоиться
    можно или нет делать ReadWriteMany режим доступа
    или надо нарезать диски через thin provisioning
    опять же балансировка нагрузки

    в кубах iSCSI CSI пока малость сырой
    https://github.com/kubernetes-csi/csi-driver-iscsi

    можно наверное через kubernetes и https://github.com/minio/directpv CSI сделать
    но там под капотом XFS
    и опять же непонятно что с ReadWriteMany чтобы CPU на HDD полках можно было бы задейтвовать...
    GitHub - kubernetes-csi/csi-driver-iscsi

    Contribute to kubernetes-csi/csi-driver-iscsi development by creating an account on GitHub.

  • тут нет задачи с readWriteMany, холодная хранилка будет не на одной машине
    хотим к каждому серверу клика (dell powerage 8x4Tb SSD) докинуть сторадж, просто добавив нод с 4x16Tb HDD
  • https://t.me/clickhouse_ru
    а какой сетап? puppet/ansible/salt? или кубы?

    просто потом переключение этого самого storage, не видится чем то легким
    ну и ваш CPU на cold storage IMHO будет обслуживать iSCSI довольно шустро
  • https://t.me/clickhouse_ru
    @brbrbr ↶ Reply to #252801 #252805 10:16 AM, 11 Jan 2022
    Разное количество активных партов.
    А part_log к сожалению выключен.
  • в кубы это не потащили из-за размера данных, достался сетап на дедиках
    к примеру на pvc в цефе это не выживет, малейшая ребалансировка - и перемещение сотни теребайт данных положит цеф
    можно конечно сделать отдельные ноды с локал-стораджем под кликхаус
    в любом случае миграция такого объема данных - довольно затратная операция, что по времени, что по серверам (и деньгам соответственно)

    поэтому нарастить cold storage через сетевое блочное устройство показалось меньшим из зол
  • system.replication_queue.

    ну и грепать логи с именами партов...
    у нас было пару раз расхождение, решилось запретом лидерства у всех реплик кроме одной
    https://t.me/clickhouse_ru/221529
    【D】【J】 in ClickHouse не тормозит

    причем там многоуровневое расхождение Т.Т сначала warnings потом ошибки... Part 20210414-421_0_228_4 is covered by 20210414-421_0_228_4_1436 but should be merged into 20210414-421_0_1279_5. This shouldn't happen often.

  • Спасибо.
  • https://t.me/clickhouse_ru
    @kobzevvv #252811 11:18 AM, 11 Jan 2022
    я верно понимаю что переводы между таймзонами не работают?

    select now(), toDateTime(now(), 'Europe/London'), toDateTime(now(), 'Europe/Moscow'),
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252811 #252812 11:20 AM, 11 Jan 2022
    не верно понимаете. все работает. смотрите историю канала. скорее всего у вас проблема в jdbc драйвере. попробуйте через clickhouse-client.
  • Работают, вы видимо сидите в датагрипе(или чем-то похожем через jdbc), поищите по чату по слову jdbc много раз была проблема такая

    SELECT
    now(),
    toDateTime(now(), 'Europe/London'),
    toDateTime(now(), 'Europe/Moscow')

    Query id: 107d3b75-7a7d-4a5a-9ebf-9a0f08cc7a37

    ┌───────────────now()─┬─toDateTime(now(), 'Europe/London')─┬─toDateTime(now(), 'Europe/Moscow')─┐
    │ 2022-01-11 11:18:56 │ 2022-01-11 11:18:56 │ 2022-01-11 14:18:56 │
    └─────────────────────┴────────────────────────────────────┴────────────────────────────────────┘
  • @shumaadan #252814 11:37 AM, 11 Jan 2022
    Hello!)
    Please help me to figure out the following problem: I am using the clickhouse npm package to work with the database from a node.js application. Calling the .query method multiple times creates a lot of connections to the clickhouse. I cannot understand why the client does not use existing connections.
    When creating a connection the 'session_check: 0' parameter is used. session timeout 60 seconds.
    Thanks a lot!)
  • https://t.me/clickhouse_ru
    Возможно вам поможет
  • https://t.me/clickhouse_ru
    я использую dbeaver и hex, dbt и redash :) в HEX работает из коробки. dbt тестирую в dbeaver нужно разобратся
  • ну dbeaver таже шляпа что и датагрип) в dbt будет нормально работать
  • https://t.me/clickhouse_ru
    чтобы проверить, проблема в jdbc или все-таки на стороне CH, оберните дату в toString(dt, 'Europe/Moscow')
  • https://t.me/clickhouse_ru
    спасибо большое помогло для dbeaver сейчас в редаше еще поищу
  • @oleg_dovgan #252820 11:55 AM, 11 Jan 2022
    Борюсь с импортом данных в через dbeaver из MS SQL, ругается на UUID, пытаясь его сконвертить в название колонок
  • https://t.me/clickhouse_ru
    @konnectrl #252821 12:14 PM, 11 Jan 2022
    Приветствую, как оптимально перенести таблицу с одного сервера на кластер с 2 шардами ?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252821 #252822 12:40 PM, 11 Jan 2022
    я бы через scp руками раскидал парты по серверам.
  • @softbot_xxl #252823 12:44 PM, 11 Jan 2022
    Что конкретно будет происходить, если при выборе LowCardinality(String) количество уникальных значений вдруг переплюнет допустим 10/100 миллионов?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #252823 #252824 12:47 PM, 11 Jan 2022
    будет мучительно поднимать словарь с диска и печально лукапить через него. Можно попробовать сгенерить и посмотреть как оно будет.
  • https://t.me/clickhouse_ru
    Где то den писал ответ такой, прям красивый, что тип похуй сколько у вас уников, главное чтобы в одной (партиции или партишене или в куске или грануле ) не больше было ....
  • Наверное речь про один парт.
  • https://t.me/clickhouse_ru
    Наверное, есть видео где абсолютно спокойно всех комитеров GitHub заносят в LowCardinality
  • https://t.me/clickhouse_ru
    @konnectrl #252828 12:51 PM, 11 Jan 2022
    Но это только видосик от Алексея :)
  • https://t.me/clickhouse_ru
  • Спасибо, посмотрю!
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @dlimonov #252833 01:23 PM, 11 Jan 2022
    Добрый день, коллеги.
    Пытаюсь настроить mysql интерфейс. Как указать логин/пароль для подключения через этот интерфейс?
  • https://t.me/clickhouse_ru
    что имеется ввиду под словами "mysql интерфейс"?

    хочется чтобы clickhouse-server притворялся MySQL сервером?

    или хочется из clickhouse-server забирать данные из MySQL?
  • Попробовал и сгенерил, создает один большой словарь и ложит его на диск.
  • https://t.me/clickhouse_ru
    Первое, чтобы clickhouse был mysql сервером. Я так понимаю логины/пароли тут все прежние используются, что и для самого clickhouse. Думаю мой вопрос на этом отпал.
  • А может есть какой-то способ вытеснять парты на другой сервер CH, с медленными дисками, отличны от detach/scp/attach ? Аналогично как они вытесняются на другой сторадж.
  • https://t.me/clickhouse_ru
    там теже самые логины и пароли что и для обычного clickhouse
    вам только mysql_port надо в config.xml прописать

    по умолчанию пользователь default Без пароля
  • https://t.me/clickhouse_ru
    да, вот я это уже понял))
  • https://t.me/clickhouse_ru
    Скорее нет, чем есть

    Можете чуть подсластить пилюлю с помощью

    ALTER TABLE xxx FETCH PARTITION FROM

    или попробовать https://github.com/ClickHouse/ClickHouse/pull/17871
    Part movement between shards by nvartolomei · Pull Request #17871 · ClickHouse/ClickHouse

    This is ready for feedback. Implements part uuid "pinning" and movement between shards. Part of #13574 Outstanding tasks for next PR ALTER TABLE t MOVE PART x CANCEL or similar. ...

  • @shamsuyarov_sr #252841 01:46 PM, 11 Jan 2022
    Подскажите пожалуйста агрегирую данные с подключением словаря, и задача еще после получения агрегата заменить id на значения string из другого словаря, сделал так но мне кажется как то проще должно быть
    SELECT SUMM(col1),
    dictGet('dict2', attr_2, toUINT64(dictGet('dict_1', attr_1,id))) as atr
    FROM Table
    GROUP BY atr
  • https://t.me/clickhouse_ru
    @NDSpasov #252842 01:47 PM, 11 Jan 2022
    create table logs
    (
    day Date,
    time Float64,
    method String,
    request String,
    ....
    )
    engine = MergeTree PARTITION BY day ORDER BY (day, time, response_code) TTL day + toIntervalMonth(3) SETTINGS index_granularity = 8192, merge_with_ttl_timeout = 3600;

    clickhouse-server:19.17.9.6 в gcp

    Клик не удаляет логи старше трех месяцев, только если в ручную дропать, почему ttl не срабатывает есть идеи?)
  • @DigDiver #252843 01:47 PM, 11 Jan 2022
    Добрый день всем. Пытаюсь обновить CH на версию 21,12,3,32, но сервер не стартует.
    `2022.01.11 13:41:17.892939 [ 186404 ] {} <Error> Application: DB::Exception: If 'engine' is specified for system table, PARTITION BY parameters should be specified directly inside 'engine' and 'partition_by' setting doesn't make sense
    2022.01.11 13:41:48.514880 [ 186471 ] {} <Error> Application: Caught exception while loading metadata: Code: 36. DB::Exception: If 'engine' is specified for system table, PARTITION BY parameters should be specified directly inside 'engine' and 'partition_by' setting doesn't make sense. (BAD_ARGUMENTS), Stack trace (when copying this message, always include the lines below):

    0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0xa21959a in /usr/bin/clickhouse
    1. DB::SystemLogs::SystemLogs(std::__1::shared_ptr<DB::Context const>, Poco::Util::AbstractConfiguration const&) @ 0x133ca5f6 in /usr/bin/clickhouse
    2. DB::Context::initializeSystemLogs() @ 0x12ccd74f in /usr/bin/clickhouse
    3. DB::Server::main(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) @ 0xa29fa11 in /usr/bin/clickhouse
    4. Poco::Util::Application::run() @ 0x16f53846 in /usr/bin/clickhouse
    5. DB::Server::run() @ 0xa292554 in /usr/bin/clickhouse
    6. mainEntryClickHouseServer(int, char**) @ 0xa2906e7 in /usr/bin/clickhouse
    7. main @ 0xa213a0a in /usr/bin/clickhouse
    8. __libc_start_main @ 0x7f4a6c0fb0b3 in ?
    9. _start @ 0xa0a782e in /usr/bin/clickhouse
    (version 21.12.3.32 (official build))`
  • @DigDiver #252844 01:51 PM, 11 Jan 2022
    Ранее настраивали TTL для некоторых системных таблиц, чтобы съэкономить место на диске
  • @DigDiver #252845 01:52 PM, 11 Jan 2022
    Можно ли как-то определить с какой таблицей проблемы и как удалить эти таблицы с диска, если это поможет запустить сервер.
  • https://t.me/clickhouse_ru
    а в чем проблема? ну вложенные dictGet
    что в них сложного?
  • https://t.me/clickhouse_ru
    идея одна, старая версия clickhouse
    вам бы обновиться
  • Тоесть так нормально, только начинаю пользоваться, поэтому боюсь привыкнуть к плохому объем не очень большой поэтому могу не заметить
  • https://t.me/clickhouse_ru
    да, так нормально, если словари консистентны с вашими данными

    если у вас какой нибудь SLOW CHANGED DIMENSION
    то можно Range Dictionary использовать
  • https://t.me/clickhouse_ru
    а на какой версии у вас вторым аргументом получилось колонку запихнуть? На 21.8.8 получаю Illegal type String of second argument of function dictGet, expected a const string or const tuple of const strings. из-за этого испытываю боль
  • @shamsuyarov_sr #252851 02:00 PM, 11 Jan 2022
    Посмотрю я из докерхаба последнюю
  • https://t.me/clickhouse_ru
    все четко прописано, надо только прочитать
    If 'engine' is specified for system table, PARTITION BY parameters should be specified directly inside 'engine' and 'partition_by' setting doesn't make sense
    config.xml кривой
    правда непонятно для какой конкретно таблицы в базе system

    query_log
    part_log
    system_log

    как это может выглядеть примеры тут
    https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings/#server_configuration_parameters-query-log

    думаю вам надо просто <partition_by> секцию убрать и перенести ее в <engine>
    Server Settings | ClickHouse Documentation

    Server Settings builtin_dictionaries_reload_interval The interval in seconds before reloading built-in dictionaries. Cli

  • https://t.me/clickhouse_ru
    @rvkggwp #252853 02:05 PM, 11 Jan 2022
    Подскажите пожалуйста как понять когда с данными произошел merge. Т.е какой-нибудь журнал может есть? Я нашел в документации system.merges, но это для действий, которые происходят в данный момент.
  • https://t.me/clickhouse_ru
    system.part_log | ClickHouse Documentation

    system.part_log The system.part_log table is created only if the part_log server setting is specified. This table contai

  • https://t.me/clickhouse_ru
    @horseheaxx #252856 02:09 PM, 11 Jan 2022
    что уж
  • https://t.me/clickhouse_ru
    Да, спасибо, что-то сразу не понял что это то что мне нужно.
  • https://t.me/clickhouse_ru
    @ururu_ururu #252859 02:10 PM, 11 Jan 2022
    добрый вечер. подскажите пожалуйста в чем может быть проблема?
    пытаюсь настроить clickhouse-keeper
    получаю такие warning:
    RaftInstance: failed to send prevote request: peer 3 (ip--70.ec2.internal:9444) is busy
    <Warning> RaftInstance: failed to send prevote request: peer 2 (ip--73.ec2.internal:9444) is busy

    почему-то прослушиваемый порт на tcp6 висит
    tcp6 0 0 :::9444 :::* LISTEN 141851/clickhouse-s

    может быть в этом проблема? как его на tcp4 повесить?
  • https://t.me/clickhouse_ru
    давай давай, злобный бот, покаж сисьски через SQL запрос без join
  • https://t.me/clickhouse_ru
    Откройте окошко
  • https://t.me/clickhouse_ru
    @ivymike_b #252862 02:15 PM, 11 Jan 2022
    Сервер КХ может перегреться
  • https://t.me/clickhouse_ru
    listen_host как задан?
  • https://t.me/clickhouse_ru
    listen_host:
    - "::"
  • https://t.me/clickhouse_ru
    @Paulvtv #252865 02:18 PM, 11 Jan 2022
    Всем привет, пробовал запустить кх через терминал, выдаёт такую ошибку ./clickhouse: line 1: syntax error near unexpected token `newline'
    ./clickhouse: line 1: `<?xml version="1.0" encoding="UTF-8"?>'
    кто-нибудь сталкивался с таким? Буду признателен за помощь
  • Спасибо, помогло. Странно, что предыдущая версия нормально работала.
  • https://t.me/clickhouse_ru
    SELECT ' 88 M::::::::::::8888:88888888888888888::::::Mm8 88888 888\n 88 M::::::::::8888M::88888::888888888888:::::::Mm88888 88\n 8 MM::::::::8888M:::8888:::::888888888888::::::::Mm8 4\n 8M:::::::8888M:::::888:::::::88:::8888888::::::::Mm 2\n 88MM:::::8888M:::::::88::::::::8:::::888888:::M:::::M\n 8888M:::::888MM::::::::8:::::::::::M::::8888::::M::::M\n 88888M:::::88:M::::::::::8:::::::::::M:::8888::::::M::M\n 88 888MM:::888:M:::::::::::::::::::::::M:8888:::::::::M:\n 8 88888M:::88::M:::::::::::::::::::::::MM:88::::::::::::M\n 88888M:::88::M::::::::::*88*::::::::::M:88::::::::::::::M\n 888888M:::88::M:::::::::88@@88:::::::::M::88::::::::::::::M\n 888888MM::88::MM::::::::88@@88:::::::::M:::8::::::::::::::*8\n 88888 M:::8::MM:::::::::*88*::::::::::M:::::::::::::::::88@@\n 8888 MM::::::MM:::::::::::::::::::::MM:::::::::::::::::88@@\n 888 M:::::::MM:::::::::::::::::::MM::M::::::::::::::::*8\n 888 MM:::::::MMM::::::::::::::::MM:::MM:::::::::::::::M\n 88 M::::::::MMMM:::::::::::MMMM:::::MM::::::::::::MM\n 88 MM:::::::::MMMMMMMMMMMMMMM::::::::MMM::::::::MMM\n 88 MM::::::::::::MMMMMMM::::::::::::::MMMMMMMMMM\n 88 8MM::::::::::::::::::::::::::::::::::MMMMMM\n 8 88MM::::::::::::::::::::::M:::M::::::::MM'
  • 😂
  • Запости в КБ Альтинити 😄
  • @7699150 #252870 02:24 PM, 11 Jan 2022
    а лучше запаковать в функцию в кх
  • @7699150 #252871 02:25 PM, 11 Jan 2022
    select boobs();
  • https://t.me/clickhouse_ru
    @margooso #252872 02:30 PM, 11 Jan 2022
    там
  • @softbot_xxl #252873 02:31 PM, 11 Jan 2022
    Для опции optimize_move_to_prewhere_if_final написано, что она может приводить к неправильным результатам. Кто-нибудь знает почему? Т.е. я понимаю, что может быть выбраны не все парты со значениями, но это может не быть важным к примеру для ReplacingMergeTree.
  • https://t.me/clickhouse_ru
    Например вы делаете фильтр по колонке time < x

    Если сначала сделать фильтрацию то может так статься, что будут выбраны старые строки.
  • @softbot_xxl #252875 02:37 PM, 11 Jan 2022
    Понятно, спасибо
  • https://t.me/clickhouse_ru
    ничего странного, в предыдущей версии скорее всего просто не была добавлена такая валидация и был наверняка скрытый баг если PARTITION BY задан в engine и в partition_by теге
  • https://t.me/clickhouse_ru
    Не поглядели? latest из докерхаба накатил (21.12.3) и всё также получаю

    Illegal type String of second argument of function dictGet, expected a const string or const tuple of const strings.
  • https://t.me/clickhouse_ru
    const string
    это значит что детерменированное значение должно быть

    а вы поди туда имя поля засовываете?
  • https://t.me/clickhouse_ru
    вкурсе, да. просто в примере выше вроде колонку кто-то смог прокинуть, вот и пытаюсь узнать как)
  • 21.12.3.32
  • https://t.me/clickhouse_ru
    @SimonOsipov #252883 03:09 PM, 11 Jan 2022
    Привет, а я верно понимаю, при использовании (экспорт данных в csv) clickhouse-client и format==CSV нет параметров, которым можно отключить кавычки?

    Чтобы в csv вместо ”string”, 55 было string, 55
  • https://t.me/clickhouse_ru
    а attr_2 и attr_1 это названия колонок или аттрибутов словаря?
  • https://t.me/clickhouse_ru
    @m1khal3v #252886 03:12 PM, 11 Jan 2022
    понял. стриггерился на отсутствие кавычек)
  • @xfangsx #252887 03:24 PM, 11 Jan 2022
    Добрый вечер. Возможно глупый вопрос сейчас прозвучит, а как сделать из обычного mergetree replicated без пересоздания таблиц?
  • https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-converting-mergetree-to-replicated/

    вам №3, который задокументирован на сайте КХ
  • https://t.me/clickhouse_ru
    @timson81 #252889 03:31 PM, 11 Jan 2022
    Добрый день, подскажите, хочу добавить в кластер clickhouse storage s3, создать таблицу с полиси чтобы использовался s3, и создать SummingMergeTree MV на таблицу с сырыми данными, чтобы агрегированные данные писались в S3. Это реальная схема?
  • https://t.me/clickhouse_ru
    @timson81 #252890 03:32 PM, 11 Jan 2022
    Текущий ingestion rate 500000 в секунду
  • Спасибо
  • https://t.me/clickhouse_ru
    @katyfrolova #252893 03:34 PM, 11 Jan 2022
    Друзья, есть ли способ подставить пароль при создании внешнего словаря из подзапроса или еще как-то: вместо того, чтобы прописывать его строкой? Или единственный способ скрыть пароль от глаз - создавать словарь в xml файлах?
  • А аггрегированных данных сколько будет? Есть подозрение что мержи не будут успевать, хотя бы денёк на диске храните, чтобы успевало помержить, а потом через TTL пусть двигает на С3.
  • https://t.me/clickhouse_ru
    30 гигабайт в день примерно сжатых. Вообще да отличная идея, буду двигать через ttl
  • https://t.me/clickhouse_ru
    @maxpain #252896 03:38 PM, 11 Jan 2022
    Добрый вечер. Подскажите пожалуйста, только начинаю разбираться в ClickHouse.
    Создал таблицу с вот таким конфигом:

    engine = MergeTree
    PARTITION BY toYYYYMM(date)
    ORDER BY (intHash32(user_id), date)
    SAMPLE BY intHash32(user_id);

    Согласно документации выражение для сэмплирования должно быть частью первичного ключа.
    Когда выполняю запросы вида WHERE user_id = 10 происходит полное сканирование таблицы, поэтому приходится писать WHERE intHash32(user_id) = intHash32(10)

    Неужели CH не может самостоятельно оптимизировать запрос с WHERE user_id = 10?
    Или я что-то не так делаю?
  • https://t.me/clickhouse_ru
    @Cyb3rpank #252898 04:47 PM, 11 Jan 2022
    Добрый вечер!
    Подскажите плиз как узнать какие grants есть у роли ?
    В system.roles только id есть
  • https://t.me/clickhouse_ru
    @bralbral #252899 06:30 PM, 11 Jan 2022
    Добрый вечер.

    <Error> void DB::MergeTreeBackgroundExecutor<DB::MergeMutateRuntimeQueue>::routine(DB::TaskRuntimeDataPtr) [Queue = DB::MergeMutateRuntimeQueue]: Code: 40. DB::Exception: Checksum doesn't match: corrupted data. Reference: 2e1936f7140a491d114e11e73cac2c6b. Actual: c629ae8fab71c834040ea7b1c3fe5025. Size of compressed block: 61593. The mismatch is caused by single bit flip in data block at byte 29893, bit 0. This is most likely due to hardware failure. If you receive broken data over network and the error does not repeat every time, this can be caused by bad RAM on network interface controller or bad controller itself or bad RAM on network switches or bad CPU on network switches (look at the logs on related network switches; note that TCP checksums don't help) or bad RAM on host (look at dmesg or kern.log for enormous amount of EDAC errors, ECC-related reports, Machine Check Exceptions, mcelog; note that ECC memory can fail if the number of errors is huge) or bad CPU on host. If you read data from disk, this can be caused by disk bit rot. This exception protects ClickHouse from data corruption due to hardware failures.: (while reading column nickname): While executing MergeTreeSequentialSource. (CHECKSUM_DOESNT_MATCH), Stack trace (when copying this message, always include the lines below):

    Как понять где битфлип-то ?? Раньше хоть путь на диске писало
  • https://t.me/clickhouse_ru
    Ну вам наверное ещё раз нужно прочитать часть про хранения данных
  • https://t.me/clickhouse_ru
    Скорее всего семплинг вам не нужен

    https://kb.altinity.com/engines/mergetree-table-engine-family/pick-keys/

    https://kb.altinity.com/altinity-kb-queries-and-syntax/altinity-kb-sample-by/
    https://kb.altinity.com/altinity-kb-queries-and-syntax/sampling-example/
    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
    @felix_neko #252903 11:08 PM, 11 Jan 2022
    Джентельмены, а не приходилось ли кому-нибудь использовать визуальные GUI для составления сложных SQL-запросов?
    Ну, с хитрыми группировками, многоступенчатыми JOINами, многажды вложенными подзапросами -- и прочими радостями?
    А если использовали, то что именно -- и было ли это полезно?
  • 12 January 2022 (157 messages)
  • https://t.me/clickhouse_ru
    Доброго дня, сударь. Пользуюсь заморской IDE Jetbrains Webstorm 2021.3.1, зело полезная и удобная программа. И сложные запросы и вложенные подзапросы и даже JOIN (будь они неладны - для Clickhouse лучше не злоупотреблять) приходилось использовать, да не единожды. )
  • https://t.me/clickhouse_ru
    @andreymishenkin #252905 01:54 AM, 12 Jan 2022
    Приветвтвую, в ClickHouse новичок, есть такая таблица:

    CREATE TABLE IF NOT EXISTS user_value.aggregate
    (
    time_bucket DateTime,
    gamer_id String,
    game_id UInt32,
    geo LowCardinality(String),
    spend Float64,
    revenue Float64,
    requests UInt64
    geo)
    ) ENGINE = SummingMergeTree()
    ORDER BY (gamer_id, game_id, geo, time_bucket)
    PARTITION BY toStartOfHour(time_bucket)

    Заполняется таким MV:

    CREATE MATERIALIZED VIEW IF NOT EXISTS user_value.aggregate_mv
    TO user_value.aggregate AS
    SELECT toStartOfFiveMinute(ts) AS time_bucket,
    gamer_id,
    game_id,
    geo,
    sum(spend) as spend,
    sum(revenue) as revenue,
    sum(requests) as requests
    FROM user_value.event
    GROUP BY (gamer_id, game_id, geo, time_bucket)
    ORDER BY (gamer_id, game_id, geo, time_bucket);

    При попытке суммировать по окну:

    SELECT gamer_id,
    game_id,
    geo,
    sum(requests) OVER w AS user_value
    FROM user_value.aggregate
    GROUP BY (gamer_id, game_id, geo, time_bucket)
    WINDOW w AS (PARTITION BY (gamer_id, game_id, geo) ORDER BY gamer_id, game_id, geo, time_bucket ROWS BETWEEN 160 PRECEDING AND CURRENT ROW)
    ORDER BY (gamer_id, game_id, geo, time_bucket)

    Ругается:

    Received exception from server (version 21.12.3):
    Code: 215. DB::Exception: Received from clickhouse-server:9000. DB::Exception: Column `requests` is not under aggregate function and not in GROUP BY: While processing gamer_id, game_id, geo, sum(requests) OVER w AS user_value. (NOT_AN_AGGREGATE)

    Что я не так делаю? Заранее благодарен!
  • https://t.me/clickhouse_ru
    Здравствуйте. Вы сумму оконной функцией производите - соответственно группировать столбцы не нужно. Попробуйте так:
    SELECT gamer_id,
    game_id,
    geo,
    sum(requests) OVER w AS user_value
    FROM user_value.aggregate
    WINDOW w AS (PARTITION BY (gamer_id, game_id, geo) ORDER BY gamer_id, game_id, geo, time_bucket ROWS BETWEEN 160 PRECEDING AND CURRENT ROW)
    ORDER BY (gamer_id, game_id, geo, time_bucket)
  • https://t.me/clickhouse_ru
    @andreymishenkin #252907 02:12 AM, 12 Jan 2022
    Работает! Спасибо большое Роман!
  • https://t.me/clickhouse_ru
    День добрый!
    Лет 5-7 назад пробовал GUI в SQL Navigator или чем-то подобном...
    Дико не удобно было, особенно JOINы

    С тех пор не пользуюсь.
  • @EdigarevEA #252910 05:14 AM, 12 Jan 2022
    Как-то можно заставить кликхаус не трогать экранирование символов при работе с json?

    {"data":"{\"message\":\"test\"}"}
    Чтоб подобное просто оставалось строкой.
  • https://t.me/clickhouse_ru
    JSONExtractRaw
  • Помогло, спасибо.
  • @vmihailenco #252913 06:45 AM, 12 Jan 2022
    Добрый день.
    Можно как-то вручную поменять тип колонки когда я знаю что это безопасно и MODIFY COLUMN отказывается делать это? К примеру, поменять тип с AggregateFunction(quantiles(0.5), Int64) на AggregateFunction(quantiles(0.5), Float32). Что-то типа подредактировать файлы ClickHouse если это хранится в одном месте.
  • @vmihailenco #252914 06:47 AM, 12 Jan 2022
    Я даже issue открыл - возможно там понятнее описано.
    https://github.com/ClickHouse/ClickHouse/issues/27761
    Allow type casts between aggregate function states with the same representation · Issue #27761 · ClickHouse/ClickHouse

    For example, it is not possible to change column type from quantilesTDigest to quantilesTDigestWeighted CREATE TABLE test ( `foo` AggregateFunction(quantilesTDigest(0.5), Float32) ) ENGINE = MergeT...

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

    сейчас развиваем sql магию под себя так что по каждой части запроса сразу видно промежуточные итоги, очень удобно для проектирования сложных расчетов
  • https://t.me/clickhouse_ru
    Sql магию? Это вы об чем же?
  • https://t.me/clickhouse_ru
    настройка к юпитерноутбукам и пр (https://www.sqlalchemy.org/ ) чтобы sql кушали хорошо. Например в HEX можно использовать clickhouse. И там можно прибавлять всякий сахар.

    но всё это имеет смысл когда используешь красивый стиль кода
  • https://t.me/clickhouse_ru
    @felix_neko #252920 07:40 AM, 12 Jan 2022
    А, алхемушка! А бэкенд под КХ какой пользуете? От xzkostyan?
  • https://t.me/clickhouse_ru
    Datagrip + Clickhouse для исполнения написанного запроса. В остальном проверки выполнения запросов через clickhouse-benchmark и трейсинг логов, до flamegraph еще не дотянулись руки.
  • https://t.me/clickhouse_ru
    ну там куча всего. аналитическая часть в DBT но, это не совсем бэкенд.
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    dbeaver для написания запросов. Лично я люблю запустить их потом через clickhouse-client, потому что в конце выполнения запроса выводится его результат, скорость, количество строк, количество строк участвующий в фильтрации и тд. Это можно и самому посмотреть, но надо лезть в логи запросов, а тут все сразу. Т.е если вам не нужна какая-то статистика, а только результат и время выполнения то dbeaver справляется хорошо.
  • https://t.me/clickhouse_ru
    а есть какой-то удобный способ запускать запросы напрямую в кликхаус? или вы через командну строку? о каком клиенте речь подскажите?
  • https://t.me/clickhouse_ru
    @kobzevvv #252926 07:49 AM, 12 Jan 2022
    во нашел походу, затестирую https://tabix.io/
  • https://t.me/clickhouse_ru
    @Sablast #252927 07:50 AM, 12 Jan 2022
    https://clickhouse.com/docs/ru/interfaces/http/
    если у вас не что то древнее, то можно напрямую через веб интерфейс КХ ходить
  • https://t.me/clickhouse_ru
    @Taburetpwn #252928 07:50 AM, 12 Jan 2022
    Как я понимаю, адекватные логи выполнения запроса можно получить только через clickhouse-client. Что немного печалит(
  • https://t.me/clickhouse_ru
    @Hardstep83 #252929 07:50 AM, 12 Jan 2022
    http://localhost:8123/play - вот еще есть родной WUI, адрес естественно и порт свой указать нужно
  • https://t.me/clickhouse_ru
    да норм в text_log собирается. но нужно заморочится настроить фильтры чтобы лишнее не смотреть
  • https://t.me/clickhouse_ru
    select * from system.query_log; Не знаю, здесь можно смотреть.
  • https://t.me/clickhouse_ru
    clickhouse-client это из консоли
  • https://t.me/clickhouse_ru
    Там есть что-то. Но если отлаживаешь запрос то нужно что то детальнее
  • https://t.me/clickhouse_ru
    explain?
  • https://t.me/clickhouse_ru
    @rvkggwp #252935 07:54 AM, 12 Jan 2022
    и query_thread_log. Не знаю что может быть еще более детальнее
  • https://t.me/clickhouse_ru
    @Taburetpwn #252936 07:55 AM, 12 Jan 2022
    Explain тоже интересная штука но без реальных цифр. На самом деле если скрестить Explain и логи из clickhouse-client то как раз и получится какой-то Profiler, как скажем в MSSQL
  • https://t.me/clickhouse_ru
    вы чего хотите избежать? чтобы пароль в system.query_log не попадал?
  • https://t.me/clickhouse_ru
    ага у меня для отладки запрос который сначала находит мой запрос в query_log и потом идет в text_log собирает инфу.

    text_log оказалась супер удобен для отслеживания внешних интеграций. если колонку переименовали например то можно увидеть что гуглдатастудия не может найти колонку
  • https://t.me/clickhouse_ru
    и это тоже, и чтобы при запросе show create table его не было видно
  • https://t.me/clickhouse_ru
    тогда XML словарь
    и пароль там через <password from_env="ENV_NAME">
    и переменную окружения надо будет как то передать в clickhouse
    у вас standalone сервере или контейнеризация?
  • https://t.me/clickhouse_ru
    Кстати надо заглянуть в эту таблицу. Мы просто облачным решением от Яндекса пользуемся, поэтому все эти таблицы типа query_log query_thread_log какие то урезанные.
  • https://t.me/clickhouse_ru
    еще может быть она не включена. нужно ее включить. ну вы запросите с неё данные и увидите может она есть уже
  • https://t.me/clickhouse_ru
    @kobzevvv #252943 08:06 AM, 12 Jan 2022
    select * from system.text_log
  • https://t.me/clickhouse_ru
    @Taburetpwn #252944 08:07 AM, 12 Jan 2022
    нет нету. попробую включить
  • https://t.me/clickhouse_ru
    ну я еще для удобства юзаю settings log_comment = 'query', тогда в query_log проще найти свои запросы.
  • https://t.me/clickhouse_ru
    @Taburetpwn #252946 08:15 AM, 12 Jan 2022
    Ок, спасибо. text_log включил, попробую через него по отлаживать.
  • https://t.me/clickhouse_ru
    Вот об этом и был вопрос) возможно ли чисто ddl обойтись) видимо нет)
    спасибо за ответ)
  • https://t.me/clickhouse_ru
    @agkucherov #252949 08:33 AM, 12 Jan 2022
    Не нашел в истории сообщений, поэтому быстрый вопрос😀

    Есть куча партиций с файлами по 90Мб

    Что будет быстрее, вставлять по одной партиции в параллель в 15 потоков
    или вставлять сразу 15 партиций, где каждая партиция вставляется в один поток?
    Или какоето другое решение будет лучшим?
  • строить архитектуру учитывая не только вставку, но и выборку
  • https://t.me/clickhouse_ru
    @chocosnat #252951 09:08 AM, 12 Jan 2022
    Добрый день! Коллеги, у нас проблема: сыпятся диски. Меняем диски на дисковой полке. Но постоянно получаем ошибки Code: 246. DB::Exception: Received from 127.0.0.1:9900. DB::Exception: Bad size of marks file '/var/lib/clickhouse/data/default/.../data.mrk3': 6840, must be: 1080: While executing MergeTreeThread. Подскажите пожалуйста как нам найти все плохие parition-ы таблицы чтобы через detach./ attach и удаление плохих файлов остались только небитые партишены? Мы можем потерять немного данных (логи) - и наша задача сейчас оставить как можно большее количество
  • https://t.me/clickhouse_ru
    @horseheaxx #252952 09:14 AM, 12 Jan 2022
    скучновато
  • https://t.me/clickhouse_ru
    Сделай шардирование на кликхаусе :)
  • @84600419 #252954 10:09 AM, 12 Jan 2022
    Господа, есть ли возможность в КХ понять, какие значения были вставлены в таблицу по query_log?

    У меня есть айдишник квери и текст в формате insert into A(a,b,c) values
    и вот на values поле query заканчивается.

    Может есть способ восстановить заинсерченые значение или просто перепрогнать ту же кверю по айдишнику?
  • @simpl1g #252955 10:41 AM, 12 Jan 2022
    Подскажите, кто пользует dbt, можно ли парралелить запросы по шардам? Сейчас данные шардированы по приложениям и мы в самописном пайплайне просто запускаем одинаковый запрос в отдельном потоке на каждый шард, можно ли что-то такое сделать в dbt для ускорения?
  • по query_log нельзя, он же не будет хранить миллионы вставленных строк, тогда лог будет больше самой базы
  • https://t.me/clickhouse_ru
    Прописываете в profiles.yml подключение к каждому шарду и используете при dbt run флаг --target *название таргета для шарда*. И так на каждый шард. Распараллелить можете в том же эйрфлоу, по таске на каждый шард
  • Спасибо, а если усложнить, и надо много запросов на 1 шард, например разбиваем 1 жирный запрос чтобы в память укладывался через where app_id % 30 = {0..29}. Через dbt run --vars нормально делать? + автогенерация тасок в airflow
  • https://t.me/clickhouse_ru
    @Vsevolod_Korol #252959 11:01 AM, 12 Jan 2022
    Привет!
    Подскажите про работу ZooKeeper в ReplicatedMergeTree для дедублицирования данных + replicated_deduplication_window

    1) У меня есть несколько шардов и я хочу понять если я буду пихать один и тот же батч в разные шарды ZooKeeper отловит это или нет.
    Нашел в доке
    Для очень больших кластеров, можно использовать разные кластеры ZooKeeper для разных шардов. Впрочем, на кластере Яндекс.Метрики (примерно 300 серверов) такой необходимости не возникает.

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

    2) настройка replicated_deduplication_window (кол-во сообщений которые хранятся в ZooKeeper) - она на что настраивается - на реплику/на шард/кластер/на таблицу?
    Репликация данных | Документация ClickHouse

    Репликация данных Репликация поддерживается только для таблиц семейства MergeTree: ReplicatedMergeTree ReplicatedSumming

  • https://t.me/clickhouse_ru
    dbt_users
    DBT users group

    Взаимное уважение и без спама.
    Для вакансий тег #job

    Dual language: russian/english
    https://t.me/dbt_users

    Вполне живое русскоязычное комьюнити. Там был ответ про union_relations макрос
    dbt_users

    DBT users group Взаимное уважение и без спама. Для вакансий тег #job Dual language: russian/english

  • Спасибо, изучу, но на первый взгляд это что-то для объединения, а не разбития запроса)
  • https://t.me/clickhouse_ru
    Ну а объединять-то данные потом как будете?))
  • так они пишут в 1 таблицу, объединять ничего не надо) Просто 1 запрос на вставку разбивается на 30 маленьких
  • https://t.me/clickhouse_ru
    Короче, почитайте. Может это то, что нужно. У меня таких проблем не возникало, только при initial load. Там тупо циклом с переменным делал
  • https://t.me/clickhouse_ru
    У нас не смог стартовать с 50к+. Но сервер весьма скромный был
  • Ну он должен это запихнуть в память скорее всего, буфер пула то нету.
  • https://t.me/clickhouse_ru
    @alex_spiridonov #252968 11:41 AM, 12 Jan 2022
    Да мы не ожидали и столько много - это было неверное предположение о природе данных
  • @supersurfer #252969 11:46 AM, 12 Jan 2022
    проблема: создаю database, создаю там таблицы и ни в одну таблицу не производится insert. в query_log запросы появляются с type = 'QueryStart' и 'QueryFinish'. пользователю дал grant all на все таблицы. сам clickhouse-server рестартил. в чём может быть проблема? или куда ещё можно заглянуть?
  • https://t.me/clickhouse_ru
    @ExplosiveJam #252970 11:49 AM, 12 Jan 2022
    Можно в data директорию таблиц посмотреть, мб оно в detached или куда-то ещё падает
  • спасибо. попробую
  • какой движок у таблицы? как проверяете что данные вставили?
  • движок mergetree. делаю select * запрос в таблицу. она пустая
  • покажите show create table(можете удалить все поля)
    и полностью селект
  • @Agfa00 #252976 12:45 PM, 12 Jan 2022
    Коллеги, объясните дураку, как добавить ip в белый лист брендмауэра yandex cloud?
  • https://t.me/clickhouse_ru
    @Makasinov #252978 12:47 PM, 12 Jan 2022
    Привет! Есть ли где нибудь статьи о том как работают под капотом мутации для реплицируемой таблицы? Я запустил альтер, думал что он будет выполняться только на одной ноде, а он на самом деле распределился по всем репликам и мерджит свои партиции самостоятельно в произвольном порядке. Можно ли только на одной реплике включить мутирование, а другие пусть продолжают штатную работу? Когда домутирует подтянут актуальную партицию по сети
  • https://t.me/clickhouse_ru
    @s_nikolajus #252980 01:31 PM, 12 Jan 2022
    Привет, для ON CLUSTER - возможно ли динамически имя кластера получать? Как в этом случае использовать ddl если необходимо его и в test и в prod кластере выполнить?
  • https://t.me/clickhouse_ru
    @s_nikolajus #252981 01:32 PM, 12 Jan 2022
    Создавать копии скрипта с разным именем кластера - кошмар для version control
  • https://t.me/clickhouse_ru
    @Krashuevina #252982 01:33 PM, 12 Jan 2022
    это же DDL, откуда динамика
  • @infisamk #252983 01:45 PM, 12 Jan 2022
    Друзья! Подскажите, почему explain хочет очень много памяти? Он кушает столько же, сколько и при обычном запросе, просто попутно сохраняет анализ запроса?
  • через макросы можно

    create table tst on cluster '{cluster}'
    select * from system.macros where macro = 'cluster'

    ┌─macro───┬─substitution─┐
    │ cluster │ ch_shards │
    └─────────┴──────────────┘
  • https://t.me/clickhouse_ru
    Спасибо огромное! Сработало 🥳
  • Все ALTER команды реплицируются, на сколько я знаю нельзя запустить только на одной реплике. Все мержи каждая реплика сама делает, она не может дождаться результата мержа другой реплики
  • https://t.me/clickhouse_ru
    смотря какой EXPLAIN
    EXPLAIN AST и EXPLAIN PLAN вроде не должны сильно память жрать

    EXPLAIN PIPELINE по идее может память отожрать, но прямо МНОГо не должен

    а как вы меряете память? через system.query_log ?
  • @subotic0 #252988 01:56 PM, 12 Jan 2022
    Добрый день, подскажите по поводу профелей настроек. Если я укажу что профиль может юзать 1гб памяти, и выдам профиль 10 учеткам. То каждая эта учетка может юзать 1гб, или все вместе? И каким образом можно реализовать работу, когда условно 50% ресурсов отданы одной группе пользователей, вторые 50% другой
  • Code: 241. DB::Exception: Received from x.x.x.x:9000. DB::Exception: Memory limit (total) exceeded: would use 3.94 GiB (attempt to allocate chunk of 0 bytes), maximum: 2.79 GiB: While executing AggregatingTransform: While processing (WITH '2020-01-01 00:00:00' AS beginPeriod, '2021-12-31 23:59:59' AS endPeriod SELECT count() FROM normal_transactions WHERE (cardId > 0) AND (type < 7)) AS cnt_with_cards. (MEMORY_LIMIT_EXCEEDED)
  • @infisamk #252990 01:57 PM, 12 Jan 2022
    Запрос с массой выражений в WITH
  • @infisamk #252991 01:57 PM, 12 Jan 2022
    При этом строк данных там менее 20 тысяч.
  • https://t.me/clickhouse_ru
    https://clickhouse.com/docs/en/operations/settings/query-complexity/#max-memory-usage-for-user

    это чтобы на весь сервер, но ограничение по пользователю а не по профилю
    Restrictions on Query Complexity | ClickHouse Documentation

    Restrictions on Query Complexity Restrictions on query complexity are part of the settings. They are used to provide saf

  • https://t.me/clickhouse_ru
    @timson81 #252993 02:00 PM, 12 Jan 2022
    Добрый день! Подключил к clickhouse s3, добавил policy. И перекинул несколько партиций таблицы на s3. В бакете вижу файлы, перенос завершается успешно. Но когда делаю select в этой таблице получаю ошибку: "Cannot read all data. Bytes read: 1. Bytes expected: 8.: (while reading column InstanceType): (while reading from part /var/lib/clickhouse/disks/s3/data/flamedb/samples_local/20220105_0_1619_285/ from mark 0 with max_rows_to_read = 16384): While executing MergeTreeInOrder. (CANNOT_READ_ALL_DATA)"
  • https://t.me/clickhouse_ru
    @timson81 #252994 02:01 PM, 12 Jan 2022
    Если двигаю обратно партицию с s3 на default, все работает :-/ Может кто сталкивался?
  • https://t.me/clickhouse_ru
    While executing AggregatingTransform:

    вы точно EXPLAIN запускаете? оно вроде сами трансформации запускать не должно
  • Точно
  • если я на профиль накину настройку max_memory_usage = 1gb, выдам профиль 10 юзерам, и каждый юзер запустит кверю на 500mb, то кверя у юзеров отработает, или упадет по нехватке памяти?
  • В том-то и проблема. Что по факту там выполняется всё, хотя мне нужно было только оценить сам запрос. Может быть и запрос корявый (я в личку скинул, он большой), но всё равно очень странно, что explain так работает...
  • емнип это ограничение на один запрос
  • спасибо. А ограничение на целую группу пользователей можно реализовать каким-то образом?
  • max_memory_usage в профиле указывается, видимо это для всего профиля на 1 запрос
  • @BBRSOFF #253002 02:18 PM, 12 Jan 2022
    Всех приветствую! кто подскажет, куда двигаться? Есть таблица на 100 столбцов, одни из которых ModifiedOn(Datetime), Id, sum. Во все остальные столбцы могут записываться NULL. Необходимо вывести все строки, имеющие последние значения по ModifiedOn (можно сказать "схлопывая" соседние, убирая Null) и просуммировать sum. Как сделать LAST_VALUE(*) over(partition by Id order by ModifiedOn desc) для всех столбцов?
  • argMax(value, ModifiedOn)+group by id?
  • это будет одна результирующая строка
    а мне нужно для каждого id вывести строку, которая будет содержать последние не null значения всех столбцов согласно ModifiedOn и просуммировать для каждого id все значения sum таблицы
  • select id, argMaxIf(value, ModifiedOn, value is not Null), argMax(value, ModifiedOn) from table group by id
  • @BBRSOFF #253006 02:30 PM, 12 Jan 2022
    а value же для единственного столбца. Как мне это применить для всех? то есть, как я думал, SELECT distinct Id, LAST_VALUE(first_column) over(partition by Id order by ModifiedOn desc), LAST_VALUE(second_column) over(partition by Id order by ModifiedOn desc) и так далее from и таких колонок 100
    как это объединить? наверно я плохо объясняю
  • https://t.me/clickhouse_ru
    Обновился с 21.11.4 до 21.12.3 и проблема ушла )
  • да я примерно понял, мб действительно нужно все поля прописать
  • после 10 вылетает по памяти)
  • @infisamk #253010 02:46 PM, 12 Jan 2022
    Хм. Похоже я опять нашел баг. Я уменьшил количество выражений WITH до 1, затем выполнил запрос. Запрос отработал без ошибок. Я начал увеличивать количество выражений и выполнять запросы. На определенном количестве выражений мне выдало ошибку "AST is too big". Я "включил" дурака и снова добавил все оставшиеся выражения в запрос и попытался его выполнить. Сервер выжрал всю память и упал. Получается, что до какого-то количества выражений производится анализ и блокирует выполнение запросов, так как превышена сложность запроса, а при слишком большом количестве выражений анализ не останавливается и продолжается дальше, что съедает память, и сервер валится. Хотя по идее, если на каком-то выражении уже есть превышение сложности запроса, то анализ должен останавливаться и выдавать ошибку.
  • @infisamk #253011 02:48 PM, 12 Jan 2022
    А ведь так любой пользователь может просто уронить сервер. Банальная DoS-атака...
  • https://t.me/clickhouse_ru
    https://github.com/ClickHouse/ClickHouse/issues/32754

    Похоже на это, пишите issue на github
    This query is slow. · Issue #32754 · ClickHouse/ClickHouse

    This query spend one second before returning an error: SELECT arrayWithConstant(96142475, ['qMUF']); It opens a possibility of DoS.

  • @infisamk #253013 02:50 PM, 12 Jan 2022
    Ах да! Самое смешное, что это я делаю на абсолютно пустой таблице. То есть там в принципе нет данных.
  • @infisamk #253014 02:53 PM, 12 Jan 2022
    Нужно будет завтра пол-дня убить на то, чтобы подготовить грамотный пример. Я не хочу публиковать свою структуру и запрос. Ладно, будет время, добавлю на гитхаб
  • https://t.me/clickhouse_ru
    @MakeReady #253015 02:57 PM, 12 Jan 2022
    добрый день! А можно же с помощью оконной функции без подзапросов собрать в отдельном моле агрегаты, типа суммы по какому-то полю для подгруппы полей?
  • https://t.me/clickhouse_ru
    @MakeReady #253016 03:12 PM, 12 Jan 2022
    есть регион, город, район, число кошек. нужно вывести эти значения и число кошек по городу
  • добрый день, подскажите пжл можно ли сделать поле NULL если изначально оно не NULLABLE?
  • https://t.me/clickhouse_ru
    Можно если оно не в ORDER BY или в PARTITION BY ключе
  • a какое выражение? через Nullable?

    ALTER TABLE events_shard ON CLUSTER '{cluster}' MODIFY COLUMN session_id Nullable(UUID);
  • https://t.me/clickhouse_ru
    Да, что то вроде такого
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253016 #253023 03:35 PM, 12 Jan 2022
    так это основа оконных функций - прочитайте какой-нибудь тьюториал:
    select регион, город, район, число кошек, sum(`число кошек`) over (partition by `город`) as total
  • https://t.me/clickhouse_ru
    @MakeReady #253024 03:36 PM, 12 Jan 2022
    спасибо! я что-то делал не так. Написал с нуля и все зааботало
  • спасибо, работает 🙂
  • https://t.me/clickhouse_ru
    Интересно, что быстрее будет работать оконка или arrayJoin?

    select region, city, arrayJoin(groupArray(district)), sum(c) from (select 'mo' region, 'msk' city, 'len' district,
    10 c
    union all
    select 'mo' region, 'msk' city, 'oct' district,
    21 c
    union all
    select 'mo' region, 'troitsk' city, 'sov' district,
    11 c)
    group by region, city
  • https://t.me/clickhouse_ru
    @MakeReady #253027 03:43 PM, 12 Jan 2022
    на больших объемах юнион точно добавит проблем
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253006 #253028 03:44 PM, 12 Jan 2022
    можно попробовать посмотреть в сторону select * except (id) apply () - не уверен что оно работает для WF, но для обычных аггрегаток должно.
    https://clickhouse.com/docs/ru/sql-reference/statements/select/#except-modifier
    Синтаксис запросов SELECT

    Синтаксис запросов SELECT SELECT выполняет получение данных. [WITH expr_list|(subquery)] SELECT [DISTINCT [ON (column1,

  • А в каком контексте у меня это можно испробовать?
  • @BBRSOFF #253030 03:49 PM, 12 Jan 2022
    Прям как last_value(* )?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253029 #253031 03:49 PM, 12 Jan 2022
    в смысле? Как я понял ваш вопрос - вы не хотите перечислять 100 столбцов в запросе. except/apply ровно для этого придумано.
  • https://t.me/clickhouse_ru
    @bvt123 #253032 03:50 PM, 12 Jan 2022
    что такое last_value - я не знаю. В КХ есть аггрегатная функция anyLast
  • @BBRSOFF #253033 03:51 PM, 12 Jan 2022
    Спасибо, ничего не понятно, поизучаю)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253004 #253034 03:57 PM, 12 Jan 2022
    select id, sum(sum) as total, * except (id,sum,DateTime) apply (groupArray(10)) from (select * from table order by ModifiedOn desc) group by id
    Тут будет группировка с массивами, по 10 штук последних. Если надо - можно таким-же образом их развернуть назад через arrayJoin
  • на 8 млн строках оконка у меня выдаёт 1.3 секунды, array join 0.3
  • юнион тут для генерации данных, вам только эта часть нужна arrayJoin(groupArray(district)), sum(c)
  • https://t.me/clickhouse_ru
    интересно, попробую
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253035 #253038 04:13 PM, 12 Jan 2022
    а это на какой версии?
    в любом случае - спасибо за тест. значит пока недоделали WF, и надо не лениться, а писать узкие места по прежнему на массивах.
  • 21.8.11, да, думаю массивы намного лучше оптимизированы и на них можно что угодно посчитать)
  • https://t.me/clickhouse_ru
    но мне при этом и детализацию нужно оставить… то есть ЦФО, Москва, Мневники, 10, 120 , где 120 по городу
  • надо будет добавить groupArray(детализация) и развернуть потом, пример на моей таблице где impression_count детализация

    SELECT *
    FROM
    (
    SELECT
    app_id,
    campaign_type,
    groupArray(ad_type) AS ads,
    groupArray(impression_count) AS ics,
    sum(impression_count)
    FROM dashboard_stats
    WHERE date = yesterday()
    GROUP BY
    app_id,
    campaign_type
    )
    ARRAY JOIN
    ads,
    ics
  • https://t.me/clickhouse_ru
    @unamedrus #253042 04:18 PM, 12 Jan 2022
    Оконки пока работают в 1 поток, так что в некоторых случаях массивы будут быстрее
  • sed в консоли
    это быстрее питона
  • https://t.me/clickhouse_ru
    @MakeReady #253044 04:26 PM, 12 Jan 2022
    Спасибо!
  • https://t.me/clickhouse_ru
    @horseheaxx #253045 04:54 PM, 12 Jan 2022
    приветики)
  • https://t.me/clickhouse_ru
    @ievgenpro #253046 05:05 PM, 12 Jan 2022
    добрый вечер, есть таблички с csv в заголовке 4 колонки,по факту 3, в базе 4 но у 4й есть дефолтное значение, можно ли доработать команду bash
    cat $filename | curl "http://$host:$port/?user=$user&password=$password&input_format_skip_unknown_fields=1&query=INSERT+INTO+db_test.tbl_%24name+%28a%2Cb%2Cc%29+FORMAT+CSVWithNames" --data-binary @-
    чтобы вставить 3 колонки в таблицу
  • https://t.me/clickhouse_ru
    @andreymishenkin #253047 05:23 PM, 12 Jan 2022
    Всем доброго времени суток! Не ругайте сильно если спрашиваю глупости:

    Есть 3 таблицы:

    event - raw events
    aggregate - 5мин аггрегаты
    result - финальный результат (ReplacingMergeTree)

    Можно ли с помощью Materialazed View при появлении записи в таблице aggregate найти по ключу запись в result взять текущее значение поля вычислить новое используя значение из aggregate (скажем EMA реализовать) и записать результат обратно в result?
  • https://t.me/clickhouse_ru
    @fiksilya #253048 05:33 PM, 12 Jan 2022
    Добрый вечер, скажите, а можно ли результат запроса запихнуть в map?

    Т.е. например:
    select user_id, count() from t group_by user_id

    Было
    map: {user_1: 1000, user_2: 10000, ....}
  • https://t.me/clickhouse_ru
    SELECT CAST(sumMap([user_id], [1]) AS Map(String, UInt32))
  • https://t.me/clickhouse_ru
    да, хитро... спасибо....
  • https://t.me/clickhouse_ru
    @orx4n #253051 05:41 PM, 12 Jan 2022
    Возможно ли сделать настройку две реплицированных таблиц под разные типы запросов обращаться каждому по типу запроса ? Это нормальная практика или что то проблемы возникают в будущем?
  • реплицированные сами по себе имеют одинаковую метадату и ордер бай, т.е. смысла под разные типы запросов к разным репликам особо нет

    наверно лучше сделать проекции с разным orderby, КХ будет сам выбирать в какую ходить
  • в теории вы можете джойнить в MV табличку result и доставать оттуда старые данные, но на практике вы скорее всего просто убьёте производительность и лучше так не делать
  • нет. МВ это триггер на вставку, будет вечная вставка в result
  • ---------------------------————————————-
    id|datetime| value1| value2|value3|...value N
    ---------------------------————————————-
    1 |2021-01-03 14:38:02.000 |a | NULL |f |
    1 |2021-01-03 15:38:02.000 |NULL |c | NULL |
    2 |2021-01-03 14:38:02.000 | NULL |d |g |
    2 |2021-01-03 15:38:02.000 |b |e | NULL |

    вот так лучше. Например: нужно схлопнуть строки так, что бы получилось для id=1|a|c|f|, а для id= 2 |b|e|g|.
  • получается что то не то
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253055 #253057 06:42 PM, 12 Jan 2022
    а если строк больше? Куда девать лишние?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253046 #253058 06:45 PM, 12 Jan 2022
    insert into table (v1,v2,v3) - такой запрос ждет ровно 3 значения
  • в том и дело, что строк с id=1 множество, но в каких то из них столбцы получают null. Надо собрать из них одну с id=1, самым свежим datetime, забрав в результирующую строку самое последнее ненулловое значение
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253047 #253060 06:47 PM, 12 Jan 2022
    такой трюк делается на основе AggregatingMT (для result). Вы туда все пишете и она тихонько "по ночам" соединяет строки той агрегатной функцией, которая вам нужна.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253059 #253061 06:51 PM, 12 Jan 2022
    Если вам надо не список на 10, а ровно одно последнее - используйте аггрегатную функцию any. Вроде как оно должно пропускать Nulls. groupArray точно их выкидывает.
    select id, sum(sum) as total, * except (id,sum,DateTime) apply (any) from (select * from table order by ModifiedOn desc) group by id
  • сейчас попробую,спасибо
  • https://t.me/clickhouse_ru
    @timson81 #253064 08:04 PM, 12 Jan 2022
    Добрый вечер! А есть в clickhouse возможность удалять старые данные от некого userId по TTL старше 7 дней, но только в случае если есть более свежие данные от этого userId. Идея в том что, если от данного userId перестали поступать данные, то мы будем всегда хранить его последние данные за 7 дней.
  • https://t.me/clickhouse_ru
    Нет, такой возможности нет.

    Придется вам самим это дело реализовывать.
  • @infisamk #253067 09:47 PM, 12 Jan 2022
    Я ранее писал о прожорливости EXPLAIN. В общем подтвердилось, что EXPLAIN действительно фактически выполняет скалярные подзапросы, на что тратится некоторый объем памяти. Но, что удивительно лично для меня, что на пустой таблице EXPLAIN чуть больше полутора десятков таких подзапросов легко жрёт 4 GB и более. Так что имейте ввиду. Самое печальное, что сервер тупо валится и не успевает даже клиенту сообщить о нехватке памяти или ещё о чем.
  • @infisamk #253068 09:48 PM, 12 Jan 2022
    Проблема описана тут - https://github.com/ClickHouse/ClickHouse/issues/33579
    Server falls when execute EXPLAIN · Issue #33579 · ClickHouse/ClickHouse

    Clickhouse run in Docker with 2 CPU and 3GB RAM. All settings are default. When I execute EXPLAIN my query, server falls. Reproduce: Create any table: CREATE TABLE stock ( id UInt64, dd DateTime, v...

  • > Самое печальное, что сервер тупо валится и не успевает даже клиенту сообщить о нехватке памяти или ещё о чем.

    а какой лимит на запрос по памяти стоит?
  • https://t.me/clickhouse_ru
    Это происходит до "выполнения" запроса, так что кх не проверяет там временные или лимиты на память
  • 13 January 2022 (170 messages)
  • https://t.me/clickhouse_ru
    Спасибо всем кто откликнулся (@simpl1g, @dj_mixer, @bvt123)  удалось создать такое (если интересно), events опустил для простоты.

    CREATE TABLE IF NOT EXISTS agg
    (
    gamer_id String,
    user_value Float64
    ) ENGINE = MergeTree()
    ORDER BY (gamer_id);

    CREATE TABLE IF NOT EXISTS result
    (
    gamer_id String,
    user_value Float64,
    updated_at DateTime DEFAULT now()
    ) ENGINE = ReplacingMergeTree(updated_at)
    ORDER BY (gamer_id);

    CREATE MATERIALIZED VIEW IF NOT EXISTS mv
    TO result AS
    SELECT gamer_id,
    (SELECT user_value from result where result.user_value = user_value order by updated_at desc limit 1) as old,
    user_value + if(isNotNull(old), old, 0) as user_value
    FROM agg
    ORDER BY (gamer_id);

    криво конечно, вроде работает, но боюсь по производительности будет ужос... может кто-то поможет улучьшить?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253071 #253072 04:42 AM, 13 Jan 2022
    Вы правы - криво, ужас и медленно. Тут так не делают. Я же вам предложил применить AggregatingMT.
    CREATE TABLE IF NOT EXISTS agg
    (
    gamer_id String,
    user_value Float64,
    updated_at DateTime DEFAULT now()
    ) ENGINE = MergeTree()
    ORDER BY (gamer_id);

    CREATE TABLE IF NOT EXISTS result
    (
    gamer_id String,
    total SimpleAggregateFunction(sum,Float64),
    updated_at SimpleAggregateFunction(max,DateTime)
    ) ENGINE = AggregatingMergeTree
    ORDER BY (gamer_id);

    CREATE MATERIALIZED VIEW IF NOT EXISTS mv
    TO result AS
    SELECT gamer_id,
    sum(user_value) as total,
    max(updated_at) as updated_at
    FROM agg
    group by gamer_id;
    Выборка должна быть тоже с group by - не все строки будут аггрегированы в бекграунде.
    И подумайте об отказе от Float в пользу Decimal. Вы же не научные расчеты ведете?
  • https://t.me/clickhouse_ru
    @fiksilya #253073 05:04 AM, 13 Jan 2022
    Добрый день, Я не понимаю как можно сделать это эффективно.
    Есть таблица time, user_id, value.

    Необходимо сделать таблицу такой же длины, и в каждой строке добавить sum(value) по последним 10 записям (отсортированным по времени) для данного user_id.
  • https://t.me/clickhouse_ru
    сум if по идее если инкреметный айдищник есть
  • https://t.me/clickhouse_ru
    Это агрегатная функция, т.е. чтобы получилась таблица с исходными данными, надо потом сджойнить по time, user_id?
  • https://t.me/clickhouse_ru
    1 создаь инкреметный индекс
    2 джойнить с sumif — по сути это умножение будет и долго вычислятся будет
  • https://t.me/clickhouse_ru
    @kobzevvv #253077 05:15 AM, 13 Jan 2022
    ааа можно сделать быстро через 10 джоинов:) то есть работать будет быстро но код будет веселый
  • https://t.me/clickhouse_ru
    @kobzevvv #253078 05:15 AM, 13 Jan 2022
    хотя в целом не сложный копипаст
  • https://t.me/clickhouse_ru
    Это я примерно сразу понял как делать, но, нет )))))
  • https://t.me/clickhouse_ru
    думал, что может через array и без join можно как-то )))))
  • https://t.me/clickhouse_ru
    ну если красиво написать через jinja то даже аккуратно будет. главное быстро
  • https://t.me/clickhouse_ru
    это в любом случае будет долго. хотя если у вас таблица небольшая то норм. но тогда и на питоне можно сделать там это две строчки:)
  • https://t.me/clickhouse_ru
    таблица - несколько млрд. записей, так, что никакого питона )))
  • https://t.me/clickhouse_ru
    спасибо, думаю, что сделаю так
  • https://t.me/clickhouse_ru
    Так, я от тебя, похоже, не отстану...
    Пытаюсь создать инкреметный индекс через окошки:
    SELECT *, rank() over (partition by user_id order by time).

    Но, слишком много памяти это требует. Может есть что-то более эффективное???
  • Я правильно понимаю, что и без EXPLAIN этот запрос валит сервер по этой же причине? То есть в момент разбора и составления плана запроса не хватает памяти, а КХ в это время не проверяет доступность памяти, что и приводит к неожиданному переполнению памяти и падению сервера?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253073 #253088 06:09 AM, 13 Jan 2022
    вчера обсуждалось подобное - собираете в массивы через groupArray, а затем развертываете назад через arrayJoin. В промежутке (пока есть массивы) отделяете от нужного массива 10 элементов через arraySlice, а затем их складываете через arraySum.
  • https://t.me/clickhouse_ru
    @Vsevolod_Korol #253089 06:14 AM, 13 Jan 2022
    Привет, продублирую вопрос:
    Подскажите про работу ZooKeeper в ReplicatedMergeTree для дедублицирования данных + replicated_deduplication_window

    1) У меня есть несколько шардов и я хочу понять если я буду пихать один и тот же батч в разные шарды ZooKeeper отловит это или нет.
    Нашел в доке
    Для очень больших кластеров, можно использовать разные кластеры ZooKeeper для разных шардов. Впрочем, на кластере Яндекс.Метрики (примерно 300 серверов) такой необходимости не возникает.

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

    2) У меня ZooKeeper единый на кластер - будет ли у него количество хранимых хешей для дедубликации блоков единым для всех таблиц в кластере или оно там различное?
    Иначе говоря, настройка replicated_deduplication_window (кол-во сообщений которые хранятся в ZooKeeper) - она на что настраивается - на реплику/на шард/кластер/на таблицу?
    Репликация данных | Документация ClickHouse

    Репликация данных Репликация поддерживается только для таблиц семейства MergeTree: ReplicatedMergeTree ReplicatedSumming

  • @aabezverkhikh #253090 06:15 AM, 13 Jan 2022
    Добрый день! Сложилась ситуация, что во всей базе удаление данных по TTL стало запаздывать.
    По запросу
    select * from system.replication_queue q
    where q.merge_type = 'TTL_DELETE'
    order by q.is_currently_executing desc
    выдается ~200 строк. Причем с is_currently_executing = 1 одна запись. У остальных в postpone_reason
    Not executing log entry queue-0003835649 for part all_2469539_2960622_36 because 2 merges with TTL already executing, maximum 2.
    Подскажите, с чего начать в данной ситуации? Можно как-то посмотреть статистику выполнения мерджей по TTL?
    Судя по create_time из system.replication_queue некоторые мерджи выполняются около суток.
    Что можно сделать, чтоб merge по TTL выполнялся быстрее?
  • @infisamk #253091 06:25 AM, 13 Jan 2022
    У меня вопрос размером с небольшую статью :)

    Есть таблица примерно со 100 полями. Нужно получить одним запросом агрегированные значения по одним и тем же полям, но с различными условиями (срезами). Вроде это все можно получить через -If к агрегатным функциям, но проблема в том, что часть строк может исключаться из выборок в зависимости от других строк по полю reference. То есть есть записи, содержащие ссылку на идентификатор строки. И эти записи должны влиять на "срезы", в которых участвуют строки с такими идентификаторами.
    Получается, что нельзя применить оконные функции и нельзя просто через -If отобрать нужные строки для агрегации. Поэтому я через WITH добавил нужные "срезы" и там же в WITH я в отдельных выражения провожу агрегацию с сохранением в скаляр, который в свою очередь уже в конце подставляется в обычный SELECT.
    В результирующем SELECT должна быть одна строка с 30+ полями. Соответственно в WITH у меня несколько выражений - это подготовка "срезов", и по одному выражению для вычисления значения поля по нужному "срезу".
    При попытке выполнить запрос даже на пустой таблице сервер валится. Попробовал сделать EXPLAIN запроса - то же самое. Выяснилось, что при парсинге запроса и составления плана выполнения КХ не хватает памяти, и он валит сервер.
    Понятно, что на боевом сервере памяти будет несколько больше, и тогда, наверное, запрос может быть выполнен. Но возникает вопрос, а правильно ли я решаю эту задачу через WITH? Может быть есть способы лучше?

    Таблица примерно такая:
    CREATE TABLE stock (
    id UInt64,
    dd DateTime,
    val1 Int64,
    val2 Int64,
    val3 Int64,
    val4 Int64,
    val5 Int64,
    type Int8,
    state Int8,
    reference UInt64
    ) ENGINE = MergeTree()
    ORDER BY (dd, id)
    PARTITION BY toYYYYMM(dd);

    Запрос примерно такой:
    with
    '2020-01-01 00:00:00' as beginPeriod,
    '2021-12-31 23:59:59' as endPeriod,
    all_stock as (select * from default.stock where dd between beginPeriod and endPeriod),
    cancels as (select reference as transactionId from all_stock where type = 9),
    full_returned as (
    select id
    from (
    select t.id,
    sum(t.val1 + trc.val1) as val1,
    sum(t.val2 + trc.val2) as val2,
    sum(t.val3 + trc.val3) as val3,
    sum(t.val4 + trc.val4) as val4
    from all_stock as t
    left join (
    select *
    from all_stock
    where type = 7 and id not in (cancels)
    ) as trc on (t.id = trc.reference)
    where trc.reference > 0
    group by id
    ) as ts
    where ts.val1 = 0 and ts.val2 = 0 and ts.val3 = 0 and ts.val4 = 0
    ),
    normal_stock as (
    select *
    from all_stock
    where id not in (cancels) and id not in (full_returned)
    ),
    without_returns as (select * from all_stock where id not in (cancels)),
    (select count() from normal_stock where val5 > 0 and type < 7) as field_3,
    ...
    (select sum(abs(val1)) from full_returned where val5 = 0) as field_30
    select beginPeriod, endPeriod, field_3, ..., field_30;
  • https://t.me/clickhouse_ru
    @1207506950 #253092 06:33 AM, 13 Jan 2022
    sum (case when условие then 1 else 0 end) as field не работает?
  • @infisamk #253093 06:49 AM, 13 Jan 2022
    Я же говорю, проблема в том, что некоторые строки влияют на присутствие/отсутствие других строк в разных выборках. А в агрегирующих функциях невозможно задать условия вне строки, для которой применяется агрегирующая функция. Или я чего-то не знаю...
  • @aabezverkhikh #253094 06:50 AM, 13 Jan 2022
    Я думаю, тут не хватает упрощенного примера с данными и необходимым результатом.
  • https://t.me/clickhouse_ru
    👍
  • https://t.me/clickhouse_ru
    не очень понятно, что значит вне строки...нужен доп join другой таблицы?
  • @infisamk #253097 06:55 AM, 13 Jan 2022
    Вот же пример:
    full_returned as (
    select id
    from (
    select t.id,
    sum(t.val1 + trc.val1) as val1,
    sum(t.val2 + trc.val2) as val2,
    sum(t.val3 + trc.val3) as val3,
    sum(t.val4 + trc.val4) as val4
    from all_stock as t
    left join (
    select *
    from all_stock
    where type = 7 and id not in (cancels)
    ) as trc on (t.id = trc.reference)
    where trc.reference > 0
    group by id
    ) as ts
    where ts.val1 = 0 and ts.val2 = 0 and ts.val3 = 0 and ts.val4 = 0
    ),
  • @aabezverkhikh #253098 06:56 AM, 13 Jan 2022
    Тут два ключевых слова, упрощенный и данные)
  • @infisamk #253099 06:56 AM, 13 Jan 2022
    То есть есть частичный или полный возврат по ранее произведенной операции. Если возврат полный, то позицию требуется исключить.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253099 #253100 06:58 AM, 13 Jan 2022
    ничего не понятно. Вам уже пару раз дали хороший совет про "упрощенный" и "дайте данные". Наверное вам стоит задать вопрос на stackoverflow по их стандартам качества вопросов. В чатике очень трудно решать столь непростые вопросы.
  • https://t.me/clickhouse_ru
    по мне так не нужно ничего исключать, а наоборот нужно добавить все что нужно для конечного расчета и на уровне if это все делать...все ваши условия прописывать в конкретный агрегат
  • https://t.me/clickhouse_ru
    десять разных логинов не ограничить
    один юзер с множеством коннектов ограничить можно
    ну судя по документации по крайней мере
  • @infisamk #253103 07:02 AM, 13 Jan 2022
    Например, есть такие данные:

    | id | dd | val1 | type | reference |
    | — | — | —— | —— | ————- |
    | 1 | 2021-12-30 12:34:52 | 1000 | 4 | 0 |
    | 2 | 2021-12-30 12:35:12 | -500 | 7 | 1 |
    | 3 | 2021-12-30 12:36:11 | 500 | 9 | 2 |
    | 4 | 2021-12-30 12:37:20 | 1000 | 7 | 1 |

    1 строка содержит начисление. 2 строка производит частичный возврат этого начисления. 3 строка отменяет этот частичный возврат. 4 строка производит полный возврат.

    В какое-то поле отчета сумма по строке 1 должна попасть, а в какое-то поле сумма по строке 1 не должна попасть, так как по ней был совершен полный возврат. При этом нужно учитывать, что возвраты могут отменяться.
  • https://t.me/clickhouse_ru
    пропишите данные флаги - должна не должа и используйте их при расчетах агрегатов
  • Я не могу задним числом менять строки. То есть данные только добавляются.
  • https://t.me/clickhouse_ru
    по данному пример опишите выход...по мне так менять задним числом не нужно ничего, а нужно рассчитать флаг = учитывать или не учитывать значение
  • https://t.me/clickhouse_ru
    @1207506950 #253107 07:09 AM, 13 Jan 2022
    | id | dd | val1 | type | reference | flag|
    | — | — | —— | —— | ————- |
    | 1 | 2021-12-30 12:34:52 | 1000 | 4 | 0 | 0|
    | 2 | 2021-12-30 12:35:12 | -500 | 7 | 1 | 1 |
    | 3 | 2021-12-30 12:36:11 | 500 | 9 | 2 | 0|
    | 4 | 2021-12-30 12:37:20 | 1000 | 7 | 1 | 0| для примера
  • @infisamk #253108 07:10 AM, 13 Jan 2022
    Результат должен быть примерно такой:
    | beginPeriod | endPeriod | sum_all | sum_with_returns |
    | —————-- | ————— | ——— | ———- |
    | 2021-12-30 00:00:00| 2021-12-31 23:59:59 | 1000 | 0 |
  • Но в момент вставки записи еще не известно, будут ли возвраты. То есть флаг нельзя рассчитать заранее. Более того, возврат может быть вне периода отчета, тогда он не должен учитываться, например.
  • https://t.me/clickhouse_ru
    flag можно рассчитать всегда, вопрос сложности алгоритма и его реализации и возможно алгоритм в вашем случае может через вызовы отдельных процедур/функций
  • @infisamk #253111 07:16 AM, 13 Jan 2022
    Так вся сложность как раз в этом. То есть нужно в момент выполнения запроса учитывать период, и исходя из него учитываются возвраты и отмены для расчета тех или иных агрегирующих значений. Заранее просчитать и сделать, например, материализованную таблицу нельзя, так как период отчета может быть произвольным.
  • @infisamk #253112 07:17 AM, 13 Jan 2022
    Если бы отчет строился только с учетом возвратов, то также это не было бы проблемой, так как можно было одной выборкой обойтись. Но в разных полях отчета должны учитываться или не учитываться возвраты, отмены, полные возвраты и так далее.
  • https://t.me/clickhouse_ru
    вам поставили невыполнимую задачу? все решаемо в большинстве случае, в вашем не понятно как получено 1000, какая из строк взята...доп. построения решают все проблемы
  • @infisamk #253114 07:19 AM, 13 Jan 2022
    В общем сама суть - в поле reference, которое ссылается на предыдущие строки. Это без JOIN невозможно обработать, как я думаю.
  • Так я и построил все с помощью WITH. Вопрос в том, насколько это допустимо?
  • https://t.me/clickhouse_ru
    @1207506950 #253116 07:19 AM, 13 Jan 2022
    советую в взять кусок данных и в excel построить алгоритм расчета :)
  • https://t.me/clickhouse_ru
    работает, сервак не падает? посмотрите нагрузку...время и тд...если задача решена и никого не должно особо парить как...будет время поищите оптимальное решение :)
  • Я даже не знаю, сможет ли EXCEL без дополнительных функций решить это. Есть подозрение, что не получится. Просто потому, что разные строки между собой должны коррелировать различным способом в результате.
  • https://t.me/clickhouse_ru
    sumIf(val1, type = 4) as sum_all
    sum(If(type = 7, abs(val1) * -1, val1)) as sum_with_returns
  • https://t.me/clickhouse_ru
    @m1khal3v #253120 07:22 AM, 13 Jan 2022
    или я что-то упускаю?
  • Некоторые строки должны исключаться другими строками с типом 7. И, нужно проверять, был бы полный возврат или частичный. Если полный возврат, то, к примеру, для count() это должно исключаться. В общем, если для sum еще можно собрать выражение, то для count уже так не получится сделать.
  • https://t.me/clickhouse_ru
    @m1khal3v #253123 07:26 AM, 13 Jan 2022
    почему? sum(If(type = 7, 1, -1)) as count ну или в эту сторону подумать
  • @infisamk #253124 07:26 AM, 13 Jan 2022
    Этот возврат, по которому будет производиться проверка, может быть позже отменен. То есть внутри строки это проверить невозможно.
  • https://t.me/clickhouse_ru
    @m1khal3v #253125 07:27 AM, 13 Jan 2022
    если он был отменен то опять +1
  • https://t.me/clickhouse_ru
    @m1khal3v #253126 07:27 AM, 13 Jan 2022
    multiIf
  • https://t.me/clickhouse_ru
    @m1khal3v #253127 07:27 AM, 13 Jan 2022
    не обязательно count countом считать)
  • https://t.me/clickhouse_ru
    это уже не важно, In Fis - вам нужно детализировать свой алгоритм и рассчитать все флаги, отдельно которые вам нужны для итогового расчете...
  • https://t.me/clickhouse_ru
    @solard #253129 07:28 AM, 13 Jan 2022
    Народ а подскажите что произойдет если я пытаюсь записать в кластер (3 шарды 3 реплики) если отьехал 1 шард а реплика у шарда осталась
  • https://t.me/clickhouse_ru
    @solard #253130 07:29 AM, 13 Jan 2022
    Наример:

    [v] Shard-0 -> Replica-0 [v]
    [v] Shard-1 -> Replica-1 [v]
    [v] Shard-2 -> Replica-2 [X]
  • https://t.me/clickhouse_ru
    если я правильно понял то флаги рассчитываются динамически основываясь на временном отрезке
  • https://t.me/clickhouse_ru
    @solard #253132 07:29 AM, 13 Jan 2022
    Replica 2 умерла скажем
  • https://t.me/clickhouse_ru
    это сути дела не меняет, используйте переменные :)
  • Условия работает только в пределах одной строки. Для учета первоначальной строки начисления нужно проверить, были ли произведены возвраты на полную сумму (с учетом отмен), или частично. То есть возвратов может быть несколько, и каждый из них не дает информации по оставшейся сумме - только в совокупности.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253134 #253135 07:49 AM, 13 Jan 2022
    В поставленной формулировке задача требует рекурсивного обхода. В КХ рекурсии почти нет (есть словарь). Обычно в таких ситуациях делают колонку типа transaction_id, которая есть во всех строках начислений и возвратов. По ней можно сгруппировать и посчитать что хотелось. Так что подумайте над изменением схемы хранения, или можно развлечься со иерархическим словарем, если выборка данных для анализа не сумашедшего размера, а памяти в сервере достаточно.
  • https://t.me/clickhouse_ru
    Да, что то вроде этого
  • reference - это по сути и есть transaction_id. Но Просто бывает такая цепочка:
    начисление (id) -> возврат (reference на id начисления) -> отмена возврата -> (reference на id возврата)

    Можно, конечно, добавить еще одно поле для хранения ссылки именно на id начисления, которое будет присутствовать во всех записях, затрагивающих данное начисление (включая отмены возвратов). Это упростит "сборку" результата для оценки необходимости включения или исключения записи с начислением. Но я не понимаю, как это избавит от рекурсии? Если только использовать оконные функции для группировки. И то, не факт, что это решит все проблемы.

    В общем вся сложность в том, что последующие данные могут влиять на критерии включения/исключения предыдущих записей.
  • @infisamk #253139 07:59 AM, 13 Jan 2022
    "Так что подумайте над изменением схемы хранения, или можно развлечься со иерархическим словарем, если выборка данных для анализа не сумашедшего размера, а памяти в сервере достаточно."

    Могут быть миллионы записей за день. А выборка может быть за квартал, например.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253138 #253140 07:59 AM, 13 Jan 2022
    если у вас будет колонка с id изначального начисления во всех строках (тот самый transaction id), то по нему будет обычный group by. Дальше через if и массивы вы сделаете что угодно.
  • Хм.. А можете дать какой-нибудь пример, как потом с этим можно будет работать через массивы?
  • А какой TTL у вас прописан? Возможно вы не указали ttl_only_drop_parts настройку в таблице?
  • В смысле какой? Прописано типа так: TTL ts + toIntervalDay(14)
    Сейчас посмотрел, ttl_only_drop_parts действительно не на всех таблицах стоит. Попробую проставить. Есть еще какие-нибудь рекомендации?
  • https://t.me/clickhouse_ru
    @nebotov_dmitry #253146 08:21 AM, 13 Jan 2022
    добрый день! Вопрос про SELECT WHERE IN в postgresql.

    Где будет выполнятся условие IN если запрос будет вида: select ... from ... where field IN (select ... from remote_pg_table)?

    Может быть я и сам отвечу, поправьте пожалуйста: сначала под запрос отработает в pg, вернется результат и внутри КХ уже сработает IN.
  • https://t.me/clickhouse_ru
    😂
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253141 #253148 08:21 AM, 13 Jan 2022
    да вроде все очевидно - select sumIf(value,type in [1,2,3]), sumIf(value,type in [4,5,6]) from t1 group by transaction; или я не понял вашего вопроса.
  • ну а как иначе? подзапрос же не видит то, что происходит снаружи
  • https://t.me/clickhouse_ru
    можете использовать cte
  • https://t.me/clickhouse_ru
    @bvt123 #253151 08:29 AM, 13 Jan 2022
    история с k-means завершилась статьей на хабре. спасибо @unamedrus за помощь!
    https://habr.com/ru/post/645291/
    k-means in Clickhouse

    Алгоритм k-means хорошо известен и применяется когда надо быстро разделить массив данных на группы или т.н. "кластеры". Предполагается, что каждый элемент данных имеет набор численных метрик, и мы...

  • @demetranadya #253152 08:30 AM, 13 Jan 2022
    Zkeeper настраивается только для для реплицируемых таблиц? У меня сейчас таблицы MergeTree
  • @demetranadya #253153 08:31 AM, 13 Jan 2022
    Вообще мне нужно настроить резервное копирование данных. С чего начать?
  • https://t.me/clickhouse_ru
    Можете резервировать партиции
  • @1349292690 #253155 08:33 AM, 13 Jan 2022
    Добрый день.
    Вчера выполнил ALTER TABLE MODIFY TTL на таблицах с движком ReplicatedMergeTree, но только на некоторых шардах, т.к. были таймауты, решил не продолжать дальше.

    Уже второй день, на одной ноде сетка на получение в 100%, место на диске заканчиваетя, в мутациях нет незавершеных, а на диске несколько временных директорий приличных размеров типа
    /var/lib/clickhouse/data/stats_s10/events_raw/tmp-fetch_202111_0_486497_355_486845

    Подскажите пожалуйста, как понять чем занята нода и как это остановить? Рестарт не помогает
  • Допустим, я добавлю поле transactionId во все записи:

    | id | dd | val1 | type | reference | transactionId |
    | — | — | —— | —— | ————_- | ——————-|
    | 1 | 2021-12-30 12:34:52 | 1000 | 4 | 0 | 1 |
    | 2 | 2021-12-30 12:35:12 | -500 | 7 | 1 | 1 |
    | 3 | 2021-12-30 12:36:11 | 500 | 9 | 2 | 1 |
    | 4 | 2021-12-30 12:37:20 | -1000 | 7 | 1 | 1 |
    | 5 | 2021-12-30 13:23:12 | 2000 | 4 | 0 | 5 |
    | 6 | 2021-12-30 13:24:23 | -500 | 7 | 5 | 5 |

    Как можно посчитать начисления (type = 4), которые не были отменены (type = 9) или полностью возвращены (type = 7), просто все начисления, которые не отменены, а также начисления, которые были полностью возвращены?

    Поле count_with_returns должно содержать количество 1, исходя из того, что подходит id: 5.
    Поле count_without_returns должно содержать количество 2, исходя из того, что подходят id: 1, 5.
    Поле count_full_returns должно содержать содержать количество 1, исходя из того, что подходит id: 1.
    То есть в отчете должно быть что-то такое:

    | beginPeriod | endPeriod | count_with_returns | count_without_returns | count_full_returns |
    | —————-- | ————— | —————————- | ——————————-- | ————————-- |
    | 2021-12-30 00:00:00 | 2021-12-31 23:59:59 | 1 | 2 | 1 |
  • @214612813 #253158 08:40 AM, 13 Jan 2022
    Всех приветсвтую, напомните пожалуйста можно ли выполнить на кластере INSERT INTO local_dest SELECT * FROM local_source? Чтобы каждый шард локально это выполнил?
  • то есть с какой то периодичностью раз в неделю допустим создавать бэкап. Где взять данные с момента бекапа до проблемы?
  • https://t.me/clickhouse_ru
    Ну так всё зависит от партиционирования таблиц
  • @demetranadya #253162 08:43 AM, 13 Jan 2022
    engine = MergeTree PARTITION BY toYYYYMM(date)
  • @demetranadya #253163 08:43 AM, 13 Jan 2022
    партиции по дате настроены
  • @demetranadya #253164 08:43 AM, 13 Jan 2022
    структура небольшая, клики и показы хранятся
  • https://t.me/clickhouse_ru
    Делаете бэкап, всех патриций,партиция последнего месяца может изменяться, предыдущих не будет
  • https://t.me/clickhouse_ru
    │ parallel_distributed_insert_select │ 0 │ 0 │ Process distributed INSERT SELECT query in the same cluster on local tables on every shard, if 1 SELECT is executed on each shard, if 2 SELECT and INSERT is executed on each shard │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ UInt64 │
  • @demetranadya #253167 08:45 AM, 13 Jan 2022
    какие еще проблемы могут возникнуть, например задвоение записей может быть?
  • Спасибо, Дмитрий.
  • @demetranadya #253169 08:47 AM, 13 Jan 2022
    какую обработку ошибок делают обычно, если, например перестанет писаться статистика, а бэкапы продолжатся делаться
  • Ещё маленькое уточнение, достаточно ли выставить настройку на инициаторе запроса?
  • https://t.me/clickhouse_ru
    Да, должно быть достаточно. передастся как сессионная.
  • Thanks
  • https://t.me/clickhouse_ru
    @desio05 #253174 08:51 AM, 13 Jan 2022
    Привет
    А есть возможность скачать clickhouse-client для apple silicon?
    ссылка не работает https://builds.clickhouse.com/master/macos-aarch64/clickhouse
    да и вообще для мака вот тут не работает https://clickhouse.com/docs/en/getting-started/install/
    Installation | ClickHouse Documentation

    Installation System Requirements ClickHouse can run on any Linux, FreeBSD, or Mac OS X with x86_64, AArch64, or PowerPC6

  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253174 #253175 08:52 AM, 13 Jan 2022
    На гитхабе забери
  • https://t.me/clickhouse_ru
    GitHub - Altinity/homebrew-clickhouse: ClickHouse Homebrew tap (by Altinity)

    ClickHouse Homebrew tap (by Altinity). Contribute to Altinity/homebrew-clickhouse development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    @solard #253177 08:52 AM, 13 Jan 2022
    21.8 на силиконе есть уже
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253176 #253178 08:52 AM, 13 Jan 2022
    ++
  • https://t.me/clickhouse_ru
    @desio05 #253179 08:53 AM, 13 Jan 2022
    огонь, спасибо
  • https://t.me/clickhouse_ru
    Я думал об этом, но, вопрос вот в чем, который у меня часто возникает. Я в select делаю группировку, в данном случае по (user_id, time). Как мне запихнуть в groupArray не текущие (user_id, time) а все? Как потом отфильтровать?
  • https://t.me/clickhouse_ru
    спасибо, уже разобрался. просто через sed 1,1d $filename, убрал заголовок и формат сделал CSV
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253180 #253182 09:03 AM, 13 Jan 2022
    не делать группировку по time, или делать отдельно во вложенном запросе
    select user_id, groupArray(time), arrayConcat(groupArray(v)) from (select user_id,time,groupArray(v) v from table group by user_id,time) group by user_id
  • https://t.me/clickhouse_ru
    спасибо, буду разбираться
  • @ilyas_pro #253185 10:04 AM, 13 Jan 2022
    Подскажите, хочу перетащить таблицу replicatedMergeTree из одной бд в другую
    zoopath и replicaid поменять не выйдет, судя по доке
    а у меня там зашито имя БД
    А взлетит ли такой вариант

    Создать новую реплику, там завести обе БД
    Там же рядом создать matview из старой таблицы в новую
    Включить эту реплику в состав кластера, чтобы на ней репликация налила первую таблицу
    А вторая таблица нальётся с помощью matview
    Когда репликация догонится, дропнуть matview и начать писать в новую таблицу

    Или есть какой-то другой путь?
  • Переименовываете среплицировавшуюся таблицу на новой машине (не на кластере!), потом через alter table move partition переносите данные из неё в новую.
  • @oix555 #253188 10:38 AM, 13 Jan 2022
    @tron_wai завели issue по проблеме Ldap AD,владелец @mike_kopev
  • @oix555 #253189 10:38 AM, 13 Jan 2022
    User_dn_detection does not work for role mapping in AD · Issue #33589 · ClickHouse/ClickHouse

    My test stand Clickhouse 21.12.2.17 Active Directory LDS: company.com User_DN CN=ldap user,CN=users,CN=test,DC=company,DC=com Role mapping group CN=clickhouse_role1,CN=groups,CN=test,DC=company,DC=...

  • Из ZK надо будет удалить эту новую реплику, конечно.
  • https://t.me/clickhouse_ru
    > а у меня там зашито имя БД

    В каком виде? в новых версиях кх это имя материализует в просто строку, так что можете переносить между базами. (ну ZK путь будет старый, ну и что)

    Какая версия?
  • @ilyas_pro #253192 10:40 AM, 13 Jan 2022
    Версия древняя 19.17.5.18
  • https://t.me/clickhouse_ru
    Ок, ну я бы предложил

    Сделать DETACH TABLE xxx
    заменить макрос с названием базы данных на само название базы данных в .sql скрипте таблицы
    Сделать ATTACH TABLE xxx;
    а потом уже сделать RENAME TABLE
  • @ilyas_pro #253194 10:44 AM, 13 Jan 2022
    У меня как раз явно прописано название, не макрос, вот так:
    '/clickhouse/replication/stat.cluster{cluster}/shard{shard}/dbName/tableName',
  • https://t.me/clickhouse_ru
    А, ну так тогда в чем проблема?

    Ну и пусть останется старая база в ZooKeeper
  • https://t.me/clickhouse_ru
    👍🏻
  • https://t.me/clickhouse_ru
    @dmitriynvkv #253197 11:00 AM, 13 Jan 2022
    Всем привет, а CH уже поддерживает вторичные индексы?
  • https://t.me/clickhouse_ru
    @MakeReady #253198 11:04 AM, 13 Jan 2022
    Интересная штука. Изменил представление. Добавил в него тримы в том числе в условиях. Стало дико тормозить. Убил. Попытался пересоздать без них … долго думает и вылетает. Так много попыток. В итоге сделал представление под другим именем. Все ок и быстро. Переименовал. Все ок
  • @shamilmardanzade #253200 11:17 AM, 13 Jan 2022
    Привет всем

    Host [clickhouse] returned error: Code: 202, e.displayText() = DB::Exception: Too many simultaneous queries. Maximum: 100 (version 21.4.5.46 (official build))

    Можете детально объяснить ошибку ? И возможные решения без увеличения максимального числа одновременных запросов
  • https://t.me/clickhouse_ru
    @nightsone #253201 11:18 AM, 13 Jan 2022
    всем привет! сори за глупый вопрос
    пытаюсь прокинуть данные в КХ с яндекс.метрики с помощью logs api. беру скрипт отсюда (https://github.com/yndx-metrika/logs_api_integration), там в конфиге ставлю свой токен, айпишник и.т.п., запускаю и ловлю ошибку:

    requests.exceptions.ConnectionError: HTTPConnectionPool(host='*', port=*): Max retries exceeded with url: / (Ca
    used by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000029B1D2CF9A0>: Failed to establish a new connec
    tion: [WinError 10061]

    в чем может быть проблема?
  • https://t.me/clickhouse_ru
    @RecycleSup #253202 11:40 AM, 13 Jan 2022
    Коллеги, вопрос по ReplacingMergeTree - если у нас ключ дедубликации одинаковый, то остается последняя вставленная строка?
  • @BBRSOFF #253203 11:43 AM, 13 Jan 2022
    @bvt123, спасибо большое за помощь, задача решена)
  • Самая последняя строка из самой последней вставки
    Дедупликация происходит во время слияния
  • https://t.me/clickhouse_ru
    @rwxrxrx #253205 11:45 AM, 13 Jan 2022
    Какая самая минимальная конфигурация для кластера, zero-downtime, fault tolerance?

    - 3 сервера, CH+ZK на каждом. при падении любого сервера - кластер переходит в режим READ_ONLY.

    - 5 серверов, 2 CH + 3 ZK. при падении любого ZK - кластер переходит в режим READ_ONLY.

    Получается что минимум 5 ZK серверов в ансамбле и минимум 2 CH? Или есть варианты?
  • @beebeeep #253206 11:49 AM, 13 Jan 2022
    кластер из 3 нод зк же должен переживать падение одного - кворум-то остается
  • https://t.me/clickhouse_ru
    @rwxrxrx #253207 12:12 PM, 13 Jan 2022
    не переживает, проверено, оставшиеся два не могут договориться о лидере
  • @beebeeep #253208 12:16 PM, 13 Jan 2022
    это очень странно
    (я, конечно, не знаю как у зк выборы устроены, но в таких системах как правило 3-1 работает)
  • https://t.me/clickhouse_ru
    @sibbarb #253209 12:21 PM, 13 Jan 2022
    Всем привет. В БД как-то коряво записываются некоторые данные и при группировке по показателю возникает вот такое)
    первое от второго отличается тем, что в одном из них в конце есть пробел ('x','x ') то есть вот такой кейс.
    Подскажите плиз как избавиться от таких дублей.
    Есть ли в КХ функция что то вроде: left(x,бери то, что до пробела первого)
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    Спасибо
  • https://t.me/clickhouse_ru
    @KrozeRoll #253214 12:43 PM, 13 Jan 2022
    Добрый день!
    https://yql.yandex-team.ru/Operations/YeAQBlZ1OyS7_JgfDWF6bSngihMdsDYNH4qwvXPht8M=
    У меня есть запрос, где я делаю join двух таблиц с данными из AppMetrica, но получаю ошибку, хотя по отдельности обращения к этим таблицам работают без проблем. Можете подсказать, в чём проблема?
  • это не внутренний чат яндекса, нам недоступны ваши ссылки
    Скорее всего правая таблица очень большая и запрос падает по памяти, пересмотрите запрос
  • https://t.me/clickhouse_ru
    Я сова :) сова страгией занимается. А Есом серьёзно то хз, я думал что в кх инкреметный индекс из коробки можно сделать
  • trimBoth(x)
  • @stalkerSteel #253218 12:51 PM, 13 Jan 2022
    Всем привет! Народ подскажите пожалуйста!
    Использую clickhouse с плагином для работы с RabbitMQ. Исходя из документации можно в конфигах прописать только 1 пару Логин/Пароль/V-хост для подключения к серверу. т.е. для подключения к другому серверу я должен поднимать отдельный инстанс кликхауса?
  • @supersurfer #253222 03:23 PM, 13 Jan 2022
    проблема: после переезда на новое железо (более мощное) скорость инсёрта в некоторые таблицы упала примерно раз в 10. из-за чего это может быть и на какие моменты обратить внимание в первую очередь. таблицы весят по 80 ГБ и в них примерно по 4-5 млрд строк. партиционирование по 3 параметрам и в ней около 30000 parts. в соседней схеме есть таблицы с 45000 parts и скорость инсёрта не изменилась
  • https://t.me/clickhouse_ru
    @grantovovich #253224 03:25 PM, 13 Jan 2022
    Подскажите пожалуйста, как в конфиге для заведения ldap сервера передавать пароль для технической учетки (не пользователя) в секции bind, чтобы потом аутентифицировать пользователя AD user_name?
  • https://t.me/clickhouse_ru
    30000 и 45000 партов совсем-совсем не manageable.

    У вас сколько партиций?
  • https://t.me/clickhouse_ru
    @unamedrus #253226 03:32 PM, 13 Jan 2022
    Таблица меньше 80 ГБ может вообще не иметь партиций.
  • https://t.me/clickhouse_ru
    80гб в сжатом или в разжатом виде?
  • https://t.me/clickhouse_ru
    Сжатом
  • @beebeeep #253229 03:46 PM, 13 Jan 2022
    Это эмпирическое значение или оно чем-то обусловлено внутри кх?
  • https://t.me/clickhouse_ru
    Кх не будет мержить парты если размер после мержа будет > 100 гб
  • @softbot_xxl #253231 04:29 PM, 13 Jan 2022
    Это ведь в настройках прописано?
  • @softbot_xxl #253232 04:29 PM, 13 Jan 2022
    Максимальный размер парта.
  • @fdeh75 #253234 05:10 PM, 13 Jan 2022
    Всем привет!
    У меня ошибка появляется при выполнении запроса описанного в примерах.
    SELECT number AS a FROM numbers(10) WHERE a > ALL (SELECT number FROM numbers(3, 3));

    <Error> executeQuery: Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 66 ('numbers'): numbers(3, 3));. Expected one of: DoubleColon, LIKE, GLOBAL NOT IN, end of query, AS, DIV, IS, UUID, OR, QuestionMark, BETWEEN, NOT LIKE, MOD, AND, Comma, alias, IN, ILIKE, Dot, NOT ILIKE, NOT, token, NOT IN, GLOBAL IN (version 21.8.12.29 (official build)) (from [::ffff: MY_IP :p ]:38904) (in query: SELECT number AS a FROM numbers(10) WHERE a > ALL (SELECT * FROM numbers(3, 3));), Stack trace (when copying this message, always include the lines below):

    0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0x8fe3e9a in /usr/lib/debug/.build-id/89/cb735eabd0b424df213861e4d0fd666e2a0cf1.debug
    1. DB::parseQueryAndMovePosition(DB::IParser&, char const*&, char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, unsigned long, unsigned long) @ 0x11571c88 in /usr/lib/debug/.build-id/89/cb735eabd0b424df213861e4d0fd666e2a0cf1.debug
    2. DB::executeQueryImpl(char const*, char const*, std::__1::shared_ptr<DB::Context>, bool, DB::QueryProcessingStage::Enum, bool, DB::ReadBuffer*) @ 0x107a414a in /usr/lib/debug/.build-id/89/cb735eabd0b424df213861e4d0fd666e2a0cf1.debug
    3. DB::executeQuery(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<DB::Context>, bool, DB::QueryProcessingStage::Enum, bool) @ 0x107a3d23 in /usr/lib/debug/.build-id/89/cb735eabd0b424df213861e4d0fd666e2a0cf1.debug
    4. DB::TCPHandler::runImpl() @ 0x1104343e in /usr/lib/debug/.build-id/89/cb735eabd0b424df213861e4d0fd666e2a0cf1.debug
    5. DB::TCPHandler::run() @ 0x110563d9 in /usr/lib/debug/.build-id/89/cb735eabd0b424df213861e4d0fd666e2a0cf1.debug
    6. Poco::Net::TCPServerConnection::start() @ 0x13bce56f in /usr/lib/debug/.build-id/89/cb735eabd0b424df213861e4d0fd666e2a0cf1.debug
    7. Poco::Net::TCPServerDispatcher::run() @ 0x13bcfffa in /usr/lib/debug/.build-id/89/cb735eabd0b424df213861e4d0fd666e2a0cf1.debug
    8. Poco::PooledThread::run() @ 0x13d02279 in /usr/lib/debug/.build-id/89/cb735eabd0b424df213861e4d0fd666e2a0cf1.debug
    9. Poco::ThreadImpl::runnableEntry(void*) @ 0x13cfe50a in /usr/lib/debug/.build-id/89/cb735eabd0b424df213861e4d0fd666e2a0cf1.debug
    10. start_thread @ 0x76db in /lib/x86_64-linux-gnu/libpthread-2.27.so
    11. clone @ 0x12171f in /lib/x86_64-linux-gnu/libc-2.27.so
  • @fdeh75 #253235 05:13 PM, 13 Jan 2022
    пытаюсь по проекциям собрать ключи по которым отсортирована таблица чтобы отдать все столбцы и where column_name in (select ....) не оптимизируется проекциями, хотя where column_name = 'value_1' or column_name = 'value_2' or column_name = 'value_3' оптимизируется. Решил почитать доку и потенциальное решение (a = ALL (subquery) ) не работает.
  • этот синтаксис в 21.9 появился
  • @fdeh75 ↶ Reply to #253236 #253237 05:24 PM, 13 Jan 2022
    спасибо, на 21.9.2 revision 54449 работает.

    а по поводу оптимизаций через проекции подобных запросов: where column_name in (select ....) трюки есть?
  • я потестил на 21.8, словил сегфолт в базе 2 раза и больше не трогал их)
  • @fdeh75 ↶ Reply to #253238 #253239 05:30 PM, 13 Jan 2022
    Понял, спасибо)
  • https://t.me/clickhouse_ru
    @artemy_kravtsov #253240 05:31 PM, 13 Jan 2022
    привет! пытаюсь создать функцию по примеру из доков:
    "CREATE OR REPLACE FUNCTION linear_equation AS (x, k, b) -> k*x + b;",

    получаю ошибку "Syntax error: failed at position 19 ('FUNCTION'):"
    что может быть не так?
  • ваша версия Кликхауса?
  • https://t.me/clickhouse_ru
    21.9.4.35
  • udf прям из свежего, 21.11 вроде
  • https://t.me/clickhouse_ru
    Спасибо 💐
  • https://t.me/clickhouse_ru
    @Nikolai1973 #253247 06:49 PM, 13 Jan 2022
    привет!
  • @infisamk #253248 07:40 PM, 13 Jan 2022
    Случайно в clickhouse-client для выхода написал русскими символами quit, что получилось, как йгше. Вышел корректно из клиента. Хм... Решил повторить то же самое, но для exit (учше). Также вышел корректно. Подумал, что, возможно, на любую русскую абракадару так реагирует, но нет. Только на две этих команды. В общем, теперь буду знать, что где-то в глубине он, таки, остается русским :)
  • можно «й» просто писать)
  • @infisamk #253250 07:42 PM, 13 Jan 2022
    Ну смысл тот же. Краткая команда выхода, как q.
  • https://t.me/clickhouse_ru
    кх и на q и на й реагирует
  • https://t.me/clickhouse_ru
    Мало кто знает, но ещё можно писать ЫЕДУСЕ вместо SELECT и ЦРУКУ вместо WHERE :)
  • Если команды выхода - это понятно, то зачем то же самое для языка SQL оставили?...
  • https://t.me/clickhouse_ru
    Это шутка была. Впрочем, я не проверял... :)
  • @infisamk #253255 08:36 PM, 13 Jan 2022
    😜
  • https://t.me/clickhouse_ru
    @yourock88 #253256 08:36 PM, 13 Jan 2022
    Не удивлюсь, если разработчики читают этот чат и в следующей версии добавят
  • https://t.me/clickhouse_ru
    Ну вот, а я уже пошел проверять такую новую для меня фичу...
  • Главное в конце нажать клавишу «ЗАБОЙ»
  • https://t.me/clickhouse_ru
    @floyd_rose #253259 11:49 PM, 13 Jan 2022
    ЫУДУСЕ тфьу, ыгь(фьщгте) фы фьщгте АКЩЬ аштфтсу ЦРУКУ скуфеу_феЮ=э2021-12-01э ПКЩГЗ ИН тфьу
    (c) Ащьф ЛШТШФУМ
  • https://t.me/clickhouse_ru
    в телеграм боте для кликхауса такое работает
  • 14 January 2022 (154 messages)
  • https://t.me/clickhouse_ru
    Да поддерживает но работают они не так как b-tree

    Это data skip indexes
    Если вам это о чём нибудь говорит

    https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/#available-types-of-indices
    MergeTree | ClickHouse Documentation

    MergeTree The MergeTree engine and other engines of this family (*MergeTree) are the most robust ClickHouse table engine

  • https://t.me/clickhouse_ru
    Ошибка ровно то что написано

    Поскольку каждая query может читать/писать дофига данных
    То общее кол-во запущенных одновременно ограничено сверху

    Смотрите system.processes

    Анализируйте system.query_log
    По written_rows read_rows и memory

    Переписывайте запросы
  • ЗАБЕЙ
  • https://t.me/clickhouse_ru
    @lockkie #253264 07:59 AM, 14 Jan 2022
    Привет. Подскажите, как посмотреть список пользовательских функций, созданных через create function?
  • @beebeeep #253265 08:01 AM, 14 Jan 2022
    > Привет. Подскажите, как посмотреть список пользовательских функций, созданных через create function?
    select * from system.functions where origin != 'System'
  • https://t.me/clickhouse_ru
    спасибо!
  • https://t.me/clickhouse_ru
    @egor_mandragor #253267 08:29 AM, 14 Jan 2022
    Привет! Вот какой вопрос.
    Создаем таблицу ReplicatedMergeTree on cluster.
    Потом на одном инстансе дропаем табличку, без on cluster.
    При этом на нем остается папка с датой таблицы в store/
    И не дает создать ее заново.
    Вроде бы как эта папка со временем пропадает, но хотелось бы узнать, зачем это так происходит? Может быть мы не правильно как-то конфигурим клик?

    Этот кейс всплыл в рамках работы над бекапером
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253267 #253268 08:30 AM, 14 Jan 2022
    Если вы про clickhouse-backup то там бага которую пофиксить должны при ресторе таблиц RMT с приставкой ON CLUSTER возникает ошибка DuplicatedUUID:

    https://github.com/AlexAkulov/clickhouse-backup/issues/145
    add support to restore table ON CLUSTER · Issue #145 · AlexAkulov/clickhouse-backup

    If we create table, for example CREATE TABLE recipes ON CLUSTER '{cluster}' ( title String, ingredients Array(String), directions Array(String), link String, source LowCardinality(S...

  • https://t.me/clickhouse_ru
    @solard #253269 08:31 AM, 14 Jan 2022
    Мы ее очень ждем прям очень очень
  • https://t.me/clickhouse_ru
    это Atomic движок, store с соответсвующим UUID будет
    делайте
    DROP TABLE ... SYNC
    для Atomic
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253270 #253271 08:32 AM, 14 Jan 2022
    Ну и это да ++
  • https://t.me/clickhouse_ru
    нет =) я думаю что тут свои какие то велосипеды =)
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253272 #253273 08:33 AM, 14 Jan 2022
    Когда релиз будет уже - любезный?) Дайте жизни нам смертным)
  • https://t.me/clickhouse_ru
    https://github.com/AlexAkulov/clickhouse-backup/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.3.0

    трекайте
    Осталось пара довольно увесистых issue
    экспериментирую

    на этой неделе отвлекался постоянно на всякое =(
    Issues · AlexAkulov/clickhouse-backup

    Tool for easy ClickHouse backup and restore with cloud storages support - Issues · AlexAkulov/clickhouse-backup

  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253274 #253275 08:37 AM, 14 Jan 2022
    ❤️
  • https://t.me/clickhouse_ru
    @egor_mandragor #253276 08:50 AM, 14 Jan 2022
    Да, за основу взят этот самый бекапер, ресторим мы просто поэтапно, на каждом инстансе сначала только метадату, потом на одном только дату и дальше она реплицируется через зукипер.

    Вроде бы схема пока рабочая.
    Но есть вот пару таких скользких кейсов.
  • https://t.me/clickhouse_ru
    Чето я запутался, я думал движок на таблицах ReplicatedMergeTree?
  • прошу прощения за поздний ответ:
    в данных табличках
    партиции парты строки
    26 352 29 628 4 779 505 145
    18 210 19 936 4 068 401 349

    поможет ли optimize table в данном случае?
    в 2 других таблицах количество партиций и партов больше раза в 2, но строк меньше 1 млрд, там скорость записи приемлемая, хоть и осталась на прежнем уровне до переезда
  • https://t.me/clickhouse_ru
    Нет, слишком много
  • https://t.me/clickhouse_ru
    @unamedrus #253280 08:55 AM, 14 Jan 2022
    Перенесите partition key на первую позицию order by и у вам запросы ускорятся, те не нужно будет лазить по десяткам тысяч разнвэ партиций
  • спасибо, попробуем
  • https://t.me/clickhouse_ru
    Понятно, Atomic это движок баз.
    Окей, спасибо!
    Ждём нового релиза!
  • @Enjoyq #253283 09:39 AM, 14 Jan 2022
    Всем привет, а есть возможность как-то реплецировать не только таблицы из public схемы через MaterializedPostgreSQL DB?
  • @Enjoyq #253284 09:39 AM, 14 Jan 2022
    а из всех схем
  • https://t.me/clickhouse_ru
    Указать схему, не ?
  • @Enjoyq #253287 09:54 AM, 14 Jan 2022
    а если у меня 100к схем?
  • https://t.me/clickhouse_ru
    @ARyndin #253288 10:06 AM, 14 Jan 2022
    Всем привет. После обновления с 21.3 LTS на 21.8 LTS попытка чтения таблицы из MySQL по ODBC стала периодически обрываться с ошибкой localhost:9000. DB::Exception: Attempt to read after eof: While executing ODBC.
    Коннектор ODBC используем mysql-connector-odbc 5.2.5-8
    ODBC выдаёт вот такую ошибку при чтении некоторый сложных unicode-символов
    HTTP status code: 500 Internal Server Error, body: std::exception. Code: 1001, type: std::range_error, e.what() = wstring_convert: to_bytes error,
  • @fanymagnet #253289 10:18 AM, 14 Jan 2022
    Привет, подскажите как через драйвер для golang просто выполнить инсерт без prepare/transaction begin/commit. Надо просто сделать

    INSERT INTO data FORMAT TSV <data in TSV format>

    Но при вызове db.Exec(<SQL query>) выдается ошибка insert statement supported only in the batch mode (use begin/commit).
    На драйвере от мейлру такой ошибки нет.
  • @865226418 #253290 10:37 AM, 14 Jan 2022
    Вопрос - кому-то получалось запустить UDF с форматом <format>JSONEachRow</format>
  • @865226418 #253291 10:38 AM, 14 Jan 2022
    вылатает с ошибкой
  • @865226418 #253292 10:39 AM, 14 Jan 2022
    ``` ``` Code: 117. DB::Exception: Received from localhost:9000. DB::Exception: Unknown field found while parsing JSONEachRow format: now(): (at row 1)
    : While executing JSONEachRowRowInputFormat: While executing ShellCommandSource
  • @865226418 #253293 10:39 AM, 14 Jan 2022
    хотя output вот такой: {"now()":"2022-01-14 11:25:10"}
  • https://t.me/clickhouse_ru
    Привет. Все решилось очень просто... через окошки )))

    select user_id, time, sum(value) over (partition by user_id order by time rows between 9 preceding and current row)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253294 #253295 11:11 AM, 14 Jan 2022
    это решение сразу приходит на ум, но вы хотели какие-то "10 последних", не сильно поясняя что под этим понимается. Если так как выше вам подходит, то OK. Но по мне это 10 предыдущих для каждой строки.
  • https://t.me/clickhouse_ru
    оу... да... мой косяк )))
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253296 #253297 11:18 AM, 14 Jan 2022
    но если вам так близки WF, то можете и на них - groupArray работает и для них тоже:
    select number, arraySum(ss) from
    (select number, groupArray(5)(number) over (partition by id) as ss
    from (select number, number%10 as id from numbers(1000) order by number desc)
    order by number);
  • https://t.me/clickhouse_ru
    вообще не близки )))
  • https://t.me/clickhouse_ru
    Atomic - это движок базы данных
    https://clickhouse.com/docs/en/engines/database-engines/
    Introduction | ClickHouse Documentation

    Database Engines Database engines allow you to work with tables. By default, ClickHouse uses database engine Atomic. It

  • https://t.me/clickhouse_ru
    Спасибо, я разобрался 👍🏻
  • https://t.me/clickhouse_ru
    @ARyndin #253302 11:53 AM, 14 Jan 2022
    Ещё одна деградация, после обновления с 21.3 до 21.8 — теперь почему-то фейлит обращение к движку HDFS с использованием имени сервиса вместо адреса хоста:
    CREATE TABLE _hdfs_engine_table (name String, value UInt32) ENGINE=HDFS('hdfs://hacluster/clickhouse_test.txt', 'CSV');
    Received exception from server (version 21.8.13):
    Code: 36. DB::Exception: Received from localhost:9000. DB::Exception: Bad hdfs url: hdfs://hacluster/clickhouse_test.txt. It should have structure 'hdfs://<host_name>:<port>/<path>'.
  • https://t.me/clickhouse_ru
    @fiksilya #253303 11:57 AM, 14 Jan 2022
    Товарищи, подскажите, как полностью удалить clickhouse? вместе c базами. Ubuntu
  • https://t.me/clickhouse_ru
    имя порта не задано о чем сказано четко какой формат у урла должен быть
  • https://t.me/clickhouse_ru
    очевиднейшим образом это ошибка, появившаяся в 21.8. Url в hdfs может быть в формате hdfs://<servicename>/path
    ошибку уже нашёл и отрепортил, коммит, который её добавил отловлен
  • https://t.me/clickhouse_ru
    а можно ссылку на issue?
  • https://t.me/clickhouse_ru
    @ARyndin #253308 01:11 PM, 14 Jan 2022
    можно
  • https://t.me/clickhouse_ru
    DB::Exception: Bad hdfs url error when creating HDFS table or using hdfs engine with servicename instead of hostname:port. · Issue #33627 · ClickHouse/ClickHouse

    There is a degradation in transition from 21.3LTS to 21.8LTS in HDFS engine. As you may know and as the Documentation states (https://clickhouse.com/docs/en/engines/table-engines/integrations/hdfs/...

  • https://t.me/clickhouse_ru
    @mib32 #253310 01:14 PM, 14 Jan 2022
    можно как-то позырить очередь асинх мутаций? хотя бы размер
  • https://t.me/clickhouse_ru
    @easya #253311 01:16 PM, 14 Jan 2022
  • https://t.me/clickhouse_ru
    SELECT * FROM system.mutations WHERE is_done=0;
  • https://t.me/clickhouse_ru
    @mib32 #253313 01:17 PM, 14 Jan 2022
    пасибо
  • https://t.me/clickhouse_ru
    @mib32 #253314 01:19 PM, 14 Jan 2022
    почему они могли застрять? и что можно сделать
  • https://t.me/clickhouse_ru
    Бесконечное число причин
    Надо смотреть на отдельные проблемы

    https://kb.altinity.com/altinity-kb-queries-and-syntax/altinity-kb-alter-modify-column-is-stuck-the-column-is-inaccessible/
  • https://t.me/clickhouse_ru
    @mib32 #253316 01:22 PM, 14 Jan 2022
    там даже fail_time и fail reason нет - они просто застряли и не делаются, делиты
  • https://t.me/clickhouse_ru
    @Aleksey_Veselov #253318 01:44 PM, 14 Jan 2022
    всем привет!) подскажите плз, в связи с чем может возникать ошибка при инсерте большого кол-ва данных. Ошибка происходит где то в момент, когда записано уже 18гб

    DB::Exception: Received from clickhouse-2.services:9100. DB::Exception: Timeout exceeded while writing to socket (192.168.128.139:54364)
  • @792294332 #253319 01:58 PM, 14 Jan 2022
    Добры день
    Подскажите
    есть таблица
    дата:Значение в моменте
    12 - 10
    13 - 0
    14 - 5
    15 - 7

    График должен выводить
    12 - 10
    13 - 10
    14 - 15
    15 - 22

    То есть каждое значение должно содержать сумму предыдущих

    Возможно выполнить средствами CH?
  • https://t.me/clickhouse_ru
    Other | ClickHouse Documentation

    Other Functions hostName() Returns a string with the name of the host that this function was performed on. For distribut

  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253319 #253321 02:19 PM, 14 Jan 2022
    Лучше такое делать на windowfunctions. runningaccumulate не всегда дает правильный результат. читать тут:
    https://kb.altinity.com/altinity-kb-queries-and-syntax/cumulative-unique/
    там примеры с uniq, а не sum, но это не принципиально
  • https://t.me/clickhouse_ru
    Да, с такой же проблемой столкнулся
  • Да, нашёл спасибо, так и решил
  • @beebeeep #253325 03:16 PM, 14 Jan 2022
    а тут есть авторы clickhouse-go? я что-то в issues не могу найти ничего релевантного, у меня вот какой вопрос по поводу использования clickhouse.Clickhouse клиента (который OpenDirect() возвращает)

    метод WriteBlock(block) для блока разрушающий - после того как его один раз записали, он все свои буфера сбрасывает и повторно его нельзя использовать, хотя это, на самом деле, было бы полезным - например, если кх вернул ошибку, попытаться записать тот же блок в другой шард, или же наоборот, записать один и тот же блок в большинство членов одного шарда чтобы как-никак гарантировать exactly once

    Я глубоко пока не лазил, но мне интересно - там какая-то принципиальная проблема или это просто эффект от использования bytes.Buffer под капотом блока? Обсуждался уже такой вопрос?

    А иначе получается так, что если приложенька сидит на каком стриме и пишет его батчами в кх, то получаем двойную буферизацию - сначала надо набрать со стрима данных, и потом из них уже блок сделать, а было бы удобно сразу из стрима класть в блок и потом спокойно его переиспользовать если потребуется (запись в кх не удалась или хочется в несколько кх слать).
  • https://t.me/clickhouse_ru
    select [10, 0, 5, 7] ar, arrayCumSum(ar)
  • https://t.me/clickhouse_ru
    не помню такого обсуждения
    Основной Мантейнер сейчас активно пишет v2

    https://github.com/ClickHouse/clickhouse-go/pull/452

    можно создать issue в github и потегать его, может быть ответит

    еще можно посмотреть альтернативные реализации
    https://github.com/vahid-sohrabloo/chconn
    и
    https://github.com/go-faster/ch
    [WIP!] v2 MVP by kshvakov · Pull Request #452 · ClickHouse/clickhouse-go

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

  • https://t.me/clickhouse_ru
    @solard #253328 04:01 PM, 14 Jan 2022
    Народ а подскажите что будет если из кластера вылетит 1 шард но останется его реплика?
  • https://t.me/clickhouse_ru
    @solard #253329 04:01 PM, 14 Jan 2022
    Я же не смогу инсерты в таблички выполнять или все таки смогу?
  • сможете, мастер-мастер репликация, можно в любую реплику писать данные
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253330 #253331 04:02 PM, 14 Jan 2022
    У меня просто интересная ситуация у меня 3 шарда и у каждого по 1 реплике
  • https://t.me/clickhouse_ru
    @solard #253332 04:03 PM, 14 Jan 2022
    я отключаю 1 шард и у меня инсерты начинают просто зависать на попытке создать например таблицу на отключенном шарде
  • а как вы создаёте и на каком сервере пытаетесь выполнить?
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253333 #253334 04:05 PM, 14 Jan 2022
    CREATE TABLE ... ON CLUSTER test ...
  • https://t.me/clickhouse_ru
    @solard #253335 04:13 PM, 14 Jan 2022
    С чем может быть связана такая проблема куда смотреть?
  • https://t.me/clickhouse_ru
    @solard #253336 04:13 PM, 14 Jan 2022
    Может таймеры отлупа от мертвых нод покрутить?
  • https://t.me/clickhouse_ru
    "инсерты начинают зависать на попытке создать таблицу"

    шиза =)

    инсерты отдельно
    создание таблиц отдельно

    CREATE TABLE ON CLUSTER это НЕ INSERT
    он ставит DDL в ZK и ждет пока все реплики его выполнят
    если реплика 180 секунд не выполняет, он отваливается

    таблица создается одна и таже?
    или каждый раз разная?
  • https://t.me/clickhouse_ru
    https://clickhouse.com/docs/en/operations/settings/settings/#distributed_ddl_task_timeout

    но сначала разберитесь. нужен ли вам вообще CREATE TABLE перед каждым INSERT
    Settings | ClickHouse Documentation

    Settings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when

  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253338 #253339 04:36 PM, 14 Jan 2022
    Да вообще нет но вот как проверить insert в случае отказа одной шарды?
  • on cluster ddl по таймауту ждёт когда создастся таблица, вставка данных немного по другому работает)
  • https://t.me/clickhouse_ru
    @solard #253341 04:36 PM, 14 Jan 2022
    Просто он же инсертит по хешу и случайно реплику выбирает насколько я помню
  • https://t.me/clickhouse_ru
    какой такой "одной шарды", вы вставтляете в какую таблицу в Engine=Distributed или в Engine=ReplicatedMergeTree?
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253342 #253343 04:37 PM, 14 Jan 2022
    Distributed
  • если через distributed выберет живую реплику
  • https://t.me/clickhouse_ru
    он первую живую в шарде выбирает
  • https://t.me/clickhouse_ru
    @solard #253346 04:37 PM, 14 Jan 2022
    В нее и вставляю
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253345 #253347 04:37 PM, 14 Jan 2022
    Агааааа
  • https://t.me/clickhouse_ru
    @solard #253348 04:37 PM, 14 Jan 2022
    Блин
  • https://t.me/clickhouse_ru
    @solard #253349 04:37 PM, 14 Jan 2022
    Тут просто вопрос
  • https://t.me/clickhouse_ru
    @solard #253350 04:37 PM, 14 Jan 2022
    а как вставить конкретно в эту реплику у которой умер шард
  • https://t.me/clickhouse_ru
    @solard #253351 04:37 PM, 14 Jan 2022
    Я просто не понимаю как мне протестировать отказ 1 реплики)
  • https://t.me/clickhouse_ru
    Еще раз спасибо! Я начинающий кликхаусовод, поэтому не сразу понимаю, сорри.
    Мне не просто суммирование требуется (показал так для простоты), нужно вычисление с использованеим текущего агрегата, и результирующего:

    0.02*user_value + (1-0.02)*if(isNotNull(old), old, 0) as user_value

    user_value - это текущий (по aggrgate)
    old - это последний вычисленный из result.

    Я схему реальную сделел, если интересно можно тут посмотреть https://gist.github.com/andrey-mishenkin/fd055a472a5e21ad691170f971a0c67d
    На локальном mac на 100M вставок, показало 500k записей в секунду... Навероное это мало... Но пока не представляю как по другому можно такое реализовать.
    My first ClickHouse experience

    My first ClickHouse experience. GitHub Gist: instantly share code, notes, and snippets.

  • вставить и сделать селект)
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253353 #253354 04:38 PM, 14 Jan 2022
    если я вставляю в distributed таблицу он же случайно выберет шард нет?
  • https://t.me/clickhouse_ru
    если быть точным, оно вообще сначала никуда не вставляет, а генерирует .bin в каталоге на ноде куда INSERT пришле с именем destination replica
    и после этого пытается сделать push это .bin на целевую реплику

    как только нода отваливается, оно ждет

    мониторьте кол-во временных файлов в distributed

    из этих файлов при SELECT тоже чтение идет... но не такое эффективное
  • у вас какой ключ шардирования?
  • https://t.me/clickhouse_ru
    остаток результата SHARDING KEY выражения поделенное на кол-во шардов
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253357 #253359 04:40 PM, 14 Jan 2022
    У нас там хеш некоторых значений
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253355 #253360 04:41 PM, 14 Jan 2022
    Понял
  • https://t.me/clickhouse_ru
    ну если значения "близкие с рандому", то в целом будет равномерно по шардам растекаться
    потому что остаток от деления на кол-во шардов в <remote_servers> для заданного кластера будет всегда разным
  • https://t.me/clickhouse_ru
    @solard #253362 04:41 PM, 14 Jan 2022
    Уже намного понятнее стало
  • ну условно у вас рандомный ключ, вставка у вас будет на все 3 шарда, вы читаете данные через distributed таблицу со всех шардов и проверяете что результат совпадает со вставкой
  • https://t.me/clickhouse_ru
    @solard #253364 04:41 PM, 14 Jan 2022
    Протестирую в понедельник
  • https://t.me/clickhouse_ru
    @solard #253365 04:42 PM, 14 Jan 2022
    Спасибо вам) Хороших выходных
  • https://t.me/clickhouse_ru
    @rclick ↶ Reply to #252342 #253366 04:47 PM, 14 Jan 2022
    Если вдруг кому интересно - подняли 30 шардов по 2 реплики, на пяти нодах был включен clickhouse-keeper. Настройки дефолтовые, ничего не тюнил. Вставки шли катастрофически медленно, часть процессов вставки прерывались. В общем боль и печаль, глубже погружаться не стал - отключил кхкипер, поставил 3 ноды зукипера и все заработало надежно и быстро. Видимо что то я в конфигах не выставил, но времени глубоко копать небыло - выбран простейший из путей.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253352 #253367 04:57 PM, 14 Jan 2022
    > 0.02*user_value + (1-0.02)*if(isNotNull(old), old, 0) as user_value
    вы тут случайно не проценты считаете? Может вас спасет какая-то вариация формулы сложного процента, и ничего суммировать не придется? Можно счетчик сделать, а потом его испльзовать как степень.
    Читать во время инсерта старые данные - плохая затея. Надо что-то накапливать в таблицах, а в финальном select/group by посчитать все что вам нужно, оперируя только накопленными данными.
  • https://t.me/clickhouse_ru
    Не это не %, это Exponential Moving Evegare (EMA)... понимаю что плохая затея... но тогда надо иметь какой-то запрос запускающийся переодически -
    и делающий вычисления...
  • https://t.me/clickhouse_ru
    CREATE MATERIALIZED VIEW IF NOT EXISTS user_value.user_value_mv
    TO user_value.user_value AS
    SELECT gamer_id,
    game_id,
    geo,
    sum(spend) as spend_sum,
    sum(revenue) as revenue_sum,
    sum(requests) as requests_sum,
    (spend_sum - revenue_sum) / requests_sum AS user_value_agg,
    if(isNotNull(user_value_prev_temp), user_value_prev_temp, 0) as user_value_prev,
    user_value_agg * 0.0206 + (1 - 0.0206) * user_value_prev as user_value
    FROM user_value.aggregate JOIN (SELECT * FROM user_value.user_value WHERE (gamer_id, game_id, geo) IN(SELECT gamer_id, game_id, geo FROM aggregate))
    GROUP BY (gamer_id, game_id, geo, time_bucket)
    ORDER BY (gamer_id, game_id, geo, time_bucket);

    Делайте так
  • https://t.me/clickhouse_ru
    @unamedrus #253371 05:27 PM, 14 Jan 2022
    Через JOIN

    (gamer_id, game_id, geo) IN(SELECT gamer_id, game_id, geo FROM aggregate)

    Нужно что бы выбрать из user_value таблицы только те строки. что нам нужны для джойна этого БЛОКА вставки (1 млн строк)

    тк (SELECT gamer_id, game_id, geo FROM aggregate) вернет не саму таблицу aggregate, а блок вставки
  • https://t.me/clickhouse_ru
    @unamedrus #253372 05:29 PM, 14 Jan 2022
    Вообще мы сделали в новых версиях 4 EWM* функции для оконок и они довольно быстрые, мб вам подойдут.
  • https://t.me/clickhouse_ru
    Спасибо Дмитрий! попробовал - только не нравится ему такое

    CREATE MATERIALIZED VIEW IF NOT EXISTS user_value.user_value_mv
    TO user_value.user_value AS
    SELECT gamer_id,
    game_id,
    geo,
    sum(spend) as spend_sum,
    sum(revenue) as revenue_sum,
    sum(requests) as requests_sum,
    (spend_sum - revenue_sum) / requests_sum AS user_value_agg,
    if(isNotNull(user_value.user_value), user_value.user_value, 0) as user_value_prev,
    user_value_agg * 0.0206 + (1 - 0.0206) * user_value_prev as user_value
    FROM user_value.aggregate JOIN (SELECT * FROM user_value.user_value WHERE (gamer_id, game_id, geo) IN(SELECT gamer_id, game_id, geo FROM user_value.aggregate))
    GROUP BY (gamer_id, game_id, geo, time_bucket)
    ORDER BY (gamer_id, game_id, geo, time_bucket);

    Syntax error: failed at position 820 ('GROUP') (line 13, col 1)
  • https://t.me/clickhouse_ru
    Я дал идею :)

    там нужно добавить алиас для подзапроса и ON условие еще

    Плюс подзапрос такой должен быть
    SELECT * FROM user_value.user_value FINAL WHERE (gamer_id, game_id, geo) IN(SELECT gamer_id, game_id, geo FROM user_value.aggregate)

    Что бы брать последнюю запись
  • https://t.me/clickhouse_ru
    Спасибо за идею! Буду пробовать (пока это все жля меня новое)
  • https://t.me/clickhouse_ru
    @Satanklaus88 #253377 06:14 PM, 14 Jan 2022
    Привет, подскажите умеет ли клика как-то элегантно генерить бустрап выборки из исходной?
  • https://t.me/clickhouse_ru
    @sokolov_v #253378 06:25 PM, 14 Jan 2022
    Здравствуйте, нужен ваш совет, у нас есть довольно объемная greenplum таблица, хотелось бы данные из неё перелить в clickhouse , но insert select падает на лимите по памяти, буду благодарен если подскажите способ подобного перелива?
  • https://t.me/clickhouse_ru
    Переливайте по партициями. или дробите еще меньше
  • https://t.me/clickhouse_ru
    что такое "bootstrap" выборка?
    не очень понятно что под этим подразумевается?
    какой то ML термин?
  • https://t.me/clickhouse_ru
    Ага думал об этом варианте, но думал есть что-то удачней, спасибо
  • https://t.me/clickhouse_ru
    Падает у вас скорее всего где то в гринпламе (кх не использует много памяти для вставки)

    Если гринплам умеет в stream данных в пайп можно вообще попробоватЬ

    gp_program —query "SELECT * FROM table" | clickhouse-client "INSERT INTO xxxx FORMAT TSV"
  • https://t.me/clickhouse_ru
    это сэмплирование с возвращением, к мл напрямую не относится. Скорее к дс в части проверки гипотез
  • https://t.me/clickhouse_ru
    Не именно clickhouse падает,
  • https://t.me/clickhouse_ru
    @sokolov_v #253385 06:34 PM, 14 Jan 2022
    У нас тестовый стенд не очень много ресурсов там
  • https://t.me/clickhouse_ru
    используете postgresql функцию?
  • https://t.me/clickhouse_ru
    Я использовал внешнюю таблицу постгреса и вставлял данные в таблицу clickhouse
  • https://t.me/clickhouse_ru
    @unamedrus #253388 06:36 PM, 14 Jan 2022
    Ну и 1 гб это какое то издевательство над кх.

    Его вообще дизайнили под систему с минимум 16 гб.

    Кх собирает 1 млн строк в памяти и потом дампит готовый блок на диск, это основное на что тратит память кх при вставке
  • https://t.me/clickhouse_ru
    Я бы попробовал через пайп если честно, у меня есть некоторые сомнения в производительности postgresql функций.
  • https://t.me/clickhouse_ru
    @unamedrus #253390 06:38 PM, 14 Jan 2022
    Плюс 100к строк в секунду это очень грустно и долго будет
  • https://t.me/clickhouse_ru
    Ок, спасибо, попробуем увеличить ресурсы
  • https://t.me/clickhouse_ru
    https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-data-migration/remote-table-function/#q-can-i-tune-insert-speed-to-make-it-faster

    Можете конечно попробовать покрутить эти настройки, но у вас памяти совсем не много и так.

    │ max_insert_block_size │ 1048545 │ 0 │ The maximum block size for insertion, if we control the creation of blocks for insertion.
  • https://t.me/clickhouse_ru
    У нас 1 гб лимит на один запрос, так мы под тесты выделяли 10 ГБ, так что увеличим лимит на запрос
  • https://t.me/clickhouse_ru
    Может вам не нужен кликхаус если вы 10гб под тесты выделили ...
  • https://t.me/clickhouse_ru
    @orx4n #253395 06:58 PM, 14 Jan 2022
    Здравствуйте коллеги. У меня в кубернетесе стоит 4 шарда . Как сделать чтобы только канкретная таблица реплицировался в каждом шарде ?

    Хочу создать Set таблицу для каждой шардированной таблицы локально
  • https://t.me/clickhouse_ru
    Сделайте больше оперативной памяти и установить на GROUP BY ограничение, чтобы запросы не падали по памяти max_bytes_before_external_group_by
  • https://t.me/clickhouse_ru
    Спасибо за конструктивное замечание, а сколько вы бы рекомендовали выделить памяти на боевой clickhouse? Я просто новичок в этом деле
  • https://t.me/clickhouse_ru
    Зависит от количество данных которые вы планируете использовать
  • https://t.me/clickhouse_ru
    Ну хотя бы минимальное количество. Так будут хранится что-то вроде агрегатов в ch
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #253395 #253401 07:39 PM, 14 Jan 2022
    ?
  • https://t.me/clickhouse_ru
    CH не для агрегатов, я не знаю
  • https://t.me/clickhouse_ru
    А какие тогда варианты использования больше подходят для ch?
  • https://t.me/clickhouse_ru
    И чем плох clickhouse для хранения агрегатов, я честно пока не вижу таких минусов, партицирование удобное, кол-во записей уже ограничено, то есть по сути должен он выбирать из агрегатов достаточно неплохо.
  • https://t.me/clickhouse_ru
    А что есть для агрегатов ? Есть агрегатные функции, но если ты будешь считать uniqExact (точные вычисления) они будут по времени как на данных почти .... Кликхаус это про быстро положить и быстро достать ОЧЕНЬ МНОГО ДАННЫХ
  • https://t.me/clickhouse_ru
    Нет, там будут строчки по разным группировкам значения разных метрик за день, ну если грубо посчитать несколько тысяч строчек за день, уже сосчитанных другой системой и записанных в clickhouse, будет там несколько метрик hll - это самое трудное их возможно за некий период придется мержить
  • https://t.me/clickhouse_ru
    Если у вас grenplum почему не использовать для этого PG ?
  • https://t.me/clickhouse_ru
    Мы пока тестируем гипотезу что выборка из clickhouse агрегатов будет быстрее
  • https://t.me/clickhouse_ru
    @unamedrus #253409 08:09 PM, 14 Jan 2022
    Да в целом есть люди, что кладут в кх готовые витрины и быстро делают по ним агрегации.
  • https://t.me/clickhouse_ru
    @unamedrus #253410 08:09 PM, 14 Jan 2022
    Только это имеет смысл делать, когда в таблице будут сотни миллионов строк
  • https://t.me/clickhouse_ru
    @ra_fa_el_0 #253411 08:22 PM, 14 Jan 2022
    Всем привет, в pandahouse есть функции для создание таблицы в clickhouse ?
  • https://t.me/clickhouse_ru
    Вы можете просто выполнить запрос на создания таблицы
  • https://t.me/clickhouse_ru
    @ra_fa_el_0 #253413 08:25 PM, 14 Jan 2022
    Спасибо, попробуй!
  • https://t.me/clickhouse_ru
    @fiksilya #253415 09:45 PM, 14 Jan 2022
    Товарищи, такой вопрос. Есть локальная папка, в ней есть csv-файлы. Файлы периодически добавляться. Можно ли сделать таблицу, которая бы автоматически считывала файлы из папки?
  • https://t.me/clickhouse_ru
    Можно с движком File. Правда при каждом селекте всё будет читаться и парситься заново.
  • https://t.me/clickhouse_ru
    @nyoroon #253417 09:51 PM, 14 Jan 2022
    File | ClickHouse Documentation

    File Table Engine The File table engine keeps the data in a file in one of the supported file formats (TabSeparated, Nat

  • https://t.me/clickhouse_ru
    @nyoroon #253418 09:51 PM, 14 Jan 2022
    Табличная функция file точно так умеет: https://clickhouse.com/docs/en/sql-reference/table-functions/file/
    file | ClickHouse Documentation

    file Creates a table from a file. This table function is similar to url and hdfs ones. file function can be used in SELE

  • https://t.me/clickhouse_ru
    Да, но, насколько я понимаю, это просто чтение КХ данных из файлов. Т.е. если я хочу всё засунуть в MergeTree, то мне надо что-то типа Live view сделать.
  • https://t.me/clickhouse_ru
    КХ не умеет отслеживать внешние файлы и автоматически вставлять данные из них в таблицу. Можно свой скрипт написать который будет это делать.
  • https://t.me/clickhouse_ru
    Ага, спасибо.
  • https://t.me/clickhouse_ru
    @Maxim21rus #253423 10:43 PM, 14 Jan 2022
    Доброго времени суток, посоветуйте хороший курс или материалы для погружения в тему Кликхауса, с чего начать изучение?
  • https://t.me/clickhouse_ru
    А для чего Вам ClickHouse? Если кратко, то это колоночная СУБД с эффективной параллельной поблочной обработкой и с быстрым GROUP BY, поддерживающим распределенное исполнение. Если хочется что-то конкретное, то всегда есть документация, Хабр, ютьюб...
  • https://t.me/clickhouse_ru
    @Maxim21rus #253425 10:50 PM, 14 Jan 2022
    Для начала разобраться с этой по блочной структурой данных и посчитать рассчетные показатели за большой период времени для их сравнения по годам. Примерно такая задачка для начала
  • 15 January 2022 (69 messages)
  • https://t.me/clickhouse_ru
    @skrainov #253427 05:14 AM, 15 Jan 2022
    Доброе утро! подскажите пожалуйста, у таблицы MergeTree строки физически мержаться (то есть из 2 получается 1 по primary key) или слияние происходит только на уровне системных таблиц, а сами данные в исходной таблице остаются как есть?
  • https://t.me/clickhouse_ru
    семплирование есть
    https://clickhouse.com/docs/en/sql-reference/statements/select/sample/

    что такое "семплирование с возвращением", не очень понимаю
    SAMPLE | ClickHouse Documentation

    SAMPLE Clause The SAMPLE clause allows for approximated SELECT query processing. When data sampling is enabled, the quer

  • https://t.me/clickhouse_ru
    у таблицы MergeTree из 2 строк получится две строки при background merge, всегда

    у таблицы CollapsingMergeTree для одинаковых значений полей из ORDER BY будет "схлопывание" по полю sign
    то есть из двух строк с одинаковым ORDER BY и sign 1 + sign -1 получится 0 строк
    для -1 и -1 или 1 и 1 получится 2 строки

    у таблицы ReplacingMergeTree для одинаковых ORDER BY будет "замена"
    из нескольких строк с одинаковым ORDER BY ,, получится одна, любая

    у таблица AggregatingMergeTree, SummingMergeTree (более простой вариант aggregating) для одинаковых ORDER BY будет "аггрегация"
    из любого кол-во строк с одинаковым ORDER BY ,, получится одна, в которой поля имеющие aggregatingState будут смержены между собой (для summing)

    остальные варианты предлагаю внимательно прочитать в документации
    https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/
    слева там оглавление, по типам движков
    Introduction | ClickHouse Documentation

    MergeTree Engine Family Table engines from the MergeTree family are the core of ClickHouse data storage capabilities. Th

  • https://t.me/clickhouse_ru
    @skrainov #253430 06:18 AM, 15 Jan 2022
    Спасибо большое, все понял!
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253419 #253431 06:44 AM, 15 Jan 2022
    недавно появился движок FileLog - смотрит за файлами в директории и их оффсетами (как кафка). Но он все ещё экспериментальный и недокументированный - ищите на github. Я пробовал полтора месяца назад - откусывал последний символ в строке. Пришлось читать в формате RowBlob и парсить регеспами в SQL. В последней версии вроде как сделали мощный рефакторинг форматов - может и починили.
    create table t ( logrow String) engine = FileLog('..../logs', 'RawBLOB')
    settings max_threads=4;
  • https://t.me/clickhouse_ru
    А верно понимаю, что чистый mergetree ничего не схлопывает и нужен только для быстрого поиска по искомым данным?
  • https://t.me/clickhouse_ru
    Сам не схлопывает
  • https://t.me/clickhouse_ru
    @ivymike_b #253434 07:08 AM, 15 Jan 2022
    optimize deduplicate
  • https://t.me/clickhouse_ru
    @skrainov #253435 07:17 AM, 15 Jan 2022
    А для каких целей применяется mergetree? Просто как данные?
  • https://t.me/clickhouse_ru
    ну да, основной кейс кликхауса - сохранили данные в широкую таблицу + таблицы измерений \ справочники
    и дальше по этому SELECT ... WHERE ... GROUP BY
    быстрый делаем
  • https://t.me/clickhouse_ru
    а почему этого недостаточно?
    да, как промежуточное и финальное хранение данных для последующей выборки и аггрегации
  • https://t.me/clickhouse_ru
    @skrainov #253438 07:24 AM, 15 Jan 2022
    Понял, спасибо большое!
  • https://t.me/clickhouse_ru
    Спасибо
  • > у таблицы ReplacingMergeTree для одинаковых ORDER BY будет "замена"
    из нескольких строк с одинаковым ORDER BY ,, получится одна, любая

    В документации указано, что будет оставлена последняя вставляемая строка, если не используется параметр ver. То есть это не любая, а именно последняя. По сути это может имитировать UPDATE.
  • https://t.me/clickhouse_ru
    Да, извините, забыл, да там последняя, либо сортировка по ver
  • @infisamk #253442 07:55 AM, 15 Jan 2022
    Друзья, подскажите, пожалуйста. Есть широкая таблица с некоторыми данными. Для каждой строки этой таблицы могут быть от 0 до нескольких десятков подчиненных записей в другой таблице. Иногда требуется отобрать записи из широкой таблицы в зависимости от данных одной или нескольких записей в подчиненной таблице. В том же MySQL это делается через JOIN. Но в КХ это, вроде как не приветствуется. Следует ли содержать эти подчиненные записи в отдельном поле в широкой таблице в формате JSON, например? Или есть другие способы решения таких задач?
  • @infisamk #253443 07:56 AM, 15 Jan 2022
    Иными словами, хранить массивы в отдельном поле широкой таблицы и затем их вытаскивать через функции JSON или другие - это нормальная практика?
  • https://t.me/clickhouse_ru
    сколько записей планируется к выборке из основной таблицы в типичном запросе?
  • @infisamk #253445 07:59 AM, 15 Jan 2022
    В зависимости от совпадающих подчиненных записей, это может быть от нескольких штук до десятков миллионов.
  • @infisamk #253446 08:00 AM, 15 Jan 2022
    Но нужна обычно не сама выборка, а агрегация по этой выборке
  • @infisamk #253447 08:00 AM, 15 Jan 2022
    Хотя вот сейчас возникла потребность именно в выборке. Она получится примерно в 1.5 млн записей
  • @infisamk #253448 08:03 AM, 15 Jan 2022
    В основной таблице около 1 млрд записей. В подчиненной около 5 млрд записей. Но данные там постепенно добавляются
  • https://t.me/clickhouse_ru
    я не спрашивал, сколько у вас будет произведение после JOIN
    я спросил сколько у вас в основной таблице за один запрос выбирается строк
  • https://t.me/clickhouse_ru
    то есть я правильно понимаю, что вы хотите выбрать 1.5 миллиона записей
    и джойнить их с 5 миллиардами? =)

    мне просто любопытства ради интересно
    как думаете сколько такой JOIN будет работать?

    вообще не важно в какой БД
  • https://t.me/clickhouse_ru
    если бы речь шла о сотнях тысяч записей

    оно в целом можно было бы делать через

    SELECT .. FROM 5bil_table WHERE id IN (
    SELECT id FROM 1bil_table WHERE ...
    )
    GROUP BY ...

    и это было бы долго потому что пришлось бы все равно сканировать практически все ваши 5 миллиардов, потому что там явно искомые id в каждый парт напиханы... и data skip index через set или bloom filter не поможет...

    но полтора миллиона, я не знаю как такое делать =) может кто другой подскажет
  • @infisamk #253452 08:24 AM, 15 Jan 2022
    Вот то-то и оно. Получается, что меньшее зло - это хранить массив в поле?
  • https://t.me/clickhouse_ru
    если весь массив в момент в ставки в основную таблицу как то известен, то да

    локальность данных и все такое

    правда с большими массивами (тысячи элементов и больше) clickhouse также как и строковые БД работают так себе...
    и выборки из больших массивов с array функциями это тоже не панацей
  • @infisamk #253454 08:26 AM, 15 Jan 2022
    > то есть я правильно понимаю, что вы хотите выбрать 1.5 миллиона записей
    и джойнить их с 5 миллиардами? =)

    мне просто любопытства ради интересно
    как думаете сколько такой JOIN будет работать?

    Тут не всё так плохо. Так как в подчиненной таблице мы по ключу же выбираем записи. То есть там не будет фулскан. Во всяком случае MySQL такое прожует. Но да, запрос не быстрый получается.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253448 #253455 08:27 AM, 15 Jan 2022
    тут вопрос даже не в том, чтобы включать "подчиненную" таблицу в основую, а как вобще фильтровать миллиард записей без индексов за пристойное время. В КХ у вас есть 3 возможности фильтрации:
    - первичный индекс
    - партиции
    - skip index
    Хорошо работает только первый. Если нужно ставить условия по колонкам не в первичном индексе, то единственный вариант - уменьшать количество строк. Через предаггрегацию. Скажем можно хранить не все данные, а только суммы за день, или за час. Не всегда такое возможно - надо смотреть на требумые выборки.
  • Да. Подчиненные записи известны. И в каждой записи основной таблицы могут быть и пустые массивы и массивы с несколькими десятками записей. Но в среднем примерно 5 записей в массиве на 1 запись в широкой таблице.
  • https://t.me/clickhouse_ru
    тогда лучше на этапе вставки такое иметь... но риск того что "условия изменились" и теперь надо срочно все переконвертировать, далеко не нулевой
  • В принципе, так как КХ позволяет хранить одинаковые записи в первичном ключе, то можно ключевое поле задать для обеих таблиц одинаковое. Тогда выборка должна и по JOIN быстро проходить?
  • С этим как раз проблем нет. Там структура не меняется. Если, даже она поменяется, то при хранении в формате JSON это не должно особо влиять, как я понимаю.
  • https://t.me/clickhouse_ru
    ну там есть оптимизации с JOIN алгоритмом, но фиг его знает как сработает
    я давно жду когда кто нибудь JOIN займется, там нетривиальная очень задача сама по себе
  • https://t.me/clickhouse_ru
    извлечение через JSON медленее может быть чем итерация через массив, потестируйте на ваших данных
  • https://t.me/clickhouse_ru
    Во сколько медленнее?
  • Тут возникает такой вопрос. Допустим, мне нужно будет посчитать количество записей в широкой таблице, содержащих в подчиненных некое значение. Если брать две таблицы, это будет примерно так:
    SELECT COUNT()
    FROM master_table
    INNER JOIN slave_table USING (masterId)
    WHERE slave_table.field = 'aaa'
    GROUP BY masterId

    Если подчиненные записи будут храниться в основной таблице, то будет примерно так:
    SELECT COUNT()
    FROM master_table
    WHERE JSON_VALUE(extField, '$[*].field') = 'aaa'

    Что из них будет быстрее или медленнее? Какой запрос потребует больше расхода памяти?
  • @infisamk #253464 08:45 AM, 15 Jan 2022
    А. Ошибся в первом запросе. Там еще нужно сгруппировать, иначе COUNT может дать бОльшее значение, если будет несколько подчиненных записей для одной основной.
  • @infisamk #253465 08:46 AM, 15 Jan 2022
    Получается, что лучше хранить в поле, чем джойнить. Но я не уверен, что функции JSON достаточно быстрые...
  • https://t.me/clickhouse_ru
    могут быть быстрее, могут быть медленее, от данных зависит
    там JSONSIMD парсер оптимизированный, он быстрый достаточно, но разложенные массивы все таки легче парсить
  • @infisamk #253467 09:09 AM, 15 Jan 2022
    Кстати, а ведь можно использовать поле с типом Nested для хранения подчиненных данных? Это ведь будет быстрее, чем хранение структуры JSON в текстовом поле?
  • @infisamk #253468 09:11 AM, 15 Jan 2022
    Подразумевается, что вложенная структура будет постоянна, а меняется лишь количество записей в ней. Но, на всякий случай, а можно ли затем поменять эту структуру через ALTER TABLE?
  • @infisamk #253469 09:11 AM, 15 Jan 2022
    В документации про ALTER указано только такое: "Работоспособность запроса ALTER для элементов вложенных структур данных, является сильно ограниченной."
  • https://t.me/clickhouse_ru
    Nested это массивы
    имеет ограничение
    должно быть одинаковое кол-во элементов для каждого Nested поля
    думаю не годится для вас

    если у вас просто ключ значение, попробуйте новомодный Map
  • https://t.me/clickhouse_ru
    потому что перепаковать один набор полей в другой набор массивов, весьма не тривиальная задача может быть в общем случае если ее не ограничивать
  • С этого места можно подробнее? У меня заданная структура. То есть количество полей в этой структуре одинаково для всех записей. А вот количество записей в Nested различно.
  • @infisamk #253474 09:50 AM, 15 Jan 2022
    Я смотрел на Map, но оно не позволяет вроде хранить несколько записей, только одну запись. Или я что-то упустил?
  • https://t.me/clickhouse_ru
    @BloodJazMan #253475 09:51 AM, 15 Jan 2022
    имеется ввиду вставке в Nested
    вы не можете вставить в одну запись Nested в котором только 2 поля из 3 заданы например

    вроде бы так
    я давно с nested не работал, года два, может сейчас сделали какой нибудь заполнитель дефолтным для типа значением если поле не указано
  • @infisamk #253476 09:51 AM, 15 Jan 2022
    Из документации я понял, что Nested как раз и является хранилищем нескольких подчиненных записей. В документации - это события в примерах.
  • https://t.me/clickhouse_ru
    да, Nested может "несколько записей" хранить
    и даже будет я думаю самым быстрым вариантом из всех
    но внутри это массивы
    Nested вроде даже в ARRAY JOIN можно использовать (правда не помню точно)
  • С этим проблем нет. Все поля известны заранее. И записи для Nested также уже известны и не требуют добавления позже. То есть в INSERT мы можем писать сразу всё.
  • https://t.me/clickhouse_ru
    тогда должно получиться
  • Да. Для доступа к записям можно использовать ARRAY JOIN
  • @infisamk #253481 09:54 AM, 15 Jan 2022
    Ура! Я, кажется, нашел серебряную пулю! :)
  • @infisamk #253482 09:54 AM, 15 Jan 2022
    Спасибо за помощь!
  • https://t.me/clickhouse_ru
    @iusik #253483 12:07 PM, 15 Jan 2022
    Подскажите, использую MaterializedPostgreSQL, но в самой таблице PG есть поля которые String|NULL.

    Может из-за этого падать CH сервер при репликации из PG в CH.

    Сама ошибка:

    2022.01.15 13:49:32.647859 [ 235 ] {} <Fatal> BaseDaemon: (version 21.12.3.32 (official build), build id: FA4A7F489F3FF6E3) (from thread 117) (no query) Received signal Segmentation fault (11)
    2022.01.15 13:49:32.647912 [ 235 ] {} <Fatal> BaseDaemon: Address: NULL pointer. Access: read. Address not mapped to object.
    2022.01.15 13:49:32.647947 [ 235 ] {} <Fatal> BaseDaemon: Stack trace: 0x12b4d6ef 0x12b4f236 0x12b5335a 0x12b5409d 0x12afae60 0x12b0cdae 0x12b0f747 0x12b107b0 0xa25a3b7 0xa25ddbd 0x7f5f77298609 0x7f5f771bf293
    2022.01.15 13:49:32.648103 [ 235 ] {} <Fatal> BaseDaemon: 2. DB::MaterializedPostgreSQLConsumer::readTupleData(DB::MaterializedPostgreSQLConsumer::Buffer&, char const*, unsigned long&, unsigned long, DB::MaterializedPostgreSQLConsumer::PostgreSQLQuery, bool) @ 0x12b4d6ef in /usr/bin/clickhouse

    Основываясь на данной таблице: https://clickhouse.com/docs/ru/engines/database-engines/postgresql/#data_types-support
    Я понимаю что Nullable может быть только int поля, верно ?
    PostgreSQL | Документация ClickHouse

    PostgreSQL Позволяет подключаться к БД на удаленном сервере PostgreSQL. Поддерживает операции чтения и записи (запросы S

  • https://t.me/clickhouse_ru
    скорее просто что-то кривое в MaterializedPostgreSQL в парсинге WAL

    думаю стоит создать issue на github
    расшарить минимальную структуру таблицы в PostgreSQL и стектрейс полный
  • https://t.me/clickhouse_ru
    @iusik #253485 01:40 PM, 15 Jan 2022
    А как правильно написать запрос для создания Distributed таблице, для того чтобы шардирование работало по UUID?

    Мне это нужно для работы с ReplicatedCollapsingMergeTree
  • https://t.me/clickhouse_ru
    cityHash64(uuid)
  • https://t.me/clickhouse_ru
    @iusik ↶ Reply to #253487 #253488 01:43 PM, 15 Jan 2022
    Спасибо!
  • https://t.me/clickhouse_ru
    @zhiraslan_shedzhem #253489 02:49 PM, 15 Jan 2022
    Всем привет!
    Прошу прощения за нескромный вопрос, но:
    как вывести дату типа DateTime в формате дд/мм/гггг?
    Ничего не помогло (
  • https://t.me/clickhouse_ru
    Читайте доку.
    https://clickhouse.com/docs/ru/sql-reference/functions/date-time-functions/#formatdatetime
    Функции для работы с датами и временем | Документация ClickHouse

    Функции для работы с датами и временем Поддержка часовых поясов Все функции по работе с датой и временем, для которых эт

  • https://t.me/clickhouse_ru
    вот пример использования, прямо щас исопльзовал. буковки из доки выше сами подставите formatDateTime(created_datetime),'%g-%m-%d %R')
  • https://t.me/clickhouse_ru
    Спасибо!
  • https://t.me/clickhouse_ru
    Спасибо😉
  • https://t.me/clickhouse_ru
    @konnectrl #253497 05:58 PM, 15 Jan 2022
    Приветствую, кто-то использует для кликхауса ? https://github.com/great-expectations, если да, то на что она способна для кликхауса и какие минусы
    Great Expectations

    Great Expectations has 4 repositories available. Follow their code on GitHub.

  • https://t.me/clickhouse_ru
    лично я не использовал никогда

    вот тут есть видео
    https://www.youtube.com/watch?v=tZWvJZQ_jDo&t=0s
    [ClickHouse Meetup] Analytic Tools for ClickHouse — SF Bay Area

    Join us for this virtual session on analytic tools for ClickHouse in particular and data warehouses in general. The presentations cover data cleaning and contracts followed by how to build analytic APIs with cube.js. You can ask questions from Youtube. Do note that this is the final version of the live stream (the first 5 mins are removed due to streaming issues). See the meetup invite for more information: https://www.meetup.com/San-Francisco-Bay-Area-ClickHouse-Meetup/events/276499022/ #ClickHouse #AnalyticTools #DataWarehouse #DataCleaning ----------------- Check out more ClickHouse resources here: https://altinity.com/resources/​ Join Reddit community: https://www.reddit.com/r/Clickhouse/​ ----------------- Learn more about Altinity! Site: https://www.altinity.com​ LinkedIn: https://www.linkedin.com/company/alti...​ Twitter: https://twitter.com/AltinityDB

  • https://t.me/clickhouse_ru
    Да,я его нашёл, но он больше рекламный
  • Думаю использовать и не только для кликхауза. Вы планируете для чего использовать? Или с чем сравниваете?
  • 16 January 2022 (41 messages)
  • https://t.me/clickhouse_ru
    @skrainov #253503 04:16 AM, 16 Jan 2022
    Доброе утро! подскажите пожалуйста, таблица ReplacingMergeTree (Слияние происходят в фоне в неизвестный момент времени, на который вы не можете ориентироваться.). Этот фоновый момент как-то можно настроить? Я тестирую на 2 записях и он их не мержит, пока я сам не вызову OPTIMIZE TABLE . я предполагал, что КХ будет в фоне сам мержить?
  • https://t.me/clickhouse_ru
    Когда захочет тогда и смержит, все возможные настройки есть в system.settings с комментариями
  • https://t.me/clickhouse_ru
    @skrainov #253505 06:20 AM, 16 Jan 2022
    спасибо!
  • https://t.me/clickhouse_ru
    Я не пользовался Replacing, а если запустить Select с FINAL, то тоже 2 записи ?
  • https://t.me/clickhouse_ru
    @skrainov #253507 06:23 AM, 16 Jan 2022
    вывод будет 1 запись. то есть я должен у себя в приложении заложить какую-то джобу, которая будет вызывать OPTIMIZE TABLE получается
  • https://t.me/clickhouse_ru
    Select * from table Final, что даёт ?
  • https://t.me/clickhouse_ru
    @skrainov #253509 06:23 AM, 16 Jan 2022
    1 запись
  • https://t.me/clickhouse_ru
    Replacing не даёт гарантию, что не будет дубликатов, он всеголишь убирает дубликаты когда он мержит куски данные, чтобы места меньше занимало, а так писать запросы с Final ( мое мнение, возможно ошибочно). Поищите по чату "дубликация" или что то подобное, помню более понятные объяснение от других людей
  • https://t.me/clickhouse_ru
    @skrainov #253511 06:27 AM, 16 Jan 2022
    ага, спасибо!
  • Не надо так делать
    Пишите запросы так, чтобы они делали нужную вам дедупликацию.

    https://kb.altinity.com/engines/mergetree-table-engine-family/replacingmergetree/

    https://kb.altinity.com/altinity-kb-queries-and-syntax/altinity-kb-final-clause-speed/
  • https://t.me/clickhouse_ru
    Везде в примерах в ручную вызывают optimize. Не пойму это для примера или это бест практис так делать?
  • @111010502 #253514 08:10 AM, 16 Jan 2022
    Для примера
  • @111010502 #253515 08:11 AM, 16 Jan 2022
    У вас в продакшене будет часть данных смержнна, а часть нет. Делайте аггрегационный запрос на выборку (с group by)
  • Да, для полноты примера показано
  • В общем случае лучше иметь какое-то поле, по которому можно будет определить последнее вставленное значение. Это может быть номер версии, дата вставки и так далее. В этом случае можно будет через argMax(val, updated), например, получить последнее вставленное значение. Где val - это поле с нужным значением, а updated - это поле с датой вставки. Как-то так.
  • https://t.me/clickhouse_ru
    @dlimonov #253518 08:24 AM, 16 Jan 2022
    Коллеги, вопрос. Имеется таблица с отдельной политикой хранения, в которой сейчас один том, а в нём один диск. Необходимо добавить второй диск другого размера. Если я правильно понял, то лучше создать отдельный том под этот диск и добавить второй том в политику.
    1. Верно ли я думаю на счёт отдельного тома?
    2. После правки конфига нужно будет перезапустить clickhouse-server?
  • https://t.me/clickhouse_ru
    Вот мой конфиг.

    <yandex>
    <storage_configuration>
    <disks>
    <disk_data_01>
    <path>/mnt/clickhouse-data-01/</path>
    </disk_data_01>
    </disks>
    <policies>
    <policy_rr>
    <volumes>
    <hdd>
    <disk>disk_data_01</disk>
    </hdd>
    </volumes>
    </policy_rr>
    </policies>
    </storage_configuration>
    </yandex>
  • https://t.me/clickhouse_ru
    А кто будет мержить данные, если я сам не вызову optimize?
  • Кликхаус в фоне в какой то момент времени :)
  • https://t.me/clickhouse_ru
    Я не могу ведь делать group by на каждый запрос. Вот есть у меня 2 строчки с одним и тем же primary key и мне надо получить какие-то данные , которые я могу бы получить, будь это одна строка. Но когда я использую group by, то могу только агрегацию по полям (сумма , количество итп).
  • Не примари кей, а ордеринг. Выше вон подсказали функцию argMax которая по полю дополнительному может вам дать последние актуальные данные по вашему апдейту. К примеру при апдейте можете писать аля modified_date столбец
  • https://t.me/clickhouse_ru
    @skrainov #253524 08:37 AM, 16 Jan 2022
    Понял, спасибо!
  • @111010502 #253525 08:37 AM, 16 Jan 2022
    Но, вы не сможете заменить только один столбец)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253522 #253527 11:05 AM, 16 Jan 2022
    Если вы зашли познакомиться с КХ, то вам надо внимательно прочитать раздел про агрегатные функции и их модификаторы. Это сильно расширит ваше представление о допустимом. Тут есть не только "(сумма , количество итп)", и не только уже упомянутый argMax, но ещё и any, groupArray и даже groupBitmapState, и много чего ещё. Где-то тут и зарыта основная магия КХ.
    Фактически вы почти всегда делаете group by, потому как основной кейс - это выбрать 10-100-1000 миллионов строк а потом (или заранее) их аггрегировать. Если же вам массово и часто надо выбирать 1 строку, то стоит задуматься о другой СУБД.
  • https://t.me/clickhouse_ru
    @skrainov #253528 11:06 AM, 16 Jan 2022
    Спасибо большое!
  • 1. Да, нужно добавить диск и потом его в полиси.
    2. Зависит от версии, в последний вроде уже добавлено без рестарта.
  • https://t.me/clickhouse_ru
    Попробую. Спасибо
  • TTL добавить мб нужно ещё
  • https://t.me/clickhouse_ru
    Добавить куда?
  • https://t.me/clickhouse_ru
    @dlimonov #253534 01:24 PM, 16 Jan 2022
    На таблице есть
  • Ну тогда ок
  • @afonchikov #253537 03:07 PM, 16 Jan 2022
    Добрый вечер, есть кто использует формат avro для движка Kafka, при работе с debezium коннектором, получаю невнятную ошибку которую не могу понять
    DB::Exception: avro::Exception: Invalid data file. Magic does not match
    текст ясне, но никуда меня не приводит.

    Буду благодарен любой помощи
  • @111010502 #253538 03:22 PM, 16 Jan 2022
    Schema registry есть?
  • https://t.me/clickhouse_ru
    Написано же магия не совпадает , вы видимо из хогвартса а надо из Средиземья
  • Он для avroconflent типа указывается, судя по доке
  • Ога, у вас возможно там номер схемы в первых рядах сообщения стоит и возможно у вас как раз таки есть schema registry
  • @d3vzer1 #253544 11:47 PM, 16 Jan 2022
    Доброй ночи, парни! Только начал знакомиться с Clickhouse прошу сильно палками не лупасить.
    Пытаюсь поднять схему high availability. Что у меня есть 4 хоста shared + replicated, 2 на чтение, 2 на запись, роутинг при падении одного из хостов хочу отдать на haproxy чтоб от время от времяни он проверял доступность.
    Правильный ли это метод хочу узнать у знатаков, сколько гуглил, такую инфу не нашел. Заранее благодарю
  • https://t.me/clickhouse_ru
    можно во все писать и со всех читать. смысла в отдельных репликах на чтение/запись нет
  • https://t.me/clickhouse_ru
    @nyoroon #253546 11:57 PM, 16 Jan 2022
    а так норм
  • спасибо, а балансировать haproxy я так понял. Но haproxy мониторит tcp траффик. Как быть если отвалится сервис на самом хосте но резолвить по сети он будет.
  • https://t.me/clickhouse_ru
    там хелсчеки вроде можно настроить (в плане слать http запросы)
  • 17 January 2022 (199 messages)
  • @d3vzer1 #253549 12:00 AM, 17 Jan 2022
    Так и думал, но блин не нашел по какому принципу писать хелсчек, инфы крайне мало(
  • https://t.me/clickhouse_ru
    https://clickhouse.com/docs/en/interfaces/http/
    https://clickhouse.com/docs/en/operations/monitoring/#clickhouse-server-metrics
    можно GET /ping или GET /replicas_status
    HTTP Interface | ClickHouse Documentation

    HTTP Interface The HTTP interface lets you use ClickHouse on any platform from any programming language. We use it for w

  • @d3vzer1 #253551 12:03 AM, 17 Jan 2022
    Большое спасибо Иван, пошел читать, всего хорошего Вам 🙂
  • @dimaelsky #253553 01:33 AM, 17 Jan 2022
    Добрый день , я новичок в clickhouse, требуется инструментарий для тестирования производительности / нагрузочного тестирования.
  • https://t.me/clickhouse_ru
    есть clickhouse-benchmark
    https://clickhouse.com/docs/en/operations/utilities/clickhouse-benchmark/
    clickhouse-benchmark | ClickHouse Documentation

    clickhouse-benchmark Connects to a ClickHouse server and repeatedly sends specified queries. Syntax $ clickhouse-benchma

  • @dimaelsky #253555 01:37 AM, 17 Jan 2022
    Еще нужны best practices при развертывании в прод.
  • Благодарю.
  • Насколько я помню на хабре была хорошая статья, а принципы я читал на ya.cloud
  • @d3vzer1 #253558 01:41 AM, 17 Jan 2022
    Переезжаем на ClickHouse: 3 года спустя

    Три года назад Виктор Тарнавский и Алексей Миловидов из Яндекса на сцене HighLoad++ рассказывали, какой ClickHouse хороший, и как он не тормозит. А на соседней сцене был Александр Зайцев с докладом...

  • Спасибо ! )
  • https://t.me/clickhouse_ru
    @kobzevvv #253560 03:58 AM, 17 Jan 2022
    подскажите плиз суть кликхаусной ошибки в ответ на селект: Received error from remote server /?connection_string=DSN%3Ddts&max_block_size=8192
  • https://t.me/clickhouse_ru
    @artemiy_uo #253561 05:20 AM, 17 Jan 2022
    Ребята, может быть есть у кого конфигурация кликхаус кластера для docker-compose ?
    Мне для разработки. Думаю что разрабатывать и тестировать лучше в кластерной конфигурации. Думал сделать 2 шарда и у каждого по 2 реплики.
    Насколько это оправдано и реально для разработки и как это лучше сделать ?
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253561 #253562 06:45 AM, 17 Jan 2022
    GitHub - ilejn/ClickhouseCluster_DockerCompose: Example Docker Compose configs for Clickhouse Cluster (via ZooKeeper)

    Example Docker Compose configs for Clickhouse Cluster (via ZooKeeper) - GitHub - ilejn/ClickhouseCluster_DockerCompose: Example Docker Compose configs for Clickhouse Cluster (via ZooKeeper)

  • только сегодня ночью поднял
  • @d3vzer1 #253565 07:02 AM, 17 Jan 2022
    GitHub - TanVD/ClickhouseCluster_DockerCompose: Example Docker Compose configs for Clickhouse Cluster (via ZooKeeper)

    Example Docker Compose configs for Clickhouse Cluster (via ZooKeeper) - GitHub - TanVD/ClickhouseCluster_DockerCompose: Example Docker Compose configs for Clickhouse Cluster (via ZooKeeper)

  • @d3vzer1 #253566 07:03 AM, 17 Jan 2022
    ааа упс
  • @d3vzer1 #253567 07:03 AM, 17 Jan 2022
    верхний точно такой же))
  • https://t.me/clickhouse_ru
    @artemiy_uo #253568 07:12 AM, 17 Jan 2022
    спасибо
  • https://t.me/clickhouse_ru
    @romivanov #253569 07:17 AM, 17 Jan 2022
    Уважаемые специалисты, здравствуйте. Столкнулся с проблемой скорости запросов к словарю. Есть словарь из строковых key, value на 30 миллионов строк. Выбираю value по одному key из таблицы engine=dictionary, получаю результат только через несколько секунд.
    1 rows in set. Elapsed: 2.859 sec. Processed 28.96 million rows, 2.30 GB (10.13 million rows/s., 803.25 MB/s.)
    layout = COMPLEX_KEY_HASHED, так что все оперативной памяти, да и статус у словаря loaded. Нагрузки на сервер нет, памяти 128ГБ. Почему так медленно? Какая у вас скорость работы со словарем?
  • Возможно я косолап, но у меня в композе хреново работало
  • @d3vzer1 #253571 07:20 AM, 17 Jan 2022
    На 4 хостах тестировал
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253570 #253572 07:26 AM, 17 Jan 2022
    Оригинальный конфиг от TanVD у меня не работал никак, в моем есть некоторые изменения. Представляет собой три реплики, шард один.
  • https://t.me/clickhouse_ru
    @timson81 #253573 07:26 AM, 17 Jan 2022
    Подскажите пожалуйста как сформировать запрос к ClickHouse. Есть запрос: "SELECT ServiceId, count(*) FROM samples_1day where Timestamp='2022-01-16T00:00:00' and CallStackName = '[unknown_Java]' GROUP BY ServiceId", который считает количество фреймов '[unknown_Java]' и группирует их по идентификатору сервиса. Мне надо добавить еще одно поле, общее количество фреймов для данного идентификатора сервиса, или может сразу посчитать ratio. Как это сделать эффективнее? Спасибо.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253569 #253574 07:26 AM, 17 Jan 2022
    словари придуманы для dictGet, а не для того чтобы из них добывать 28.96 million rows последовательным чтением. engine=dictionary работает небыстро и нужна для операций контроля работы словаря.
    Скажите лучше что вы хотите сделать таким образом?
  • Буду смотреть, спасибо :)
  • https://t.me/clickhouse_ru
    Хочу приджоинить названия товаров (и другие данные) к истории цен товаров
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253576 #253577 07:28 AM, 17 Jan 2022
    посмотрите на engine=Join - она именно для этого. Похоже на словарь (есть даже joinGet), но работает быстро именно в данном кейсе
  • https://t.me/clickhouse_ru
    Спасибо, попробую. А есть примеры использования dictGet в запросах, чтобы понять сценарии, где они пригодятся?
  • https://t.me/clickhouse_ru
    @konnectrl #253579 07:30 AM, 17 Jan 2022
    @bvt123 Привет, а ты пытался высчитывать на sql для k-means метод логтя или метод силуэта ? https://clck.ru/akMHa
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253569 #253580 07:34 AM, 17 Jan 2022
    Если я правильно понял, что выборка одной записи из словаря занимает несколько секунд, то здесь какое-то явное не то.
    Расскажите, как описан словарь в конфигурации. Ну и приведите строку из system.dictionaries
    И пример использования.
  • https://t.me/clickhouse_ru
    CREATE DICTIONARY products_dict
    (
    product_id String,
    name String
    )
    PRIMARY KEY product_id
    SOURCE(POSTGRESQL(
    ...
    query 'SELECT product_id, name FROM products'
    ))
    LAYOUT(COMPLEX_KEY_HASHED())
    LIFETIME(3600);

    dictionaries:
    database: wdm
    name: products_dict
    uuid: 1464ba09-990c-4e69-9464-ba09990c0e69
    status: LOADED
    origin: 1464ba09-990c-4e69-9464-ba09990c0e69
    type: ComplexKeyHashed
    key.names: ['product_id']
    key.types: ['String']
    attribute.names: ['name']
    attribute.types: ['String']
    bytes_allocated: 4831830312
    query_count: 57912282
    hit_rate: 1
    found_rate: 1
    element_count: 28956140
    load_factor: 0.4314801096916199
    source: PostgreSQL: ...
    lifetime_min: 0
    lifetime_max: 3600
    loading_start_time: 2022-01-17 03:53:21
    last_successful_update_time: 2022-01-17 03:54:46
    loading_duration: 84.79
    last_exception:
    comment:

    Вот и я думаю, то или не то. Понравилось, что словарь сам обновляется. Приме использования (немного подрезал, поэтому может выглядеть странно с первым подзапросом):

    SELECT ppd.*, p.name
    FROM
    (
    SELECT
    product_id,
    price
    FROM product_prices_daily
    WHERE
    product_id IN ('97646221','97646318','976464823','97647223','976472425','976474961','976476908')
    AND day between '2022-01-13' and '2022-01-14'
    ) as ppd
    LEFT JOIN products_dict as p ON p.product_id = ppd.product_id
  • https://t.me/clickhouse_ru
    Используйте dictGet
  • https://t.me/clickhouse_ru
    @nyoroon #253583 07:38 AM, 17 Jan 2022
    SELECT из таблицы-словаря работает работает медленно и предназначен больше для дебага
  • https://t.me/clickhouse_ru
    Подскажите, пожалуйста, как мне использовать dictGet в таком сценарии или какие-то другие сценарии для него. Я не понимаю
  • https://t.me/clickhouse_ru
    @nyoroon #253585 07:40 AM, 17 Jan 2022
    dictGet('products_dict', 'name', tuple(ppd.product_id)) as name
  • https://t.me/clickhouse_ru
    157ms Замечательно! Спасибо!
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253579 #253587 07:45 AM, 17 Jan 2022
    нет, определение k я не делал. Несложно дописать в основной цикл вычисление статистики как для "локтя", так и для "силуэта", чтобы потом построить графики и принимать решение. Но код станет ещё сложнее для понимания. Особенно для "силуэта".
  • https://t.me/clickhouse_ru
    работало субоптимально т.к. JOIN загружает всю правую таблицу. кажется что в этом месте не помешала бы автоматическая оптимизация. какая у вас версия КХ?
  • https://t.me/clickhouse_ru
    ClickHouse server version 21.12.3 revision 54452
  • https://t.me/clickhouse_ru
    @ilejn #253590 07:51 AM, 17 Jan 2022
    Ни в какой версии ClickHouse в этом месте нет автоматической оптимизации. Зато есть ENGINE Join https://clickhouse.com/docs/ru/engines/table-engines/special/join/
    Join | Документация ClickHouse

    Join Подготовленная структура данных для использования в операциях JOIN. Создание таблицы CREATE TABLE [IF NOT EXISTS] [

  • https://t.me/clickhouse_ru
    Окей, спасибо за ответ.
  • https://t.me/clickhouse_ru
    @romivanov #253592 07:53 AM, 17 Jan 2022
    Все-таки между engine join и dictionary есть существенная разница в способе наполнения данными. С dictionary нужно только прописать источник, а с join engine выстраивать схему наполнения актуальными данными. Или я не прав?
  • https://t.me/clickhouse_ru
    А сколько строк у вас словаре и сколько оперативной памяти ? Чисто для себя интересно
  • https://t.me/clickhouse_ru
    Roman Ivanov in ClickHouse не тормозит

    CREATE DICTIONARY products_dict ( product_id String, name String ) PRIMARY KEY product_id SOURCE(POSTGRESQL( ... query 'SELECT product_id, name FROM products' )) LAYOUT(COMPLEX_KEY_HASHED()) LIFETIME(3600); dictionaries: database: wdm name: products_dict uuid: 1464ba09-990c-4e69-9464-ba09990c0e69 status: LOADED origin: 1464ba09-990c-4e69-9464-ba09990c0e69 type: ComplexKeyHashed key.names: ['product_id'] key.types: ['String'] attribute.names: ['name'] attribute.types: ['String'] bytes_allocated: 4831830312 query_count: 57912282 hit_rate: 1 found_rate: 1 element_count: 28956140 load_factor: 0.4314801096916199 source: PostgreSQL: ... lifetime_min: 0 lifetime_max: 3600…

  • https://t.me/clickhouse_ru
    30М строк, 128МБ оперативной, занято словарем 4,5 GB
  • https://t.me/clickhouse_ru
    Спасибо
  • https://t.me/clickhouse_ru
    Спасибо
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253592 #253598 07:57 AM, 17 Jan 2022
    hash join сначала считает хэши для всей правой таблицы. Для словаря это тоже занимает время.
    А engine join позволяет сделать это однократно.
    Ну т.е. engine join это слой поверх словаря и его использование имеет смысл.

    Еще в принципе можно запретить hash join https://clickhouse.com/docs/ru/operations/settings/settings/#settings-join_algorithm, если в левой таблице совсем мало, а в правой таблице совсем много элементов, это может работать быстрее. Но это домыслы, реально такого никогда не видел.
    Настройки | Документация ClickHouse

    Настройки distributed_product_mode Изменяет поведение распределенных подзапросов. ClickHouse применяет настройку в тех с

  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253598 #253599 08:03 AM, 17 Jan 2022
    - Join engine набирает данные постепенно (хоть по одной строке, но лучше пачками) и сразу замещает хеш в памяти.
    - Словарь обычно считывает весь набор данных целиком (есть улучшения) через какой-то интервал времени.
    - join engine может хранть данные как ALL (с повторениями) или как ANY(только один ключ).
    - Словарь - только одина строка на ключ
    - для всех столбцов join engine строиться один хеш в памяти
    - для каждого столбца словаря стоиться свой хеш - занимает больше RAM
  • https://t.me/clickhouse_ru
    @ilejn #253600 08:07 AM, 17 Jan 2022
    Мы, кажется, говорим о разном.
    Я о том, что если уж мы делаем JOIN для словаря (а не используем dictGet), то имеет смысл использовать engine Join.
  • @infisamk #253605 08:54 AM, 17 Jan 2022
    А как обновлять данные в таблице с движком JOIN? По документации, если будет прислана запись с ключом, который уже есть в таблице, то она будет проигнорирована. Допустим, мне нужно обновить какие-то данные в какой-то записи такой таблицы. Нужно будет сначала удалить запись, а затем добавить новую? Есть, конечно, вариант использования строгости ALL, но в этом случае потребуется делать группировку, чтобы отобрать последнюю вставленную, которую ещё нужно будет найти по дополнительному полю с датой или с версией. Или я чего-то не понимаю?
  • @DmitryLeushkin #253606 09:07 AM, 17 Jan 2022
    Собираю кластер clickhouse, пока остановился на 2 шарда + 2 репликик, нужно спланировать конфигурацию серверов.
    Подскажите есть ли примерное соотношение ssd + memory + cpu, т.е например на 1 ядро 1 гб озу и 100 гб ssd?
  • https://t.me/clickhouse_ru
    @konnectrl #253607 09:23 AM, 17 Jan 2022
    Приветствую, тестирую шардирования (репликаций нету), при шардирование на 2 сервера скорость выполнение запросов равна единицы, при шардирование такого же датасета на 3 шарда производительность уже равна две единицы. Почему разница в 2 раза, а не в 1.5? С чем может быть это связано
  • https://t.me/clickhouse_ru
    @rostish #253608 09:23 AM, 17 Jan 2022
    Всем привет!
    А может кто-нибудь посоветовать статью, в которой бы рассказывалось, как CH работает с большим количеством запросов? Какая-то внутренняя очередь или на каждую создает треду?
  • https://t.me/clickhouse_ru
    Insert или Select ?
  • https://t.me/clickhouse_ru
    а можно и то и другое?
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253608 #253611 09:27 AM, 17 Jan 2022
    Статьи не знаю.
    На каждый запрос по одному или несколько тредов.
    Не более https://clickhouse.com/docs/en/operations/settings/settings/#settings-max_threads
    Очередь есть при превышении https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings/#max-concurrent-queries
    Settings | ClickHouse Documentation

    Settings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when

  • https://t.me/clickhouse_ru
    😘
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253607 #253613 09:28 AM, 17 Jan 2022
    Это может быть связано с ошибкой в эксперименте.
  • https://t.me/clickhouse_ru
    Select, про инсерт тоже бы почитал
  • https://t.me/clickhouse_ru
    Спасибо
  • https://t.me/clickhouse_ru
    https://www.youtube.com/watch?v=Ac2C2G2g8Cg&t=2876s&ab_channel=HighLoadChannel
    Тут в начале про Insert есть в рассказе, а про select примерно ответили уже тут
    Эффективное использование ClickHouse / Алексей Миловидов (Яндекс)

    Приглашаем на Saint HighLoad ++ 2021 20 и 21 сентября 2021, Санкт-Петербург, DESIGN DISTRICT DAA in SPB Программа, билеты и подробности - https://clck.ru/VmKaW -------- HighLoad++ 2017 Тезисы: http://www.highload.ru/2017/abstracts/2992 ClickHouse чуть более года доступен в open-source. За это время накоплен опыт его использования в российских и зарубежных компаниях. В некоторых из них объёмы данных и нагрузки превышают те, с которыми мы имеем дело в Яндексе. Так как ClickHouse является специализированной системой, при его использовании важно учитывать особенности его архитектуры. В своём докладе я расскажу о примерах типичных ошибок при использовании ClickHouse, которые могут привести к неэффективной работе. На примерах из практики будет показано, как выбор той или иной схемы обработки данных может изменить производительность на порядки. Нашли ошибку в видео? Пишите нам на support@ontico.ru

  • https://t.me/clickhouse_ru
    @rostish #253617 09:31 AM, 17 Jan 2022
    Спасибо!
  • https://t.me/clickhouse_ru
    @konnectrl #253618 09:31 AM, 17 Jan 2022
    Ну и нужно понимать, что один запрос Select может сожрать всю машину под себя.
  • https://t.me/clickhouse_ru
    @rostish #253619 09:32 AM, 17 Jan 2022
    да, я поэтому и хочу понять как работает.
    Мы в команде сделали отдельный сервис, который мониторинг нагрузку на ноды и если она поднимается до 90% перестаем передавать новые запросы.
    Пытаюсь понять, а как клик сам работает
  • https://t.me/clickhouse_ru
    @rostish #253620 09:32 AM, 17 Jan 2022
    Или просто сжирает все что дают
  • https://t.me/clickhouse_ru
    @rostish #253621 09:33 AM, 17 Jan 2022
    мы заметили что если увести клик в потолок то он работает намного хуже
  • https://t.me/clickhouse_ru
    @rostish #253622 09:33 AM, 17 Jan 2022
    но не верится, что внутри никакого бек прежур нет
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253619 #253623 09:37 AM, 17 Jan 2022
    Интересный опыт.
    Какое у вас типичное количество одновременно исполняемых запросов (не люблю такую формулировку, но что ж поделать) ?
    ClickHouse действительно не имеет механизмов, работающих динамически (насколько я знаю), если не считать очеред запросов по max_concurrent_queries
  • https://t.me/clickhouse_ru
    Вообще в планах на этот год фичи по ограничению и контролю ресурсов
  • https://t.me/clickhouse_ru
    Скорей всего когда он забит на 100%, то упирается в производительность жестких дисков из-за этого и падает производительность
  • https://t.me/clickhouse_ru
    По разному, обычно немного, но есть крупные клиенты. 11 запросов в секунду, но запросы крайне неоднородные. Бывает за 100мс, а может 30 секунд. Поэтому, если делать статический лимит - то никогда не угадаешь будет ли это 100 запросов по 100 мс или 100 по 30 секунд
  • https://t.me/clickhouse_ru
    Он наверное один из лучших видосиков про оптимизацию кликхауса https://youtu.be/efRryvtKlq0
  • https://t.me/clickhouse_ru
    То есть должен быть прирост 1.5 ?
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253626 #253629 09:48 AM, 17 Jan 2022
    Я бы, наверное, попробовал установить max_threads в cpu_cores/2 .
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253628 #253630 09:50 AM, 17 Jan 2022
    Да, в моем понимании прирост должен быть 1.5 или чуть менее.
    У вас на нет перекоса, на всех шардах близкое количество данных?
  • https://t.me/clickhouse_ru
    Спасибо. Сейчас, когда у нас отдельный сервис формирует очередь, все хорошо работает. Динамически количество задач(запросов) формируется. Просто не люблю оверинжениринг, и если система что-то сама может - стараюсь перекладывать на нее))
  • https://t.me/clickhouse_ru
    Ок! спасибо за все видео
  • https://t.me/clickhouse_ru
    Какой ключ шардирования, какие запросы
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253631 #253634 09:52 AM, 17 Jan 2022
    А ваша очередь ближе к ClickHouse или к вашему приложению? Если первое, может, порадуете сообщество, сделав решение открытым?
  • https://t.me/clickhouse_ru
    Перекоса нету
  • https://t.me/clickhouse_ru
    Да я бы с радостью, но это простенький джава сервис. Мы слушаем сервер через прометэус, смотрим метрики процессора. Так как у нас рандом балансер перед кластером стоит, мы просто отслеживаем среднюю нагрузку на весь кластер, если средняя выше 95% пропускаем N времени.
  • https://t.me/clickhouse_ru
    cityHash64(user_id), select c where, select с join, просто select, ну и в каждом запросе есть group by
  • https://t.me/clickhouse_ru
    @konnectrl #253638 10:00 AM, 17 Jan 2022
    Что то по типу такого, как запустить на кластер ?
    SELECT rand() % 10000000 AS k
    FROM system.numbers_mt
    GROUP BY k
  • https://t.me/clickhouse_ru
    Ну а так почему нет?

    У вас стало больше памяти для page cache, больше cpu для обработки и если делает GROUP BY user_id, то меньше уникальных id на каждом конкретном шарде, что означает более быструю агрегацию
  • https://t.me/clickhouse_ru
    Но ускорение не только связанных с user_id, но даже если не используется в запросе user_id. Например такой
    select event,count()
    FROM table
    group by event
    Даёт так же х2.
  • https://t.me/clickhouse_ru
    @inv2004 #253642 12:14 PM, 17 Jan 2022
    Немного побенчил векторные базы (in-mem в том числе), по аналогии с Billion Taxi Rides: shakti, kdb, clickhouse

    https://t.me/inv2004_dev_blog/40
  • https://t.me/clickhouse_ru
    @pic_Nick77 #253643 12:21 PM, 17 Jan 2022
    Подскажите, как в КХ правильнее из таблицы с "историчностью" вытаскивать данные по состоянию на определённый момент времени. Например, в оракле я делал так:
    select MAX(a.attr_name) KEEP (DENSE_RANK LAST ORDER BY a.actdate)
    from hist_tab a
    where a.id = 79 and a.actdate <= :on_date
  • Случайно не argMax?
  • https://t.me/clickhouse_ru
    Да. Именно то, что нужно. Спасибо.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253605 #253646 12:34 PM, 17 Jan 2022
    Настройки | Документация ClickHouse

    Настройки distributed_product_mode Изменяет поведение распределенных подзапросов. ClickHouse применяет настройку в тех с

  • Да, вроде вариант. А старые значения удалять через TTL?
  • Если поставить join_any_take_last_row = 1 для движка Join, то старое значение просто перезапишется новым, TTL не нужен, да и не работает для Join
  • @infisamk #253649 01:01 PM, 17 Jan 2022
    О как! А в документации об этом по другому пишется... Спасибо за подсказку!
  • @xfangsx #253650 01:30 PM, 17 Jan 2022
    Добрый день. Есть агрегейтет мт с order by id, id2 каждый ключ и без связки уникальный

    Есть view поверх неё с group by id, id2, чтоб собирать все стейты.

    Могут быть случае когда запросы к view where id = …
    Или where id2 = … не будут пробрасывать индекс, а будут сначала считать всю таблицу, а потом по типу having отфильтровывать результат?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253650 #253651 01:40 PM, 17 Jan 2022
    having тут не причем.
    where id = .. будет работать относительно пристойно. where id2= ... (без id) прочитает с диска всю таблицу, как будто индекса нет, но отфильтрует в процессе все что вам надо. а потом уже будет группировка и все что вы напишите.
  • Понял, спасибо.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253652 #253653 01:51 PM, 17 Jan 2022
    можно попробовать добавить skip index по id2 - м.б. звезды (данные) сложатся как надо и скорость будет пристойная. Если нет - можно сделать табличку соответствия id2->id и делать по ней предварительное вычисление, чтобы в where всегда был id.
  • https://t.me/clickhouse_ru
    @CYevhenii #253654 01:58 PM, 17 Jan 2022
    Настроил кластер кликхауса, сделал распеределенные таблицы, с репликацией, все работает все хорошо, но при отключении одной из нод, получаю вот такую ошибку:
    Code: 210, e.displayText() = DB::NetException: Connection refused (ch…:9000) (version 21.6.4.26 (official build))
    Можно ли сделать так что бы при отключении одной из нод, другие продолжали работать?
  • это вы напрямую пытаетесь подключиться к упавшей ноде?
  • https://t.me/clickhouse_ru
    Нет, это я к distribution таблице обращаюсь, на живой ноде, под капотом distribution таблицы, реплицируемые таблицы
  • У вас точно шардирование настроено?
  • скорее всего у вас что-то не так с настройками реплик

    Выдержка из документации:
    Если соединение с сервером не установлено, то будет произведена попытка соединения с небольшим таймаутом. Если соединиться не удалось, то будет выбрана следующая реплика, и так для всех реплик.
  • https://t.me/clickhouse_ru
    @bububup #253660 02:28 PM, 17 Jan 2022
    Всем привет!
    #job #вакансия
    Сбермаркет ищет стажеров-аналитиков!

    🍏Локация: Москва, м. Новокузнецкая (можно удаленно)
    💚Основной стек: SQL, Python, знание Clickhouse будет крутым плюсом:)

    ❓Почему мы?
    -У нас стажеры решают реальные задачи бизнеса и даже получают некоторую зону ответственности. -Можно прокачивать как свои менеджерские качества, так и технические
    -В СберМаркете стажеры комитят код в репозитории и он регулярно проходит код-ревью. Что-то из твоих наработок попадет в продакшн.
    Даже при большом росте -мы сохраняем дух стартапа. Поэтому у нас нет токсичности и бюрократии, и мы открыто обсуждаем все возникающие проблемы.
    -У нас можно и нужно расти. После успешной стажировки ты сможешь стать частью команды и брать на себя более сложные задачи и увеличивать зону ответственности


    🟢Чем предстоит заниматься?
    -Исследовать бизнес-процессы, ломать плохие и создавать эффективные.
    -Продумывать и считать метрики.
    -Исследовать поведение пользователей, проверять и оценивать гипотезы, конвертировать их в проекты и вести их.
    -Проактивно исследовать различные домены бизнеса: продукт, операции, маркетинг и т.д.
    -Дизайнить, проводить и анализировать A/B-тесты и квази-эксперименты
    -Задавать много вопросов :)

    ✨✨✨С вакансией можно ознакомиться тут: https://www.notion.so/Analytics-Data-Science-Intern-9b605702c09049b7b0057ec2cee109d9

    ⚡️Присылай CV → https://airtable.com/shrsPTgUE2R5jjQVJ , проверяй почту - возможно письмо с тестовым заданием улетело в спам. Будем рады, если наша большая и дружная команда пополнится в ближайшее время💚
    Analytics / Data Science Intern

    Привет! 👋🏻 Мы ищем стажеров в команду данных.

  • покажите что в select * from system.clusters
  • https://t.me/clickhouse_ru
    @nblagodarnyy #253662 03:15 PM, 17 Jan 2022
    Всем привет. Подскажите, пожалуйста, есть ли возможность как-то ограничивать размер БД? Ну типа квот на место на диске.
  • https://t.me/clickhouse_ru
  • у вас кластер шардирован, но не реплицирован. Если у вас лежит 1 шард, у вас будет недоступна часть данных
  • https://t.me/clickhouse_ru
    @orx4n #253665 03:22 PM, 17 Jan 2022
    Здравствуйте коллеги. Выполняю запрос инсерт - для перемещения данных от одной таблицы другой. Выдает исключение:

    Code: 439. DB::Exception: Received from localhost:9000. DB::Exception: Cannot schedule a task: no free thread (timeout=0) (threads=10000, jobs=10000). (CANNOT_SCHEDULE_TASK)
  • https://t.me/clickhouse_ru
    @orx4n #253666 03:24 PM, 17 Jan 2022
    Ошибка вылетает при процессе инсерта. То есть запрос выполняется . После 2 секунд дает ошибку
  • https://t.me/clickhouse_ru
    Но таблицы типа ReplicatedMergeTree у меня корректно работают, данные реплецируются
  • https://t.me/clickhouse_ru
    @orx4n ↶ Reply to #253665 #253670 03:44 PM, 17 Jan 2022
    ?
  • По размеру не было, не знаю, насколько это необходимо. Про TTL, я думаю, вы и так знаете.
  • а сколько ядер? сколько тредов в настройках?
  • Данные на 2-х шардах совпадают? покажите как они созданы, можно без полей, вы скорее всего что-то где-то захардкодили. И как выглядит ваш remote_servers конфиг
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253591 #253674 04:09 PM, 17 Jan 2022
    закоммитил в репозиторий clickhouse k-means вычисление метрик для локтя и силуэта. Если есть желание проверить - буду рад. Только учтите, что силуэт требует вычисление взаимных расстояний всех точек друг от друга. Это cross join NxN. Если исходных точек будет 10М, то мне даже страшно подумать сколько оно будет работать.
  • https://t.me/clickhouse_ru
    😘 вот это огнище
  • https://t.me/clickhouse_ru
    @andreysenko #253678 04:21 PM, 17 Jan 2022
    Всем доброго вечера!
    А скажите, пожалуйста, logs как имя базы не является нерекомендуемым?
  • https://t.me/clickhouse_ru
    вроде есть таблица в system такая же ... Зачем лишния путаница :)
  • https://t.me/clickhouse_ru
    @andreysenko #253680 04:25 PM, 17 Jan 2022
    это не таблица, это база.
  • https://t.me/clickhouse_ru
    Сейчас буду разбираться и запускать вычисления :) Спасибо
  • @DigDiver #253682 04:27 PM, 17 Jan 2022
    Скажите, а можно ли удалить безболезненно системные таблицы? Не поднимается сервер из-за нехватки памяти при попытке подключить system asynchrius log
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    Разобрался со всем, спасибо)
  • Т.е можно удалить папку system и попробовать стартануть сервер?
  • https://t.me/clickhouse_ru
    You can drop / rename / truncate *_log tables at any time
  • https://t.me/clickhouse_ru
  • Я понимаю английский. Просто тут написано про таблицы, а не про файлы на диске. А поскольку сервер не подминается, то alter table drop в таком варианте не проходит. Поэтому я и уточнил про фолдер на диске.
  • https://t.me/clickhouse_ru
    @krigar1184 #253690 05:39 PM, 17 Jan 2022
    Всем привет. Есть такая проблема: неоптимизированная таблица в ~5Тб, которую хотелось бы перенести в s3. Возможно ли для этого использовать clickhouse-copier? Если нет, какие возможны альтернативы?
  • https://t.me/clickhouse_ru
    А вы ее каким образом перенести то хотите? В каком виде
  • https://t.me/clickhouse_ru
    Главным образом -- не потеряв данные
  • https://t.me/clickhouse_ru
    https://altinity.com/blog/tips-for-high-performance-clickhouse-clusters-with-s3-object-storage

    https://altinity.com/blog/clickhouse-and-s3-compatible-object-storage

    Разве что zero copy replication пока не стоит включать
    Tips for High-Performance ClickHouse Clusters with S3 Object Storage

    In this article, we will discuss how ClickHouse clusters can be used with S3 efficiently thanks to two important new features: the ‘s3Cluster‘ table function and zero-copy replication.

  • @simpl1g #253696 06:35 PM, 17 Jan 2022
    @unamedrus @BloodJazMan извините, не подскажите 21.11 планируется в stable release? а то там уже как то много релизов наклепали) думаю не пора ли обновляться)
  • https://t.me/clickhouse_ru
    Мы стараемся ориентировать наши stable релизы с LTS от ClickHouse
    Так что следующий скорее всего будет 22.3
  • жаль) долго ещё ждать придётся)
  • https://t.me/clickhouse_ru
    Ну вроде и не очень, всего пару месяцев :)
  • так пока ещё всё пофиксят месяц минимум)
  • https://t.me/clickhouse_ru
    Ну, раньше было еще дольше.

    Так что чем богаты, тем и рады
  • https://t.me/clickhouse_ru
    @ZoMeR_LBF #253702 06:46 PM, 17 Jan 2022
    Подскажите как можно очистить сервер от всех объектов и данных?
  • Добрый вечер)

    Пытаюсь создать в клике таблицу с полем типа Polygon.

    Попробовал в конце запроса докинуть настройку allow_experimental_geo_types = 1, но возвращает ошибку:

    Cannot create table with column 'pg' which type is 'Polygon' because experimental geo types are not allowed.

    Не знаете в чем проблема?
    @dj_mixer

    ENGINE нарочно удалил для скрина)
  • https://t.me/clickhouse_ru
    Пропишите данную настройку для default пользователя на всех машинках
  • https://t.me/clickhouse_ru
    Можете очистить

    /var/lib/clickhouse/metadata/*
    /var/lib/clickhouse/data/*
    /var/lib/clickhouse/store/*
  • Эта не пройдет. Её в конфиг профиля и пересоединится надо. Сеттингс не для всего работает (например query id)
  • Понял, спасибо)
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253706 #253708 07:02 PM, 17 Jan 2022
    Интересно ... т.е. бывают настройки, задаваемые в <profiles>, которые нельзя установить через SET?
    Вот ведь ...
  • https://t.me/clickhouse_ru
    Установить можно.
    Проблема в другом.

    Запросы ON CLUSTER 'xxxx' выполняются внутренним воркером кх который использует default профиль.
    При этом настройки там не прокидываются в теле запроса.
  • Локально вроде не будет все равно. Experimental все.
    Settings вообще до недавно в create не работал
  • @dj_mixer #253711 07:07 PM, 17 Jan 2022
    А вот set в клиенте вроде должен...
  • https://t.me/clickhouse_ru
    Для ON CLUSTER запросов не пихает.
  • https://t.me/clickhouse_ru
    @unamedrus #253713 07:08 PM, 17 Jan 2022
    Одна из причин, почему для них нужно всегда указывать базу для таблицы.
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253709 #253714 07:09 PM, 17 Jan 2022
    Вот это поворот ;)
    Как бы логично, но больше похоже на баг, чем на фичу.
  • @simpl1g #253715 07:20 PM, 17 Jan 2022
    Подскажите, а есть ли способ атомарно переносить данные из таблиц с разным партиционированием? Храним данные с дневным партиционированием, так как данные постоянно меняются за последнюю неделю и мы через replace partittion обновляем данные. Планируем добавить таблицу с месячным партиционированием и объединить через Merge таблицу, для того чтобы уменьшить число партов.

    Пока в голову приходит только такой вариант, будет небольшой промежуток времени без данных за месяц, может можно оптимальнее?

    INSERT INTO monthly_tmp
    DROP PARTITIONS daily 01..31
    REPLACE PARTITION monthly FROM monthly_tmp
  • Атомарно нельзя, но тикетов есть куча на разное гибридное партиционирование
  • но их не будут делать, я спрашивал в issue Roadmap 2022
  • Обязательно бахнем, весь мир в труху, но потом )
  • ждёмс пока) может что-то интересное в облаке выкатят)
  • Атомарнее лучше так:
    Insert into monthlytmp
    Detach partition from monthlytmp
    Drop partition 01
    Attach to monthly

    При одинаковых схемах monthly / monthlytmp должно быть ок, и переливать можно каждый день
  • monthlytmp c дневным партиционированием имеется ввиду? нормально будет аттачить к месячной таблице?
  • Нет. Monthlytmp месячный. Туда вставка из дневной идет.
  • @dj_mixer #253723 08:03 PM, 17 Jan 2022
    Когда аттач делаете парты добавляются в partition.
  • а чем тогда detach/attach лучше чем replace?
  • @dj_mixer #253725 08:08 PM, 17 Jan 2022
    При replace нужно целый месяц перевставить и подропать.
    При детач аттач можно каждый день переносить
  • Имеет смысл только если данных много ессно
  • @dj_mixer #253727 08:09 PM, 17 Jan 2022
    Хотя вам replace вообще не особо нужен сам по себе...
  • теперь понял, вставлять по дню в monthly_tmp
  • партицию размером 133.98 GiB за 0.5 сек replace делает
  • если на разных дисках - то нет.
    тут больше вопрос хотите ли вы переливать по дням или вас устраивает капитальный перелив раз в месяц.
    если второе, сколько времени вам ок на это выделить (сам replace то быстр, но insert-select нет). итд, итп.
  • Ну это понятно, но в теории 1 раз жирный инсерт сделать ночью и 1 жирный мерж потратит меньше цпу чем 30 мержей
  • не будет одного жирного мерджа, будут много на каждый Н-ый инсерт
  • https://t.me/clickhouse_ru
    @daniel_byta #253733 08:34 PM, 17 Jan 2022
    Кто-нибудь работал с библиотекой clickhouse-bulk на го?
    https://github.com/nikepan/clickhouse-bulk

    можно ли как-то передать CA сертификат?
    GitHub - nikepan/clickhouse-bulk: Collects many small inserts to ClickHouse and send in big inserts

    Collects many small inserts to ClickHouse and send in big inserts - GitHub - nikepan/clickhouse-bulk: Collects many small inserts to ClickHouse and send in big inserts

  • https://t.me/clickhouse_ru
    @daniel_byta #253734 08:35 PM, 17 Jan 2022
    ну или kittenhouse
  • https://t.me/clickhouse_ru
    @ilejn #253735 08:42 PM, 17 Jan 2022
    А kittenhouse не утратил актуальность в свете https://clickhouse.com/docs/ru/operations/settings/settings/#async-insert ?
    Настройки | Документация ClickHouse

    Настройки distributed_product_mode Изменяет поведение распределенных подзапросов. ClickHouse применяет настройку в тех с

  • https://t.me/clickhouse_ru
    @kirilldikalin #253736 08:47 PM, 17 Jan 2022
    Всем привет!
    Скажите пожалуйста, как мне результат селекта в постгрес перенести в кликхаус? Через copy в csv не получается, потому-что в данных запятые
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253736 #253737 08:55 PM, 17 Jan 2022
    Если много способов.
    JSON?
    TSV (как CSV, но с табами)?
    Прямой запрос из ClickHouse в PostgreSQL?
    Ну и правильный CSV вообще-то позволяет иметь запятые в полях.
  • вроде были тут тесты от создателя kittenhouse, пока async-insert проигрывает
  • https://t.me/clickhouse_ru
    async insert вроде еще не lts?
  • https://t.me/clickhouse_ru
    В kittenhouse только если самому код поменять
  • https://t.me/clickhouse_ru
    Без асинхронной работы с сетью по одной строке во много соединений будет вставлять плохо
  • https://t.me/clickhouse_ru
  • https://t.me/clickhouse_ru
    @daniel_byta #253743 08:58 PM, 17 Jan 2022
    имеет смысл сделать прокси для kittenhouse, чтобы перехватывать запросы и добавлять им сертификат или bullshit strategy?)
  • https://t.me/clickhouse_ru
    А как прямой запрос из клика осуществить? Видимо у меня неправильный CSV )
  • https://t.me/clickhouse_ru
    Я бы правда форкнул и прислал пул реквест
  • https://t.me/clickhouse_ru
    @ilejn ↶ Reply to #253744 #253746 09:02 PM, 17 Jan 2022
    postgresql | Документация ClickHouse

    postgresql Позволяет выполнять запросы SELECT и INSERT над таблицами удаленной БД PostgreSQL. Синтаксис postgresql('host

  • https://t.me/clickhouse_ru
    @yourock88 #253747 09:02 PM, 17 Jan 2022
    И ещё бы тегнул товарища https://vk.com/bkmz, чтобы не ленился и обновил опенсорс версию заодно
    Ilya Scherbak

    ВКонтакте

  • https://t.me/clickhouse_ru
    Спасибо!
  • https://t.me/clickhouse_ru
    @daniel_byta #253749 09:16 PM, 17 Jan 2022
    помогите, пожалуйста, разобраться с киттеном
    не хочет запускаться
  • https://t.me/clickhouse_ru
    Не хочет собираться :). Могу лишь порекондовать свой форк, где исправлена сборка: https://github.com/YuriyNasretdinov/kittenhouse
    GitHub - YuriyNasretdinov/kittenhouse

    Contribute to YuriyNasretdinov/kittenhouse development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    @yourock88 #253751 09:40 PM, 17 Jan 2022
    Но вообще конечно это должны товарищи из ВК сами были пофиксить, но так и не пофиксили
  • https://t.me/clickhouse_ru
    @yourock88 #253752 09:41 PM, 17 Jan 2022
    (Склонируйте реп куда угодно и выполните внутри go install -v ./...)
  • https://t.me/clickhouse_ru
    @daniel_byta #253753 09:41 PM, 17 Jan 2022
    о, это вы сравнивали clickhouse-bulk и kittenhouse?)
  • https://t.me/clickhouse_ru
    Ну я изначальный автор kittenhouse :). Я, конечно же, буду хвалить именно его
  • https://t.me/clickhouse_ru
    @danilsolo #253755 10:33 PM, 17 Jan 2022
    Вот и пришло мое время)

    Друзья, подскажите пожалуйста аналитику который никогда не юзал клик видосы/каналы/уроки что почитать, чтобы быстрее виянуться в клик и клик-скуль, что-то Аля постгресПро
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #253755 #253756 10:36 PM, 17 Jan 2022
    https://www.youtube.com/c/ClickHouseDB
    https://presentations.clickhouse.com/talks_index.html
  • https://t.me/clickhouse_ru
    На ютубе что-то одни митапы и хайлоуды без разделения на темы(
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #253757 #253758 10:40 PM, 17 Jan 2022
    step-by-step я еще не встречал.
    Но можно начать с туториала тогда https://clickhouse.com/docs/ru/getting-started/tutorial/
    А дальше по доке
    Tutorial | Документация ClickHouse

    ClickHouse Tutorial What to Expect from This Tutorial? By going through this tutorial, you’ll learn how to set up a simp

  • https://t.me/clickhouse_ru
    Понял, Спасибо, для меня после скульсервера достаточно открытием является словари всякие и другие такие штуки)
  • https://t.me/clickhouse_ru
    @rheinx ↶ Reply to #253759 #253760 10:42 PM, 17 Jan 2022
    В самых ранних видео про них много было.
  • https://t.me/clickhouse_ru
    Могу посоветовать наши видео:
    https://www.youtube.com/watch?v=zDIK3Ej86GU
    https://www.youtube.com/watch?v=FsVrFbcyb84
    https://www.youtube.com/watch?v=1TGGCIr6dMY
    https://www.youtube.com/watch?v=6WICfakG84c
    И статьи (уже чуть позже, тк более глубокая тема)
    https://altinity.com/blog/harnessing-the-power-of-clickhouse-arrays-part-1
    https://altinity.com/blog/harnessing-the-power-of-clickhouse-arrays-part-2
    https://altinity.com/blog/harnessing-the-power-of-clickhouse-arrays-part-3
    На сайте ClickHouse тоже теперь есть уроки (в основном по новым фичам)
    https://clickhouse.com/learn/
    И у tinybird
    https://blog.tinybird.co/categories/clickhouse/
    После того, как будут просмотрены-прочитаны статьи
    Можно заглянуть на KB и читать все подряд (кроме Setup & maintenance, Kubernetes думаю)
    https://kb.altinity.com/

    https://www.youtube.com/playlist?list=PLQC2_0cDcSKD1y0Yc6COzhn2bzYEZaYhQ
    Первое и третье видео полезны будут.
    А дальше уже для любителей.
    5,6 про внутреннее устройство, если будет желание.
    Опять же про внутреннее устройство и хештаблицы
    https://www.youtube.com/watch?v=EoX82TEz2sQ
    How Fast is ClickHouse-Fast?

    ClickHouse is famous for its speedy response. We call it "ClickHouse-Fast." Find out how fast that really is in this short video with Altinity CEO, Robert Hodges. #ClickHouse #DataWarehouse #OpenSource ----------------- Learn more about Altinity! Site: https://altinity.com LinkedIn: https://www.linkedin.com/company/altinity/ Twitter: https://twitter.com/AltinityDB

  • https://t.me/clickhouse_ru
    Спасибо
  • 18 January 2022 (243 messages)
  • https://t.me/clickhouse_ru
    Понятно что после драки кулаками не машут, но я для таких случаев держу на каждом сервере пустой файл в несколько гб 5-10. Чтобы в случае проблем с местом и не запуском сервера файл удалить и сервис поднять. А вообще мониторить лучше и когда подходит место к концу - решать заранее вопрос
  • https://t.me/clickhouse_ru
    Посмотрите на табличную функцию postgresql
  • @dimaelsky #253765 02:42 AM, 18 Jan 2022
    Всем привет ,поделитесь пожалуйста плейбуком для развертывания кластера )
  • установка на Bare metal.
  • без понятия как на bare metal
  • @d3vzer1 #253768 02:58 AM, 18 Jan 2022
    GitHub - AlexeySetevoi/ansible-clickhouse: ansible role for clickhouse

    ansible role for clickhouse. Contribute to AlexeySetevoi/ansible-clickhouse development by creating an account on GitHub.

  • https://t.me/clickhouse_ru
    @konnectrl #253769 05:41 AM, 18 Jan 2022
    Вышел патч на новую версию :) https://clickhouse.com/docs/ru/whats-new/changelog/#improvement_2
    2021 | ClickHouse Documentation

    ClickHouse release v21.12, 2021-12-15 Backward Incompatible Change A fix for a feature that previously had unwanted beha

  • https://t.me/clickhouse_ru
    @RT_1_98 #253770 06:09 AM, 18 Jan 2022
    подскажите пожалуйста
    есть таблица в которой 2 нестед массива строк
    params Nested(k String, v String)

    как мне в селекте вернуть их в виде map{k[0]: v[0], k[1]: v[1], ...} ?

    через
    groupArray(map(arrayJoin(params.k) as k, params.v[indexof[params.k, k]] as v)) as kv
    я получаю массив [map{k[0]: v[0]}, map{k[1]: v[1]}, ...] а нужен именно один мап из набора ключей и значений в нестед массивах

    уже голову сломал ((
  • https://t.me/clickhouse_ru
    @koshakm5 #253771 06:25 AM, 18 Jan 2022
    привет! нужно увеличить max_query_size, если через clickhouse-client сделать set max_query_size = 10000000, то в текущей сессии запрос исполняется, а если в default profile в users.xml добавить <max_query_size>10000000</max_query_size>, то нет, Max query size exceeded, причём в обоих случаях значение max_query_size в system.settings меняется на нужное, где ещё может быть проблема во втором случае?
  • https://t.me/clickhouse_ru
    @solard ↶ Reply to #253771 #253772 06:35 AM, 18 Jan 2022
    Добавляй в профиль
  • https://t.me/clickhouse_ru
    @solard #253773 06:35 AM, 18 Jan 2022
    Который использует юзер
  • https://t.me/clickhouse_ru
    он дефолтный использует
  • https://t.me/clickhouse_ru
    @solard #253775 06:36 AM, 18 Jan 2022
    В профиль дефолт :)
  • https://t.me/clickhouse_ru
    так туда и добавил )
  • https://t.me/clickhouse_ru
    @koshakm5 #253777 06:43 AM, 18 Jan 2022
    в этом и проблема что не работает
  • @DigDiver #253778 06:45 AM, 18 Jan 2022
    Note 2: Log tables with numeric postfixes (_1 / 2 / 3 …) query_log_1 query_thread_log_3 are results of Clickhouse upgrades. When a new version of Clickhouse starts and discovers that a system log table’s schema is incompatible with a new schema, then Clickhouse renames the old *_log table to the name with the prefix and creates a table with the new schema. You can drop such tables if you don’t need such historic data

    Сделал запрос
    show tables from system

    В результате 2365 таблиц. Суффикы у некоторых таблиц больше 500, например, trace_log_540. Т.е это не есть результат обновления CH.

    Как я понял drop table работает только с одной таблицей. Может есть возможность дропнуть все старые за раз?
  • https://t.me/clickhouse_ru
    А запрос через какой интерфейс делаете?
  • https://t.me/clickhouse_ru
    да в том же clickhouse-client локально делаю
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253770 #253781 06:54 AM, 18 Jan 2022
    вам нужен cast
    with groupArray(toString(number)) as k, groupArray(toString(number*2)) as v
    select cast(arrayZip(k,v) ,'Map(String,String)') from numbers(10);
  • https://t.me/clickhouse_ru
    clickhouse-client -mn -q "SELECT concat('DROP TABLE system.',name,' NO DELAY;') FROM system.tables WHERE database='system' AND match(name, '_[0-9]+$')" | clickhouse-client -mn --echo
  • https://t.me/clickhouse_ru
    Спасибо, сейчас попробую.
    Искал как раз в документации по "zip" и не нашёл ничего
  • https://t.me/clickhouse_ru
    _540 это как то дофига =)
    такое ощущение что у вас там XML определение trace_log и metadata/system/trace_log.sql по структуре сильно расходятся в части ENGINE или TTL
  • И они продолжают увеличиваться. Вот настройка из XML
    `
    <trace_log>
    <database>system</database>
    <table>trace_log</table>


    <engine>ENGINE = MergeTree PARTITION BY toYYYYMM(event_date)
    ORDER BY (event_time)
    TTL event_date + INTERVAL 14 DAY DELETE
    SETTINGS ttl_only_drop_parts=1
    </engine>

    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </trace_log>
    `
  • https://t.me/clickhouse_ru
    а что лежит в /var/lib/clickhouse/metadata/system/trace_log_XX.sql ?

    какая версия clickhouse?
  • ATTACH TABLE _ UUID '8281452a-ad50-4805-8281-452aad509805'
    (
    event_date Date,
    event_time DateTime,
    event_time_microseconds DateTime64(6),
    timestamp_ns UInt64,
    revision UInt32,
    trace_type Enum8('Real' = 0, 'CPU' = 1, 'Memory' = 2, 'MemorySample' = 3, 'MemoryPeak' = 4),
    thread_id UInt64,
    query_id String,
    trace Array(UInt64),
    size Int64
    )
    ENGINE = MergeTree
    PARTITION BY toYYYYMM(event_date)
    ORDER BY event_time
    TTL event_date + toIntervalDay(14)
    SETTINGS ttl_only_drop_parts = 1, index_granularity = 8192
  • @DigDiver #253790 07:21 AM, 18 Jan 2022
    а в trace_log.sql

    ATTACH TABLE _ UUID 'b7afa7b9-ab92-46b9-b7af-a7b9ab9236b9'
    (
    event_date Date,
    event_time DateTime,
    event_time_microseconds DateTime64(6),
    timestamp_ns UInt64,
    revision UInt32,
    trace_type Enum8('Real' = 0, 'CPU' = 1, 'Memory' = 2, 'MemorySample' = 3, 'MemoryPeak' = 4),
    thread_id UInt64,
    query_id String,
    trace Array(UInt64),
    size Int64
    )
    ENGINE = MergeTree
    PARTITION BY toYYYYMM(event_date)
    ORDER BY (event_date, event_time)
    SETTINGS index_granularity = 8192
  • https://t.me/clickhouse_ru
    странно, я думал что TTL будет в trace_log.sql и не удет trace_log_XX.sql

    как то странно обрабатывается <engine> из XML

    какая версия clickhouse?
  • 21.12.3.32
  • https://t.me/clickhouse_ru
  • да, по этому.
  • https://t.me/clickhouse_ru
    ну как тупой вариант это
    добавить ручками TTL + SETTINGS в trace_log.sql
    и рестартовать сервер. посмотрев не создалась ли trace_log_XX
  • https://t.me/clickhouse_ru
    @Vladimir_Borisov #253796 07:44 AM, 18 Jan 2022
    Привет, ребят, подскажите, пожалуйста - где можно почитать про то как в КХ идет обор нужных партиций, либо как это в плане отображено.
    Интересует - работает ли фильтр по ним для переменных типа today() now() , которые не стат параметры. И в случаях если партиция по части значения в колонке.
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253796 #253798 08:06 AM, 18 Jan 2022
    explain plan indexes = 1
  • https://t.me/clickhouse_ru
    @Vladimir_Borisov #253799 08:07 AM, 18 Jan 2022
    спасибо, попробую
  • https://t.me/clickhouse_ru
    Возвращаясь к этой проблеме: существует ли возможность in-place переноса данных из неоптимизированной таблицы в другую с той же структурой, но другими ключами?
  • https://t.me/clickhouse_ru
    Из кх в кх? Можно через Distributed, можно ручками скрипт, можно через схему старая таблица -> MV -> новая, но последний вариант зависит от того, используете ли вы POPULATE в MV еще
  • https://t.me/clickhouse_ru
    @critskiy #253804 08:25 AM, 18 Jan 2022
    Можно вроде реаттачить, но не помню, работает ли такой вариант
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253800 #253805 08:26 AM, 18 Jan 2022
    in-place? Но как? Там же порядок хранения определяется в order by (фактически в primary key) Т.е. вам надо пересортировать данные и записать их в этом порядке.
  • https://t.me/clickhouse_ru
    А их можно пересортировать в рамках одной таблицы? Я так понимаю, что нет. Нынешний ключ сортировки очень неэффективен. Пробовал подход с limit..offset, на больших оффсетах отваливается по таймауту.
  • https://t.me/clickhouse_ru
    Нет, пересоздавать таблицу надо, нельзя менять ORDER BY
  • Не понимаю, что не так.

    В конфиге:
    <metric_log>
    <database>system</database>
    <table>metric_log</table>

    <engine>
    ENGINE = MergeTree PARTITION BY (event_date)
    ORDER BY (event_date, event_time)
    TTL event_date + INTERVAL 14 DAY DELETE
    SETTINGS ttl_only_drop_parts = 1, index_granularity = 8192
    </engine>

    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    <collect_interval_milliseconds>1000</collect_interval_milliseconds>
    </metric_log>

    =======================================================
    Меняю ENGINE с настройками один в один как config.xml в файле metric_log.sql

    Перезагружаю сервер. В итоге плодятся файлы

    ENGINE в metric_log.sql стал таким:

    ENGINE = MergeTree
    PARTITION BY toYYYYMM(event_date)
    ORDER BY (event_date, event_time)
    SETTINGS index_granularity = 8192

    ===================================
    metric_log_0.sql

    ENGINE = MergeTree
    PARTITION BY (event_date)
    ORDER BY (event_date, event_time)
    TTL event_date + INTERVAL 14 DAY DELETE
    SETTINGS ttl_only_drop_parts = 1, index_granularity = 8192

    ==================================================

    metric_log_1.sql

    ENGINE = MergeTree
    PARTITION BY event_date
    ORDER BY (event_date, event_time)
    TTL event_date + toIntervalDay(14)
    SETTINGS ttl_only_drop_parts = 1, index_granularity = 8192

    Все последующие mextric_log_xx.sql такие-же как и metric_log_1.sql

    Пока пришлось остановить вообще логирование.
  • https://t.me/clickhouse_ru
    @Amairgen #253809 08:53 AM, 18 Jan 2022
    Добрый день, есть задача собирать/хранить данные по рекламным кампаниям из различных систем(Яндекс.Метрика, ADWords и пр.). Данные поступают уже предагрегированые за сутки, примерно раз в день нужно будет получать данные по всем метрикам за прошедшие сутки(либо несколько дней) и сохранять в разрезах рекламынх аккаунтов. После этого эти данные довольно интенсивно будут выбираться по определенным аккаунтам для определенного анализа, причем хочется добиться именно высокой скорости выборки. Например, нужно что-то проверить по 1000 аккаунтов, для этого надо выбрать в память за один запрос некоторые метрики, причем для каждого из аккаунтов они могут быть различные. Рассмариваем 2 схемы - в одной из них данные по рекламным системам хранятся в каждой отельной таблице в развернутом виде, а во втором в одной таблице в виде массивов ключей и значений как советуют тут - https://www.youtube.com/watch?v=5KQsNmRTQmg
    Вопрос какая схема будет предпочтительней с точки зрения SELECT?
    Разгоняем обработку событий до 1.6М/сек. Опыт Badoo / Александр Крашенинников (Badoo)

    Приглашаем на Saint HighLoad ++ 2021 20 и 21 сентября 2021, Санкт-Петербург, DESIGN DISTRICT DAA in SPB Программа, билеты и подробности - https://clck.ru/VmKaW -------- HighLoad++ Moscow 2018 Тезисы и презентация: http://www.highload.ru/moscow/2018/abstracts/4132 Три года назад на Highload++ я рассказывал, как мы построили масштабируемую систему near-realtime обработки событий. С тех пор она эволюционировала, в процессе росли объёмы, и нам приходилось решать задачи, сопутствующие любому проекту с нагрузкой — масштабирование, отказоустойчивость и прочие. В определённый момент мы достигли точки, когда потребовались радикальные меры, а именно — смена технологического стека. В докладе я расскажу, как мы заменили связку Spark + Hadoop на ClickHouse, в три раза сэкономили железо и увеличили нагрузку в пять раз (с 300 000 событий в секунду до 1 600 000 в пике). -------- Нашли ошибку в видео? Пишите нам на support@ontico.ru

  • https://t.me/clickhouse_ru
    @Amairgen #253810 08:54 AM, 18 Jan 2022
    схема для первого варианта
  • А версию меняли сервера?
  • https://t.me/clickhouse_ru
    @Amairgen #253812 08:56 AM, 18 Jan 2022
    и для второго
  • второй вариант не очень потому что массив будет читаться весь и всегда.
    лучше попробуйте новый map, ну или либо отдельные колонки заводите.
    если слишком динамичная схема можете попробовать EAV (id, key, value)
  • можете второй + материализовывать часто запрашиваемые метрики в отдельные колонки
  • https://t.me/clickhouse_ru
    @letasm #253815 09:03 AM, 18 Jan 2022
    ребят а почему теперь нельзя создавать таблицы с пустыми полями внутри? причем потом в нее инсертить поля с null можно, в чем идея? это оч сильно неудобно
  • https://t.me/clickhouse_ru
    мы сами ответственны за наполнение массивов, поэтому будем хранить только те метрики, которые реально нужны, так что чтения "лишних" данных не будет. За вариант с map спасибо, посмотрим.
  • покажите create table
  • можно, но нужно тип указать
  • https://t.me/clickhouse_ru
    @Vitaly_Ivanov #253819 09:09 AM, 18 Jan 2022
    Друзья, можете подсказать по MergeTree. Предположим у меня 2 реплики и 2 куска в партиции, один сервер смежрил эти 2 куска в один, что при этом будет делать вторая реплика? Она тоже смержит или скопирует смерженый кусок с соседнего сервера?
  • https://t.me/clickhouse_ru
    @letasm ↶ Reply to #253818 #253820 09:15 AM, 18 Jan 2022
    А как указать тип?
  • покажите create table
  • https://t.me/clickhouse_ru
    @letasm ↶ Reply to #253817 #253822 09:16 AM, 18 Jan 2022
    Я не могу, nda же
  • https://t.me/clickhouse_ru
    @letasm #253823 09:16 AM, 18 Jan 2022
    Что именно надо показать?
  • ну Nullable(UInt16)
  • замажьте имена... и картинкой
  • если CTAS, то надо cast (xxx as Nullable(String) в селекте
  • https://t.me/clickhouse_ru
    @letasm #253828 09:17 AM, 18 Jan 2022
    Можно пример, пожалуйста
    Вот сейчас крейет выглядит так
    Select
    User_first_payment_at,
    User_id,
    ….
    Как указать тип?
  • https://t.me/clickhouse_ru
    смотрите /var/log/clickhouse-server/clickhouse-server.err.log
    там должна быть причина с warning скорее всего

    grep -r metric_log_1 /var/log/clickhouse-server/
    что показвыает?
  • select cast(User_first_payment_at as Nullable(<ваштип>))
  • https://t.me/clickhouse_ru
    @letasm #253832 09:18 AM, 18 Jan 2022
    Спасибо!
  • https://t.me/clickhouse_ru
    @iusik #253833 09:22 AM, 18 Jan 2022
    Добрый день!

    Странный баг наблюдаю. Версия: 21.11.5.33

    Есть вот такой запрос: SELECT dictGetString('dict.geo_city_en','country_name', toUInt64(2997838)) as country FORMAT JSON

    Если выполнять в консоле, то все работает нормально.
    Если выполнять его через http то падает сервер c ошибкой:

    2022.01.18 12:20:49.613177 [ 93 ] {58b0300a-75f1-4455-bfbd-65d10bcd17f9} <Debug> executeQuery: (from 10.0.72.3:34832) select dictGetString('dict.geo_city_en','country_name', toUInt64(2997838)) as Country_DictName FORMAT JSON
    2022.01.18 12:20:49.613654 [ 93 ] {58b0300a-75f1-4455-bfbd-65d10bcd17f9} <Information> executeQuery: Read 1 rows, 1.00 B in 0.000460057 sec., 2173 rows/sec., 2.12 KiB/sec.
    2022.01.18 12:20:49.614070 [ 253 ] {} <Fatal> BaseDaemon: ########################################
    2022.01.18 12:20:49.614090 [ 253 ] {} <Fatal> BaseDaemon: (version 21.11.5.33 (official build), build id: 76A10A4F605EF849249F2E8673661F7254B779DA) (from thread 93) (query_id: 58b0300a-75f1-4455-bfbd-65d10bcd17f9) Received signal Segmentation fault (11)
    2022.01.18 12:20:49.614108 [ 253 ] {} <Fatal> BaseDaemon: Address: 0x8 Access: write. Address not mapped to object.
    2022.01.18 12:20:49.614122 [ 253 ] {} <Fatal> BaseDaemon: Stack trace: 0x130e5bd3 0x9bdfe58 0x130d34ad 0x130d7ac0 0x1313c948 0x15d6e96f 0x15d70d61 0x15e85709 0x15e82e40 0x7fa0ebd90609 0x7fa0ebc8a293
    2022.01.18 12:20:49.614174 [ 253 ] {} <Fatal> BaseDaemon: 2. DB::CascadeWriteBuffer::nextImpl() @ 0x130e5bd3 in /usr/bin/clickhouse
    2022.01.18 12:20:49.614184 [ 253 ] {} <Fatal> BaseDaemon: 3. DB::WriteBuffer::finalize() @ 0x9bdfe58 in /usr/bin/clickhouse
    2022.01.18 12:20:49.614214 [ 253 ] {} <Fatal> BaseDaemon: 4. DB::HTTPHandler::processQuery(DB::HTTPServerRequest&, DB::HTMLForm&, DB::HTTPServerResponse&, DB::HTTPHandler::Output&, std::__1::optional<DB::CurrentThread::QueryScope>&) @ 0x130d34ad in /usr/bin/clickhouse
    2022.01.18 12:20:49.614227 [ 253 ] {} <Fatal> BaseDaemon: 5. DB::HTTPHandler::handleRequest(DB::HTTPServerRequest&, DB::HTTPServerResponse&) @ 0x130d7ac0 in /usr/bin/clickhouse
    2022.01.18 12:20:49.614234 [ 253 ] {} <Fatal> BaseDaemon: 6. DB::HTTPServerConnection::run() @ 0x1313c948 in /usr/bin/clickhouse
    2022.01.18 12:20:49.614241 [ 253 ] {} <Fatal> BaseDaemon: 7. Poco::Net::TCPServerConnection::start() @ 0x15d6e96f in /usr/bin/clickhouse
    2022.01.18 12:20:49.614248 [ 253 ] {} <Fatal> BaseDaemon: 8. Poco::Net::TCPServerDispatcher::run() @ 0x15d70d61 in /usr/bin/clickhouse
    2022.01.18 12:20:49.614254 [ 253 ] {} <Fatal> BaseDaemon: 9. Poco::PooledThread::run() @ 0x15e85709 in /usr/bin/clickhouse
    2022.01.18 12:20:49.614261 [ 253 ] {} <Fatal> BaseDaemon: 10. Poco::ThreadImpl::runnableEntry(void*) @ 0x15e82e40 in /usr/bin/clickhouse
    2022.01.18 12:20:49.614271 [ 253 ] {} <Fatal> BaseDaemon: 11. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
    2022.01.18 12:20:49.614282 [ 253 ] {} <Fatal> BaseDaemon: 12. clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so

    Что я не так делаю ?
  • Баг похоже. А если добавить wait for query end? (Точное название в хелпе хттп)
  • https://t.me/clickhouse_ru
    @iusik ↶ Reply to #253834 #253835 09:30 AM, 18 Jan 2022
    http://stage_ch_haproxy.stage_octo:8123/?wait_end_of_query=1&database=statistic&user=default&password=****&wait_end_of_query=1&query=select dictGetString('dict.geo_city_en','country_name', toUInt64(2997838)) as Country_DictName FORMAT JSON
    Также (

    Возможно проблема связанна с тем что у нас словарь достает данные из S3 ?
  • Тогда б в консоли валилось. А если формат Csv?
  • https://t.me/clickhouse_ru
    @iusik ↶ Reply to #253836 #253837 09:34 AM, 18 Jan 2022
    CSV работает
  • Ну баг пилите, явно с форматированием проблема
  • https://t.me/clickhouse_ru
    @iusik ↶ Reply to #253838 #253839 09:43 AM, 18 Jan 2022
    Окей, кстати таких ошибок нет в версии: 21.10.5.3
    Только что проверил.
  • @kurbat #253840 09:49 AM, 18 Jan 2022
    Добрый день! Подскажите пожалуйста, при релизе clickhouse keeper будет ли возможность поднять кластер из 2ух серверов? Или только 3+ ?
  • ¯\_(ツ)_/¯
  • 3, 5, 7.... остальное от лукавого
  • https://t.me/clickhouse_ru
    @vanyasvl #253843 09:49 AM, 18 Jan 2022
    Добрый день. А подскажите по индексам в кликхаусе, из документации не понял до конца. Есть.таблица, в которой нужна сортировка по одному полю (дата/время) и просто индекс по нескольким другим полям, пишу так
    PRIMARY KEY (SrcAddrIPv4, DstAddrIPv4)
    ORDER BY TimeFlowStart
    и получаю ошибку
    DB::Exception: Primary key must be a prefix of the sorting key, but its length: 2 is greater than the sorting key length: 1. (BAD_ARGUMENTS)
  • https://t.me/clickhouse_ru
    @vanyasvl #253844 09:50 AM, 18 Jan 2022
    количество полей в primary key нельзя делать больше чем в order by? почему?
  • primary key может быть меньше чем order by.
    наоборот нет
  • @dj_mixer #253846 09:51 AM, 18 Jan 2022
    PRIMARY KEY (SrcAddrIPv4, DstAddrIPv4)
    ORDER BY SrcAddrIPv4, DstAddrIPv4, TimeFlowStart
  • @dj_mixer #253847 09:51 AM, 18 Jan 2022
    так можно
  • https://t.me/clickhouse_ru
    так тут поля одни и те же в order by и primary key, или я что-то не понимаю про primary key?
    PRIMARY KEY — первичный ключ, если он отличается от ключа сортировки.
    а у вас не отличается
  • https://t.me/clickhouse_ru
    @vanyasvl #253849 09:54 AM, 18 Jan 2022
    И по order by я верно понимаю же, что в случае
    ```ORDER BY TimeFlowStart, SrcAddrIPv4, DstAddrIPv4``` вначале будет сортировка во времери, потом по src, и внутри src уже по dst и соответственно выборка только по dst будет не такая быстрая как по src?
  • отличается, я же поле добавил в конец
  • зависит от корреляции полей... в идеале вначало нужно выводить то, что всегда есть в запросе в where
  • можете дополнительно навешать скип-индексы
  • https://t.me/clickhouse_ru
    в where src=a OR dst=a
  • при OR вообще мало что поможет. вы проверьте если selectivity низкий может вам prewhere поможет
  • https://t.me/clickhouse_ru
    @vanyasvl #253856 10:01 AM, 18 Jan 2022
    а про Primary Key я так и не понял, какой в нем смысл, если его поля уже есть в order by?
  • https://t.me/clickhouse_ru
    @vanyasvl #253857 10:02 AM, 18 Jan 2022
    как и где он помогает?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253853 #253858 10:02 AM, 18 Jan 2022
    тут будет full scan, и непонятно чем тут prewhere поможет. Я бы переиграл схему хранения, сделав избыточность - две строки из одной: (src ipv4, ts dateTime, data String) order by src, тогда выборка будет быстрой
  • prewhere позволит сначала пройтись по этим колонкам и только потом читать другие нужные в тех гранулах где найдены эти срц/дст
  • https://t.me/clickhouse_ru
    Тут довольно понятно описано, что и как https://habr.com/ru/post/539538/
  • не будет, у там OR
  • раньше это было одним и тем же. теперь primary key можно делать короче, потому что он в памяти лежит полностью
  • https://t.me/clickhouse_ru
    Тут не понял, а dst где?
  • https://t.me/clickhouse_ru
    Тут только про ORDER BY же
  • https://t.me/clickhouse_ru
    @kirilldikalin #253865 10:10 AM, 18 Jan 2022
    Всем привет!
    Кто-то может поянить эту штуку https://clickhouse.com/docs/ru/sql-reference/table-functions/postgresql/?
    У меня есть пустая таблица в кликхаусе и запрос в постгрес, нужно результат запроса запылесосить в эту таблицу
    postgresql | Документация ClickHouse

    postgresql Позволяет выполнять запросы SELECT и INSERT над таблицами удаленной БД PostgreSQL. Синтаксис postgresql('host

  • https://t.me/clickhouse_ru
    Точно не про первичный индекс идёт рассказ
  • https://t.me/clickhouse_ru
    Позволяет выполнять запросы SELECT и INSERT над таблицами удаленной БД PostgreSQL.
  • insert into your_table select * from postgresql(host, port, db.., table_name)
  • https://t.me/clickhouse_ru
    Такой запрос на стороне клика выполняется?
  • конечно
  • https://t.me/clickhouse_ru
    Он получит данные из pg в ch.
  • https://t.me/clickhouse_ru
    @kirilldikalin #253872 10:14 AM, 18 Jan 2022
    Ок попробую, спасибо!
  • https://t.me/clickhouse_ru
    @BaburovNik #253873 10:18 AM, 18 Jan 2022
    в клике есть разница в производительности count(1) и count(*) ?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253859 #253874 10:18 AM, 18 Jan 2022
    я знаю что такое prewhere, но вы справедливо заметили, что OR все портит. Ну выбрала она src по индексу и что? dst вне индекса и связано OR -> начинаем читать все подряд.
  • @theo_inside #253876 10:19 AM, 18 Jan 2022
    Всем привет.
    Возникла проблема при коннекте к amazon S3.
    При использовании движка таблицы S3 или табличной функции s3 при любом запросе выдаёт следующую ошибку:
    DB::Exception: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Bad URI syntax: bad or invalid port number: 0 (version 21.8.10.1.altinitystable (altinity build)): While executing S3 (version 21.8.10.1.altinitystable (altinity build))
    Не совсем понимаю, с чем связана ошибка и как её можно исправить.
  • select * from tbl
    prewhere src=a or dst=b
    where type=aaaa

    будет быстрее если выбирается малый процент после условия в prewhere
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253863 #253878 10:20 AM, 18 Jan 2022
    не будет больше dst. развертываем одну строку src, dst, ts, data в две строки ip, ts, data, где ip будет сначала src, а потом dst. Количество строк увеличится вдвое, зато будет работать индекс.
  • https://t.me/clickhouse_ru
    У меня весь запрос, это дата, src or dst, доп полей не надо
  • https://t.me/clickhouse_ru
    А значения через двоеточия передаются? В примере просто вообще не понятно. У меня вот есть
    "host='rt-is-pgdb-p3.trcont.ru' port=5432 dbname='account_prospective' user='u_tereshkindv'" Как это будет выглядеть? А таблица в постгресе вообще account_prospective.public.trc_agent_plans
  • тогда вам prewhere не поможет. можете сделать partition по toDate(TimeFlowStart) например а primary key ipAddr, ну и делать по две строки как Борис сказал
    TimeFlowStart, ipAddr, srcdstflag
  • postgresql(‘host:port’, ‘database’, ‘schema.table’, ‘user’, ‘password’)
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253865 #253883 10:22 AM, 18 Jan 2022
    если вам надо 1 раз, то я бы рекомендовал через пайп - psql | clickhouse.
  • https://t.me/clickhouse_ru
    Теперь понял, спасибо
  • а сам запрос покажите
  • https://t.me/clickhouse_ru
    DB::Exception: Unable to connect to any of the replicas (version 21.8.12.29 (official build))
  • https://t.me/clickhouse_ru
    Наверное с этим bad or invalid port number: 0
  • https://t.me/clickhouse_ru
    Вообще один раз да, а как через пайп это сделать?
  • значит недоступен хост/порт из клика, через psql можете подключиться с сервера?
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253888 #253890 10:29 AM, 18 Jan 2022
    psql генерит CSV, clickhouse-client - читает (TSV на самом деле)
  • https://t.me/clickhouse_ru
    А да, я так сначала сделал, но видимо из-за запятых в данных падает при вставке
  • https://t.me/clickhouse_ru
    Да такой формат работает из терминала
    psql "host='rt-is-pgdb-p3.trcont.ru' port=5432 dbname='account_prospective' user='u_tereshkindv'"
  • https://t.me/clickhouse_ru
    @bvt123 ↶ Reply to #253891 #253893 10:34 AM, 18 Jan 2022
    запятые не должны быть проблемой - они эскейпятся. Смотрите как у вас экспорт идет из pg.
  • https://t.me/clickhouse_ru
    в 21.12 проверьте на всякий случай
  • https://t.me/clickhouse_ru
    Я так делаю обычно \copy (select * from table) TO 'путь' (format CSV);
  • select *
    from s3(
    's3://some_name/bucket_name/data-locker-hourly/t=installs/dt=2022-01-14/h=12/app_id=some_id/part-00000-4ce28849-e1ce-48d3-a04f-2c42a82ede56.c000.csv.gz',
    'key_id',
    'secret_key',
    'CSV',
    'app_id String',
    'gzip'
    )
  • Не совсем понимаю, где именно находится хост/порт, который недоступен.
  • там формат нужен через https

    "https://#{bucket_name}.s3.#{aws_config[:region]}.amazonaws.com/#{events_path}/t=#{event}/dt=#{date}/h=*/part-*.gz"
  • https://t.me/clickhouse_ru
    пинганул хост вставил в запрос теперь ClickHouse exception, code: 159, host: rc1a-z7nhduhuudskxq2w.mdb.yandexcloud.net, port: 8443; Read timed out
  • А, понял. Попробую так.
  • вы это на сервере с кликом всё пробуете делать или в локальном терминале?
  • https://t.me/clickhouse_ru
    В dbeaver
  • я не знаю как реагировать, это не ответ на вопрос) скорее всего это значит локально, что значит что сервер кликхауса может не видеть сервер постгреса, в отличие от “dbeaver”, и в таком случае вам может быть проще разобраться в CSV и psql | clickhouse-client, чем разбираться с сетью
  • https://t.me/clickhouse_ru
    @letasm #253904 11:00 AM, 18 Jan 2022
    ребят, а подскажите, пожалуйста, сейчас можно в кликхаусе делать row_number() каким-либо способом? или окошек пока нет
  • https://t.me/clickhouse_ru
    Есть оконные функции
  • https://t.me/clickhouse_ru
    @kirilldikalin #253906 11:23 AM, 18 Jan 2022
    Кстати ещё подскажите пожалуйста
    GRANT SELECT ON <имя базы данных>.* TO <имя пользователя>;
    Это права для пользователя на чтение, а как дать права для создания таблиц и т.д
  • GRANT | Документация ClickHouse

    GRANT Присваивает привилегии пользователям или ролям ClickHouse. Назначает роли пользователям или другим ролям. Отозвать

  • https://t.me/clickhouse_ru
    @iusik ↶ Reply to #253894 #253908 11:26 AM, 18 Jan 2022
    А в 21.12 работает все хорошо.
  • https://t.me/clickhouse_ru
    Да там просто ALL вместо SELECT )
  • https://t.me/clickhouse_ru
    @letasm ↶ Reply to #253905 #253910 11:39 AM, 18 Jan 2022
    а как назывется аналогк row_number? и чтобы был partition по студенту например?
  • https://t.me/clickhouse_ru
    Прочие функции | Документация ClickHouse

    Прочие функции hostName() Возвращает строку - имя хоста, на котором эта функция была выполнена. При распределённой обраб

  • так и называется, row_number

    SELECT
    number,
    row_number() OVER (PARTITION BY group)
    FROM
    (
    SELECT
    number,
    number % 3 AS group
    FROM numbers(10)
    )

    Query id: c89a1914-4891-4ec6-a55e-eb067bf790e6

    ┌─number─┬─row_number() OVER (PARTITION BY group)─┐
    │ 0 │ 1 │
    │ 3 │ 2 │
    │ 6 │ 3 │
    │ 9 │ 4 │
    │ 1 │ 1 │
    │ 4 │ 2 │
    │ 7 │ 3 │
    │ 2 │ 1 │
    │ 5 │ 2 │
    │ 8 │ 3 │
    └────────┴────────────────────────────────────────┘
  • https://t.me/clickhouse_ru
    @kirilldikalin #253913 12:06 PM, 18 Jan 2022
    Кто-нибудь знает какое максимальное количество max_memory_usage можно установить?
  • @Enjoyq #253914 12:11 PM, 18 Jan 2022
    Всем привет, при вставке csv в столбце DateTime() CH добавляет по 5 часов, можно как-то таймштампы as is вставлять?
  • https://t.me/clickhouse_ru
    Какой часовый пояс у вас у CH? select timezone()
  • https://t.me/clickhouse_ru
    При вставке такая история:
    parsed text: "<DOUBLE QUOTE><DOUBLE QUOTE>"
  • вообще какое хотите ставьте
  • format_csv_allow_single_quotes = 0 пробовали? или format_csv_allow_double_quotes
  • @214612813 #253921 12:37 PM, 18 Jan 2022
    Добрый день, подскажите пожалуйста, как заставить выполнить подзапрос на локальной таблице при обращении к distributed:
    Запрос вида: SELECT a FROM distributed_table WHERE bitmapContains((SELECT groupBitmapAndState(field) FROM local_table WHERE param = 'some'), b)
    Таблицы совершенно разные (distributed_table не смотрит на local_table).
  • https://t.me/clickhouse_ru
    Попробовал, не помогло
  • https://t.me/clickhouse_ru
    тогда скорее всего какой то решенные issue
    если на продакшене нельзя обновиться на 21.12 то обновитесь до последнего 21.11
  • если разово выполнить то можно добавить _shard_num=<нужный вам шард>
  • Не совсем, нужно чтобы каждый шард выполнил подзапрос локально. Ищу решение.
  • https://t.me/clickhouse_ru
    Я знаю про in, join что они могут делаться на каждом из шардов. А про ваш случай, впервые слышу. Bitmap как я помню написали Китайцы, поищите на китайской версии доки возможные решения.
  • @214612813 #253928 12:57 PM, 18 Jan 2022
    Тут не в битмапах дело, на их месте может быть любой подзапрос к локальной таблице.
  • @214612813 #253929 12:58 PM, 18 Jan 2022
    Как же не хватает Den Crane тут (
  • https://t.me/clickhouse_ru
    Создай issue и он там тебе ответит :))
  • @214612813 #253931 12:59 PM, 18 Jan 2022
    Жду пока тут, есть ещё, уверен, много знающих
  • Кстати, да! Он мне через issue помог разобраться с запросом.
  • https://t.me/clickhouse_ru
    @Shegloff #253933 01:05 PM, 18 Jan 2022
    # cat query.sql | clickhouse-client
    Code: 62. DB::Exception: Syntax error: failed at position 262140 ('4435254'): 4435254, 2402984, 2515436, 3139174, 2917865, 2997295, 4501400, 783027, 787959, 1430640, 2874554, 2922500, 3101446, 3111016, 4506577, 2628313, 241701, 1974531, 7. Max query size exceeded

    При этом max_query_size в профиле увеличено:

    # clickhouse-client -q "select * from system.settings where name = 'max_query_size'"
    max_query_size 524288000 1 Which part of the query can be read into RAM for parsing (the remaining data for INSERT, if any, is read later) \N \N 0 UInt64

    Если указать clickhouse-client --max_query_size 10000000, то запрос отрабатывает.

    Почему в первом запросе срабатывает дефолтовый лимит в 256 Кб? И не подхватывается настройка max_query_size из профиля. Версия 21.8.10.19.
  • https://t.me/clickhouse_ru
    @kirilldikalin #253934 01:07 PM, 18 Jan 2022
    Если у меня дата в формате 2021-05-11 какой тип указать в таблице?
    Ошибка: ERROR: DateTime must be in YYYY-MM-DD hh:mm:ss or NNNNNNNNNN (unix timestamp, exactly 10 digits) format.
  • https://t.me/clickhouse_ru
    @orantius #253935 01:07 PM, 18 Jan 2022
    Date?
  • https://t.me/clickhouse_ru
    Кстати да, спасибо ахах
  • https://t.me/clickhouse_ru
    @Lacost_e #253938 01:14 PM, 18 Jan 2022
    а есть где то какая либо документация по использованию postgresql_port в клике? в офф доке не нашел
  • @Enjoyq ↶ Reply to #253915 #253939 01:17 PM, 18 Jan 2022
    Europe/Berlin
  • @Enjoyq ↶ Reply to #253915 #253940 01:18 PM, 18 Jan 2022
    причем в 2 строках он по 4 часа добавил, а в одной 3
  • @Enjoyq ↶ Reply to #253915 #253941 01:25 PM, 18 Jan 2022
    Все, победил, поставил в поле DateTime таймзону, которая стоит в бд из которой приходят csv
  • https://t.me/clickhouse_ru
    @kizimenko #253942 01:28 PM, 18 Jan 2022
    я правильно понимаю логику, если мне нужно в существующей таблице добавить колонку domain, которая при INSERT должна вычиляться как domainWithoutWWW(page_url) и записываться

    То я добавляю колонку с DEFAULT expr и чтоб записать все исторические данные запускаю ALTER TABLE t MATERIALIZE COLUMN domain
  • можно и без альтер, КХ при запросе на лету подсчитает
  • https://t.me/clickhouse_ru
    подсчитает и запишет или каждый раз будет считать?
  • https://t.me/clickhouse_ru
    Будет считать,

    Пересчитает и запишет при мерже (или MATERIALIZE или UPDATE xxx = xxx WHERE 1)
  • https://t.me/clickhouse_ru
    Спасибо
  • @simpl1g #253947 02:54 PM, 18 Jan 2022
    А ктонить тестил/юзал firebolt.io? это форк кликхауса 3-летней давности перепиленный под AWS, compute/storage нормально разделены.
  • https://t.me/clickhouse_ru
    Меня сильно смутило полное отсутствие DELETE/UPDATE (я не смог ничего найти про них)
    Как то грустновато получается
  • https://t.me/clickhouse_ru
    ;) форк приватный
    так что особо не потестируешь
  • ага, предлагают только drop/replace partition
  • https://t.me/clickhouse_ru
    О, ну хотя бы так
  • https://t.me/clickhouse_ru
    @unamedrus #253953 03:04 PM, 18 Jan 2022
    А откуда инфа про 3 летняя давность?
  • ну это примерно, 2.5 года самой компании, пилить немного раньше начали, вот и выходит года 3
  • https://t.me/clickhouse_ru
    ну hydrolix (другой форк кх) в последний раз когда я проверял были на 21.3
  • @mminaev #253956 03:09 PM, 18 Jan 2022
    Привет. А можно как-то узнать, какой пользователь создал таблицу в КХ(может где то в метаинформации хранится, но в system.tables не нашел)? Понятное дело что system.query_log уже ротировалсяу
  • https://t.me/clickhouse_ru
    ну можно попробовать в
    grep -r table_name /var/lib/clickhouse-server/ | head

    но логи конечно тоже могли отротироваться давно
  • а есть про них какие-то отзывы? а то что-то скудно в интернете
  • @dj_mixer #253959 03:34 PM, 18 Jan 2022
    никто ещё не делал обзор форков? а то КХ инк как-то ушёл совсем в сторону клаудфич, баги объявляют ФРами а ФРы закрывают, кровавый энтерпрайз страдает.
  • https://t.me/clickhouse_ru
    Для кровавого энтерпрайза обещали сделать промежуточный формат, когда часть колонок будет хранится в compact-like виде
  • а тикет есть где следить и надеятся?
  • https://t.me/clickhouse_ru
    Support of dynamic subcolumns in tables. · Issue #23516 · ClickHouse/ClickHouse

    Inroduce new data type Object(<schema format>), which will get the name of format for semi-structured data (JSON, XML, etc.). Initially it will work only with MergeTree tables. Maybe ...

  • кстати вот про firebolt пару дней назад как раз написали)
    https://altinity.com/blog/database-on-fire-reflections-on-embedding-clickhouse-in-firebolt
  • ну тогда опять таки нужно set unused сюда...
  • https://t.me/clickhouse_ru
    Да и всякие кровавые интерпрайзы к нам приглашаем, благо вашего собрата у нас уже немало :)

    Плюс вашу SET UNUSED мб с помощью такого можно будет сделать.

    https://github.com/ClickHouse/ClickHouse/issues/9436
    "ephemeral" or "dematerialized" columns · Issue #9436 · ClickHouse/ClickHouse

    Special type of column. This column can be INSERTed and can be referred in default expressions of another columns, but it is not stored in a table and cannot be SELECTed. Use case Calculate other c...

  • это не то же... больше про мап, плюс инпуты везде менять.. а тут простой случай в виде много таблиц с 1000-5000 плоских колонок на много партиций...
  • https://t.me/clickhouse_ru
    Ну, я думаю если такой способ хранения колонок будет сделан, то он будет доступен сразу для разных колонок. как например sparse сделали же и для обычных.
  • т.е. тип текущей колонки можно менять на ephemeral? не похоже. суть была в том чтоб избежать большого кол-ва ненужных мутаций с удалением старых данных...
  • https://t.me/clickhouse_ru
    Сейчас можно менять на MATERIALIZED допустим, не вижу причин почему бы нельзя это было делать на ephemeral (если они будут добавлены)
  • @oix555 #253970 03:47 PM, 18 Jan 2022
    @tron_wai все-таки поиск требует некотрой экранировки
  • @oix555 #253971 03:49 PM, 18 Jan 2022
    ldapsearch -x -H ldaps://corp.dev.com -b "dc=corp,dc=dev,dc=com" -D "CORP\spetrov" -W -LLL -s sub '(&(objectClass=group)(member=CN=Петров Сергей Иванович \(4049577)\,ou=Developers Users,OU=DEV,DC=corp,DC=dev,DC=com))'
  • https://t.me/clickhouse_ru
    Только что попробовал сделать так же с помощью ALIAS

    И вроде inode не поменялась

    /var/lib/clickhouse/data/default/xxx_test_alias# ls -li ./all_*/*
    1352383 -rw-r----- 1 clickhouse clickhouse 214 Jan 18 18:47 ./all_1_1_0/checksums.txt
    1352381 -rw-r----- 1 clickhouse clickhouse 65 Jan 18 18:47 ./all_1_1_0/columns.txt
    1352380 -rw-r----- 1 clickhouse clickhouse 7 Jan 18 18:47 ./all_1_1_0/count.txt
    1352382 -rw-r----- 1 clickhouse clickhouse 10 Jan 18 18:47 ./all_1_1_0/default_compression_codec.txt
    1352376 -rw-r----- 1 clickhouse clickhouse 4004915 Jan 18 18:47 ./all_1_1_0/key.bin
    1352377 -rw-r----- 1 clickhouse clickhouse 2976 Jan 18 18:47 ./all_1_1_0/key.mrk2
    1352375 -rw-r----- 1 clickhouse clickhouse 992 Jan 18 18:47 ./all_1_1_0/primary.idx
    1352378 -rw-r----- 1 clickhouse clickhouse 4004915 Jan 18 18:47 ./all_1_1_0/value.bin
    1352379 -rw-r----- 1 clickhouse clickhouse 2976 Jan 18 18:47 ./all_1_1_0/value.mrk2
    489396 -rw-r----- 1 clickhouse clickhouse 188 Jan 18 18:47 ./all_2_2_0/checksums.txt
    489354 -rw-r----- 1 clickhouse clickhouse 65 Jan 18 18:47 ./all_2_2_0/columns.txt
    489238 -rw-r----- 1 clickhouse clickhouse 3 Jan 18 18:47 ./all_2_2_0/count.txt
    489193 -rw-r----- 1 clickhouse clickhouse 860 Jan 18 18:47 ./all_2_2_0/data.bin
    489194 -rw-r----- 1 clickhouse clickhouse 80 Jan 18 18:47 ./all_2_2_0/data.mrk3
    489395 -rw-r----- 1 clickhouse clickhouse 10 Jan 18 18:47 ./all_2_2_0/default_compression_codec.txt
    489180 -rw-r----- 1 clickhouse clickhouse 16 Jan 18 18:47 ./all_2_2_0/primary.idx

    ALTER TABLE xxx_test_alias MODIFY COLUMN value ALIAS 0;

    /var/lib/clickhouse/data/default/xxx_test_alias# ls -li ./all_*/*
    1352383 -rw-r----- 1 clickhouse clickhouse 214 Jan 18 18:47 ./all_1_1_0/checksums.txt
    1352381 -rw-r----- 1 clickhouse clickhouse 65 Jan 18 18:47 ./all_1_1_0/columns.txt
    1352380 -rw-r----- 1 clickhouse clickhouse 7 Jan 18 18:47 ./all_1_1_0/count.txt
    1352382 -rw-r----- 1 clickhouse clickhouse 10 Jan 18 18:47 ./all_1_1_0/default_compression_codec.txt
    1352376 -rw-r----- 1 clickhouse clickhouse 4004915 Jan 18 18:47 ./all_1_1_0/key.bin
    1352377 -rw-r----- 1 clickhouse clickhouse 2976 Jan 18 18:47 ./all_1_1_0/key.mrk2
    1352375 -rw-r----- 1 clickhouse clickhouse 992 Jan 18 18:47 ./all_1_1_0/primary.idx
    1352378 -rw-r----- 1 clickhouse clickhouse 4004915 Jan 18 18:47 ./all_1_1_0/value.bin
    1352379 -rw-r----- 1 clickhouse clickhouse 2976 Jan 18 18:47 ./all_1_1_0/value.mrk2
    489396 -rw-r----- 1 clickhouse clickhouse 188 Jan 18 18:47 ./all_2_2_0/checksums.txt
    489354 -rw-r----- 1 clickhouse clickhouse 65 Jan 18 18:47 ./all_2_2_0/columns.txt
    489238 -rw-r----- 1 clickhouse clickhouse 3 Jan 18 18:47 ./all_2_2_0/count.txt
    489193 -rw-r----- 1 clickhouse clickhouse 860 Jan 18 18:47 ./all_2_2_0/data.bin
    489194 -rw-r----- 1 clickhouse clickhouse 80 Jan 18 18:47 ./all_2_2_0/data.mrk3
    489395 -rw-r----- 1 clickhouse clickhouse 10 Jan 18 18:47 ./all_2_2_0/default_compression_codec.txt
    489180 -rw-r----- 1 clickhouse clickhouse 16 Jan 18 18:47 ./all_2_2_0/primary.idx
  • https://t.me/clickhouse_ru
    попробуйте так:

    ldapsearch -x -H 'ldaps://corp.dev.com' -b 'dc=corp,dc=dev,dc=com' -D 'CORP\spetrov' -W -LLL -s sub '(&(objectClass=group)(member=CN=Петров Сергей Иванович \284049577\29,ou=Developers Users,OU=DEV,DC=corp,DC=dev,DC=com))'
  • https://t.me/clickhouse_ru
    @tron_wai #253974 04:00 PM, 18 Jan 2022
    на днях помержен был этот PR, который тут применим, и может исправить ситуацию: https://github.com/ClickHouse/ClickHouse/pull/33401
    Update LDAPClient.cpp by IlyaTsoi · Pull Request #33401 · ClickHouse/ClickHouse

    Create a function escapeForLDAPFilter and use it to escape characters '(' and ')' in a final_user_dn variable that we receive from the LDAP server. This is necessary...

  • @oix555 #253975 04:00 PM, 18 Jan 2022
    так работает,мы так поняли,что проблема в библиотеке ,которая используется в ldapsearch
  • @oix555 #253976 04:01 PM, 18 Jan 2022
    т.е у нас в конце в dn скобки,поиск конечно ломается
  • https://t.me/clickhouse_ru
    ldapsearch сама часть библиотеки OpenLDAP
  • @oix555 #253978 04:01 PM, 18 Jan 2022
    да,все верно,оговорился
  • https://t.me/clickhouse_ru
    да, и их надо заменять на спец экранирование, см PR, и то, на что я их заменил
  • @oix555 ↶ Reply to #253979 #253980 04:03 PM, 18 Jan 2022
    а что делать с user_dn ? будет ли что-то в виде парсинга ?
  • https://t.me/clickhouse_ru
    в каком смысле парсинг? Он вычисляется при помощи отдельного search, и потом подставляется, но с PR-ом этим, он будет экранироваться правильно (скобки)
  • https://t.me/clickhouse_ru
    @tron_wai #253982 04:04 PM, 18 Jan 2022
    попробуйте самый свежий билд кликхауса
  • https://t.me/clickhouse_ru
    @tron_wai #253983 04:05 PM, 18 Jan 2022
    если проблема в скобках была, должно начать работать
  • @oix555 ↶ Reply to #253982 #253984 04:05 PM, 18 Jan 2022
    а все увидел мерж,спасибо
  • https://t.me/clickhouse_ru
    @Vitaly_Ivanov #253986 04:35 PM, 18 Jan 2022
    Друзья, подскажите пробовал ли кто-то делать что-то похожее: 2 таблицы одна для свежих данных которые приходится часто передобавлять заново PARTITION BY toYYYYMMDD и другая PARTITION BY toYYYYMM для старых данных, с одинаковой структурой и перемещать куски из одной в другую в конце месяца
  • https://t.me/clickhouse_ru
    @Glandike #253987 04:40 PM, 18 Jan 2022
    Доброго времени суток!
    Приключилась неожиданная проблема: обновили кластер с 21.9 до 21.12, никаких ошибок не возникло. Но любые внешние клиенты при попытке выполнения любых запросов падают в серверную ошибку. При чем не важно нативный драйвер или HTTP, ошибка одинаковая и не поддается идентификации или гуглению. При этом запросы через clickhouse-client на сервере выполняются успешно!
  • https://t.me/clickhouse_ru
    @evegni #253988 04:40 PM, 18 Jan 2022
    Привет. А в кх есть другие возможности авторизации кроме пары логин пароль?
    Что-то в доке ничего не вижу.
  • https://t.me/clickhouse_ru
    @Glandike #253989 04:41 PM, 18 Jan 2022
    HTTP драйвер
    Caused by: ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: ****, port: 8123; std::exception. Code: 1001, type: std::out_of_range, e.what() = unordered_map::at: key not found (version 21.12.3.32 (official build))

    Нативный драйвер с расширенным стек трейсом:

    ServerException('
    DB::Exception: std::out_of_range: unordered_map::at: key not found. Stack trace:\n\n0. std::logic_error::logic_error(char const*) @ 0x192404ad in ?\n1. ? @ 0xad576e9 in /usr/bin/clickhouse\n2. ? @ 0xad576a0 in /usr/bin/clickhouse\n3.
    DB::SettingsProfilesInfo::getProfileNames() const @ 0x1337c9f1 in /usr/bin/clickhouse\n4.
    DB::SessionLog::addLoginSuccess(StrongTypedef<wide::integer<128ul, unsigned int>, DB::UUIDTag> const&, std::1::optional<std::1::basic_string<char, std::1::char_traits<char>, std::1::allocator<char> > >,
    DB::Context const&) @ 0x1337c2f6 in /usr/bin/clickhouse\n5.
    DB::Session::makeQueryContextImpl(
    DB::ClientInfo const*,
    DB::ClientInfo*) const @ 0x1337250a in /usr/bin/clickhouse\n6. DB::TCPHandler::receiveQuery() @ 0x13fe9624 in /usr/bin/clickhouse\n7. DB::TCPHandler::receivePacket() @ 0x13fde8f6 in /usr/bin/clickhouse\n8. DB::TCPHandler::runImpl() @ 0x13fd7a4f in /usr/bin/clickhouse\n9. DB::TCPHandler::run() @ 0x13fec4b9 in /usr/bin/clickhouse\n10. Poco::Net::TCPServerConnection::start() @ 0x16f3d6af in /usr/bin/clickhouse\n11. Poco::Net::TCPServerDispatcher::run() @ 0x16f3fb01 in /usr/bin/clickhouse\n12. Poco::PooledThread::run() @ 0x1704e889 in /usr/bin/clickhouse\n13. Poco::ThreadImpl::runnableEntry(void*) @ 0x1704bf80 in /usr/bin/clickhouse\n14. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so\n15. __clone @ 0xfe96d in /usr/lib64/libc-2.17.so\n')
  • Добрый вечер, конечно делали)
  • https://t.me/clickhouse_ru
    Делают,

    dirty-clean таблицы.

    Разве что нельзя делать ATTACH между таблицами с разными PARTITION BY выражением.
  • https://t.me/clickhouse_ru
    @Vitaly_Ivanov #253992 04:43 PM, 18 Jan 2022
    Спасибо за подсказки! Буду изучать!
  • https://t.me/clickhouse_ru
    @2082859456 #253993 04:43 PM, 18 Jan 2022
    Первый анонимный бот в телеграм - @nonameous_bot! С ним можно разыграть друга или признаться в любви, пошутить над коллегой, поделиться секретом и все на что хватит вашей фантазии! Попробуйте сами!
  • https://t.me/clickhouse_ru
    Кажется, что связано с сессиями и session key
  • https://t.me/clickhouse_ru
    Попробуйте сделать запрос через curl

    И его же вместе с передачей параметра сессии http://192.168.1.27:8123/?database=test1&session_id=12345
  • https://t.me/clickhouse_ru
    @Vitaly_Ivanov #253996 05:05 PM, 18 Jan 2022
    @unamedrus Можно вас попросить уточнить, вы говорили что:
    “нельзя делать ATTACH между таблицами с разными PARTITION BY выражением”
    подскажите, это относится к партициям или к кускам или и к тем и к другим?
  • https://t.me/clickhouse_ru
    Не важно указывать новую сессию, или нет, запрос выполняется. Создали новую учётку -- и для неё всё заработало из приложухи, а со всеми старыми учетками запросы падают в ошибку. Мы щас будем пересоздавать их, но вопрос -- что пошло не так?
  • https://t.me/clickhouse_ru
    К таблицам с разным PARTITION BY выражением. (вы не можете между ними перемещать партиции/парты)
  • https://t.me/clickhouse_ru
    Думаю с таким нужно в облачную поддержку, вообще странное что то