- 01 March 2022 (167 messages)
-
💚💚💚
-
там xml error жэ
-
узнать какая конкретно таблица падает надо узнав откуда идет линк на эту папку (в engine-atomic все таблицы хранятся в ууид папках с указателями):
ls -l /data/clickhouse/store/adf/adf01457-dd13-4c93-90b0-afb1a022254c
в вашем случае это метрик лог судя по колонке.
выключите metric_log в конфиге и удалите sql... на 4ГБ включать такое перебор наверно.
убираем в конфиге
https://github.com/ClickHouse/ClickHouse/issues/17735#issuecomment-737404868
(удаляем метадату)
rm /data/clickhouse/data/metadata/system/metric_log*
я бы и part_log, query_thread_log тоже убрал, либо выставил агрессивные TTL. -
Вопрос про ch-keeper. Как заставить его слушать внутренние соединения на ipv4 вместо ipv6?
listen_host=0.0.0.0 меняет только адрес для внешних соединений :2181, а :9444 он продолжает слушать на ::1 -
спасибо за разъяснения! Пока добавили памяти до 8Гб на каждой ноде - СН всё разобрал, ошибки ушли. Хотя по графику наоборот потребление памяти упало после добавления. Наверно, 4Гб действительно мало даже для ненагруженного экземпляра
-
покопался в исходниках, по-видимому нет такой возможности. В CoordinationSettings.h описан параметр enable_ipv6, только он по умолчанию true и ниоткуда не читается, ни с командной строки, ни из конфига. Печально.
-
Может проблема даже не в этом. Почему ch-keeper может не принимать соединения от одного из хостов? На другие порты соединения работают, а на :9444 connection refused. Это не фаервол, потому что там пакеты бы просто дропались и не было бы моментального ответа connection refused.
В обратную сторону тоже всё хорошо. -
9444 это SSL ?
-
Нет, это нешифрованый IPC для экземпляров ch-keeper
-
Только от одного хоста не можете подключиться ?
-
да, он даже pre_vote не может пройти, а остальные серверы образуют кворум нормально
-
идёт. и telnet на 22 порт тоже ок. и даже на 2181 ок (его слушает тот же keeper)
-
разница только в том, что:
tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 963540/clickhouse-k
tcp6 0 0 :::9444 :::* LISTEN 963540/clickhouse-k -
Как то всё странно
-
А те машины которые могут подключиться к 9444 могут подключиться к 2181 ?
-
да, могут
-
А на них тоже ipv4 ?
-
tcp 0 0 127.0.0.1:2181 0.0.0.0:* LISTEN 939417/clickhouse-k
tcp6 0 0 ::1:2181 :::* LISTEN 939417/clickhouse-k
tcp6 0 0 :::4999 :::* LISTEN 939417/clickhouse-k -
то же самое фактически. там listen_host не указан поэтому кипер слушает 2181 как попало. но это пока что не интересно
-
Я думаю проблема в каком-то механизме на машине которая не может подключиться ( Я не знаю глубоко как это работает) но предполагаю, что ipv6 порт не преобразуется или не строит типа nat при подключение на ipv4
-
и получается дичь ....
-
Это как предположение
-
так нету там ни nat ни чего другого, они к одной сети подключены.
-
видимо придётся переделать эту машину, т.к. на первых двух ubuntu, а на этой debian
-
::1:2181 - это ipv6 only адрес, а :::4999 - оба, v4 и v6
-
т.е. zookeeper слушает только ipv6
-
я только про порт 4999 сейчас спрашиваю, он везде на :::4999 слушается
-
Надеюсь, вам там со спокойным сердцем работается, пока ваши хуесосы убивают наших детей! А знаете в чем разница у нас безоружные бтр останавливают, а у вас толпа бежит от ОДНОГО.
-
/report
-
-
Ну по ходу не со спокойным , раз уж репортите
-
-
/report
-
харе политоту разводить просто... для этого есть отдельные флудилки! а тут технический чат
-
Я бы пользовалась этим чатом как ранее делала как техническим. Но , к сожалению у меня нет такой возможности, просто считала, что люди, которые развивались хоть немного с незамыленым взглядом!
-
Вот это зарепорти блядина
-
Да утомили вы со своей политикой, идите в другой чат, оставьте это для обсуждения КликХаусу
-
/report
-
-
-
-
-
если не хочется пользоваться чатом, как техническим и все тут замыленные и тд, как ты считаешь - обычно люди просто выходят из чатов
-
clickhouse as service есть у кого-то вне России, кто-то в курсе?
-
Просто надо закрывать группу и оставлять вступление в неё по предварительной верификации (например).
-
-
/report
-
И сделать полноценный форум, по которому удобнее искать решения
-
Технический вопрос: как удалить узел из ch-keeper? В конфиге я его закомментировал, но сервис после рестарта всё равно на него пытается ломиться, похоже он в снапшотах/логах записан
-
В Ваши города летят ракеты? В таком случае сочувствую
-
к моим родственникам по оба фронта летят ракеты, вам так станет легче?:)
-
Не интересно абсолютно, у вас есть в распоряжении тысяча групп, где вы можете выражать свое мнение об этом. Но явно не тут.
-
-
-
-
-
-
Нужно начинать оптимизировать планировщик запросов под 128кб
-
не видел такого добра
-
фиг знает, там данных за терабайты, а запросов много и сразу …
-
-
У AWS есть какой-то проект, я уже забыл совместно с какой-то дочкой яши. На мощностях AWS. И Alibaba cloud.
-
спасибо, глянем
-
Повторюсь, а то за политотой осталось без ответа: как удалить узел из ch-keeper? В конфиге я его закомментировал, но сервис после рестарта всё равно на него пытается ломиться, похоже он в снапшотах/логах записан
-
Ну или как мигрировать метаданные из ch-keeper в zookeeper?
-
Люди могут высказываться, в том числе и в технических чатах и где угодно. Это моя позиция, а не ClickHouse Inc к которой я не имею никакого отношения, если что.
По понятным причинам лютую жесть я буду удалять, но и смысла закапывать голову в песок я не вижу.
Да, сдержанность и холодную голову сейчас иметь стоит, и сидя на диване это проще - факт.
Могу сказать одно - выводы еще очень рано делать. -
Это много запросов одновременных?
-
Я 60г только при переливках в 3 потока видел, больше кх не получилось по памяти нагрузить
-
Привет, как чинить ClickHouse shard version is older than ClickHouse initiator version. It may lack support for new features. и следующее за ним Code: 261, e.displayText() = DB::Exception: Unknown BlockInfo field number: 5: While sending /var/lib/clickhouse/data/....? В директории с шардом накопилось много застрявших блоков, как их "протолкнуть"?
-
это данных много перелопачивает
-
-
А у вас настройка на ограничение group by стоит ?
-
-
Ограничения на сложность запроса | Документация ClickHouse
Ограничения на сложность запроса Ограничения на сложность запроса - часть настроек. Используются, чтобы обеспечить более
-
выключен, если речь про max_bytes_before_external_group_by
-
Ну кажись пора включить, а не добавлять оперативной памяти
-
А то завидно 🙈
-
-
-
-
Ну тогда смотреть запросы которые приходят, и как они работают с PK
-
просто много запросов сразу и разных. вот память и заканчивалась постоянно 🙁
-
-
тысячи их....
https://altinity.com/cloud-database/
https://bytehouse.cloud/
https://www.alibabacloud.com/product/clickhouse (eto hz)
https://opensee.io/solutions/ -
сильно зависит от запросов... если разнородные лучше разделить на пользователей и дать разные ограничения в профилях (кол-во потоков итд)
-
это будет сложно. код (и пользователь) один и тот же, а запросы - разные
-
-
-
С Уверенностью на 90%, нет
-
-
ну мы делаем проще, мы делаем в коде settings по типам запроса
-
и по мере плохих запросов чиним, добавляем "типы"
-
да это-то понятно, несколько пользователей. если код так умеет, конечно ...
-
-
-
вроде там что на лету можно менять, а что-то требует жёсткого рестарта
-
ну вот. Добавление нового топика с секретом требует рестарта, что очень не удобно, если инстанс большой. Хочется понять есть ли возможность обойтись без рестарта
-
Привет!
Подскажите пжлст, почему могут не работать оконные функции?
Версия 20.9.7.11 -
потому что в этой версии их нет. Переходите на 21.8
-
Супер, доходчиво. Спасибо! =)
Пойду просить обновлений -
Добрый день. Подсажите как мне описать таблицу для получения данных из kafka при условии что данные приходят в формате protobuf? Я попробовал подключить движок как описано тут https://clickhouse.com/docs/ru/engines/table-engines/integrations/kafka/ но не вижу ничего. Ни ошибок ни данныхKafka | Документация ClickHouse
Kafka Движок работает с Apache Kafka. Kafka позволяет: Публиковать/подписываться на потоки данных. Организовать отказоус
-
вряд ли вам кто-то поможет при таком способе задания вопроса. Ссылки на документацию обычно дают при ответе, а задавая вопрос вам стоит писать как конкретно вы делаете create table and create materialized view. версия сервера, формат протобуфа - все может оказаться важным.
-
Из документации как раз и не понятно, каким образом мне вынуть данные из топика в протобуфе
-
Если бы из нее было это понятно, я бы не задавал вопрос
-
Там пример приведен, только для JSONEachRow
-
непонятно что непонятно.
Делаете table engine = kafka, указываете Protobuf вместо JSONEachRow, как описано на странице формата, накрываете сверху MV с подходящим селектом. На каком этапе возникают проблемы? -
ClickHouse Kafka Engine Tutorial
Our colleague Mikhail Filimonov just published an excellent ClickHouse Kafka Engine FAQ. It provides users with answers to common questions about using stable versions, configuration parameters, standard SQL definitions, and many other topics. Even experienced users are likely to learn something new. But what if you are getting started and need help setting up Kafka and ClickHouse for the first time? Good news! This article is for you.
-
-
Тоже самое написано в той самой документации что приведено выше
-
-
Вы не правильно задаёте вопрос .... Как будто мы должны знать как ваши данные из кафки идут в clickhouse ... что за данные ... дайте хоть чучуть конкретики ... Что вы уже сделали ?
-
GitHub - tetafro/clickhouse-cluster: Simple clickhouse cluster with docker-compose
Simple clickhouse cluster with docker-compose. Contribute to tetafro/clickhouse-cluster development by creating an account on GitHub.
-
так это в контейнейре ) мне бы на сервере обычным
-
-
-
-
Вот то как я это туда помещаю
-
-
-
Вижу я на выходе что? Ничего
-
Tutorial | Документация ClickHouse
ClickHouse Tutorial What to Expect from This Tutorial? By going through this tutorial, you’ll learn how to set up a simp
-
ну это мы уже читали)) я вот неделю кликхаус учу и могу сказать что документация крайне ужасная у неё))
-
В кафку данные пакуются в протобуф. Я хочу их поймать и переложить в таблицу. Сначала делал как описано в документации с VIEW оно все срабатывает ошибок не дает, просто нет данных пусто и все
-
ClickHouse Cluster Settings
Settings and configurations for clusters and nodes
-
что то новое) спасибо)))
-
всем привет. прикручиваю кликхаус для хранения таймсерий с возможностью апдейта и пытаюсь понять, сколько нужно будет ресурсов для деплоймента.
сделал materialized view для хранения
...
SELECT a,
b,
c,
d,
e,
maxState(updated_millis) as updated_millis_state,
argMaxState(metric_value, updated_millis) as metric_value_state
...
пытаюсь забэкфиллить этот MV из исходной таблицы, где сейчас 1B значений при помощи
insert into metric_readings_deduped
select a, b, c, d, e, maxMerge(updated_millis_state) AS updated_millis, argMaxMerge(metric_value_state) as metric_value
from metric_readings
group by a,b,c,d,e
и локально у меня эта агрегация не проходит по памяти. вроде логично, данных много, но есть странное ощущение, что если metric_readings уже отсортирована по a,b,c,d,e то агрегация должна быть возможна в стиле mergeSort без выделения большого количества дополнительной памяти.
я правильно понимаю, что кликхаус этого не делает (пока)? -
Заглядывайте сюда ещё https://kb.altinity.com/, многое описано подробно
-
угу
спасибо) -
А где MV ?
-
Я для начала пытаюсь просто прочитать из таблицы, добавляю специальную опцию в документации написано что можно
-
похоже что вот тут у вас ошибка:
kafka_format = 'test:Operation',
тут нужно ставить имя формата. в вашем случае Protobuf. А описание схемы в format_schema, как указано тут - https://clickhouse.com/docs/ru/interfaces/formats/#protobuf -
Так указано в мануале что выше стоит
-
CREATE TABLE queue (
timestamp UInt64,
level String,
message String
) ENGINE = Kafka('localhost:9092', 'topic', 'group1', 'JSONEachRow'); -
в документации стоит так
-
??
kafka_format — формат сообщений. Названия форматов должны быть теми же, что можно использовать в секции FORMAT, например, JSONEachRow. Подробнее читайте в разделе Форматы. -
Я и говорю что в документации не хватает примеров
-
Допустим. Но куда класть settings и как они там выглядят? SELECT * FROM test.table FORMAT Protobuf SETTINGS format_schema = 'schemafile:MessageType'
-
И надо ли это туда класть?
-
В kafka_schema?
-
CREATE TABLE IF NOT EXISTS clickhouse.kafka_ops
(
account_number String, -- 40702810310000887003
operation_type String, -- debit
operation_status String, -- transaction
rrn String -- 123456789012
) ENGINE = Kafka()
SETTINGS
kafka_broker_list = 'kafka:9092',
kafka_topic_list = 'ops',
kafka_group_name = 'test',
kafka_format = 'Protobuf'
kafka_schema = 'test:Operation',
kafka_num_consumers = 4; -
К примеру так?
-
Тоже, кстати, интересен этот вопрос. Может кто знает?
-
да там всё просто (когда разобрался) 🙂
-
-
Та я учу пока) все варианты нужно знать)
-
-
-
-
Подскажите есть ли возможность запустить OPTIMIZE TABLE FULL на большую таблицу для которой CH по умолчанию не может выполнить мерж тк ему не хватает x2 места невзирая на последствия (возможно изменением какой то опции или оператором в sql)?
В логе сообщение - (MergerMutator): Won't merge parts from 202112_0_131470_13 to 202112_1779791_1779791_0 because not enough free space. -
Он мержит в новый файл, то есть место ему в любом случае нужно
-
Можно поставить zstd и сэкономить чутка места если не стоит
-
Или детачнуть что-то большое, унести, помержить, принести обратно и аттачнуть (но я не пробовал)
-
Или погрепать detached и прочий мусор, возможно можно найти что потереть чтобы освободить место
-
Там таблица graphitemergetree с rollup правилами которые схлопывают метрики - ни разу не видел чтобы на графике места на разделе с базой реально использовалось x2 места от партиции при мерже
-
Так а зачем тебе финалтзировать всю таблицу целиком? Финализируй по партициям. Они же у тебя по месяцам. Скорее всего 1 такая финализация 1 такой месячной партиции займет где то сутки.
-
Так я и не могу запуститить финализацию одной партиции за декабрь 202112 - метрик насыпало
-
А, ну тогда тут вариантов на самом деле несколько:
1. Мы когда то давно, патчили исходники КХ, и там меняли х2 требуемого места до х1.1, после чего ставили нашу версию на 1 инстанс реплики КХ, и делали финализация партиции. Возможно сейчас это можно сделать параметром в конфиге КХ. Но я честно говоря хз. -
2. Берешь старые партиции, отцепляешь их (detach), переносишь на соседний сервер, освобождая место на текущем кластере, и запускаешь финализацию. После того как она закончится, возвращаешь партицию.
-
-
3. Берешь ещё 1-2 сервака с hdd на 50Тб++, добавляешь их в существующий кластер КХ, и мигрируешь все исторические партиции (fetch+attach) на эти новые сервера. Таким образом ты создаёшь холодное хранилище исторических данных
-
Скорее всего ты скоро упрешся в место так, что этот параметр тебя больше не спасет, и нужно принимать более решительные меры.
-
-
Возможно ответ тут: https://github.com/ClickHouse/ClickHouse/issues/7047Force ignore the free space check in OPTIMIZE TABLE · Issue #7047 · ClickHouse/ClickHouse
Use case I've got a 500GB table on a 1.5TB volume. It has 20 partitions. I ran OPTIMIZE TABLE my_table; and it returned immediately, doing nothing. I looked at the server logs and saw 2019....
-
Возможно, что никак. Создайте вопрос в гитхабе
-
Никак
-
Привет, подскажите на счёт движка hdfs:
1. Если на hdfs лежат файлы (parquet) создать таблу с данным движком будет ли деградация в скорости работы с данной таблицей по сравнению с mergetree?
2. При удалении/добавлении файлов данные подтягиваются сразу при селекте или через какое то время?
3. Разумно ли вообще использовать данный движок для больших объёмов (~4млрд)? -
1. Будет намного медленнее
2. Данные будут доступны сразу, кэширования нет
3. Если есть возможность использовать нативный формат с мержтри, то нет смысла. - 02 March 2022 (136 messages)
-
Ну уж нет, я от этого поделия в итоге отказался, уж очень нетривиальная настройка у него + баги, баги, баги. Zk действительно ставится и работает в формате "apt install, пять строчек в конфиге, забыл о нём на года"
-
Да, в итоге приходится пересодавать кластер с нуля и перекачивать данные заново, но могу себе позволить :).
-
@kshvakov, @milovidov_an Коллеги, есть необычный вопрос:
- Мы используем CH в европейском продукте
- Консультанты пока неофициально попросили изучить вопрос вероятных альтернатив
Мне CH очень нравиться. И сам он и как он развивается и какие идеи закладываются.
Знаю, вы отделились в европейское Юр.лицо.
Изучаете ли вы эту проблему и есть ли какие-то рекомендации?
ВАЖНО: предлагаю политическую часть оставить за скобками и больше сфокусироваться на самой тех.угрозе... -
если вы используете opensource продукт, не клауд услугу, проблем нет нигде. т.е. он ничем от Постгрес не отличается.
ну и юр-лицо у них американское теперь. -
Кто-нибудь сталкивался с ошибками при сборке такого вида?
/src/Storages/PostgreSQL/StorageMaterializedPostgreSQL.cpp:355:25: error: redundant move in return statement [-Werror=redundant-move]
собираю на убунте 20.04 версию 22.2.3.5-stable по инструкции отсюда https://clickhouse.com/docs/en/development/build/
clang-14 поставил
есть ли какие-то ключи компилятора, не указаннные в инструкции, которые нужно установить?Build on Linux | ClickHouse DocumentationHow to Build ClickHouse on Linux Supported platforms: x86_64 AArch64 Power9 (experimental) Normal Build for Development
-
@dj_mixer О, поверьте, со стороны аудиторов это выглядит ни так...
Любая технология, в независимости от ее лицензирования, является частью инфраструктуры компании...
К томуже к Postgre тоже часто немало вопросов - но это уже другая история... -
Да, там есть третьесторонние проверки. Это нормально. Т.е. вам надо найти тех кто оценит
-
-
Мы в конечном итоге не смогли пользоваться никаким облачным CH, так как в хранимом присутствуют ПД. А использование облачного провайдера = передача ПД третьим организациям. Единственный вариант был развёртывание аутсорс кластера в нашем аккаунте AWS, но та организация, которая собиралась предоставлять такие услуги (через AWS Marketplace) сказала что модель bring-your-own-account не реализован и в планах на конец 2022 года. Так что если у вас ПД и вы скованы своими EULA/TOS в части их передачи, то только своими силами.
-
@dj_mixer при всем уважении, или вы не сталкивались с этим или не правильно поняли вопрос (тогда я плохо выразился)...
В больших компаниях аудит проходит вся система. 20 там компонентов или 120.
Заключение выдаётся не в 1 фразу ок/неок. Вопрос не на пустом месте.
Как я и сказал, я очень хочу остаться на этой технологии.
Но что бы понимать саму эту проблему, с ней нужно сначала столкнуться .. -
Andrey, мы это и так делаем своими силами. Эту проблему обошли, создав внутренний штат. Хотя ваши поинты хорошие - возьму на заметку...
Вопрос другого характера.
Я к сожалению не могу его полностью развернуть не создав лишнего коммуникационного слоя.
Надеюсь что тут есть ребята, кто столкнулся с этой проблемой и у них есть идеи... -
Мы сталкивались но не с кх. Решалось заказом дополнительного аудита. Но конечно уровень регуляторов у всех свой. Ну и облак не было. Он премис.
-
Ещё проблемка с ПД - локализация данных. Сейчас мы данные наших EU клиентов гоним в US, и их это вообще не радует. Но, конечно, не настолько как в парах RU, EU и RU, US 😁
-
Отбрёхиваемся только тем что энд-юзеры, ПД которых и хранится, сами согласились их отдать и должны были прочитать privacy policy, где всё написано (я надеюсь, т.к. сам эту портянку не читал, конечно же)
-
Перепрыгивать с CH - нешуточное и нежеланные развлечение...
Поэтому и написал сюда. Понимаю что это opensource, но мир пошатывает и отношение к технологиям тоже...
А тут у нас тех.сообщество - есть кого спросить... -
Пока изучаем вопрос, как на что-то наткнемся, поделюсь...
-
Попробуйте с https://altinity.com/ связатьсяClickHouse Software And Services — Altinity
Deploy and operate ClickHouse, a lightning fast, open source SQL data warehouse for real-time analytics, time series, and log analysis.
-
@kshvakov как вы думаете, они смогут оказать консультацию такого рода не клиенту?
-
-
Ну мы вряд ли можем сказать что-то больше, чем общеизвестные факты. ClickHouse и права на все, что с ним связано, принадлежат Американской компании. Сообщество международное. Основные разработчики в Амстердаме
-
Альтинити тоже американская компания, команда из разных стран.
-
Альтернатив ClickHouse-у нет :)
-
ну вот сейчас где то огорчились люди из hpe/microfocus vertica :)
-
Синглстор тоже где то плачет)
-
-
Альтернативы есть. Но список их минусов длиннее чем хотелось бы :)))
-
вертика оказалась сильно медленнее кликсы при тестировании на одинаковом железе. база где-то под миллион чтоль позиций
-
“снежинка” ?
-
Я так понимаю Snowflake..
-
-
snowflake наверное
-
из облачных решений да, вполне...
-
-
ну то, что вы его тестировали подтверждает то, что это именно альтернатива.
там плюсы тоже есть свои, смотря что ищется... -
Вот сделают Вертику опенсорсной — тогда не будут огорчаться )
-
-
-
-
-
-
-
-
у вас же запросы тормозят нет?
может идет запрос в таблицу которая сильно партиционирована а в запросе не указан partition key в where clause -
посмотрите в лог файлах какие запросы идут и в query log долгие запросы
select * from system.query_log ql where query_duration_ms >2000; -- change time -
-
аккуратнее
добавье фильтр по event_date/event_time
а то будете сканить всю таблицу -
да, привычка что у нас TTL низкий...
-
-
Мда щас кто то получит люлей .... 😱
-
у нас есть запросы по 10 мин, ессно тут надо смотреть как оно должно отрабатывать вс как на самом деле... но да, кривым запросом КХ тормознуть на раз два (тот же select * на таблице с тыс колонок и парой тыс партиций - всякие ОРМ такое любят)
-
Ребят, привет!
Я уже больше двух лет нахожусь в комьюнити ClickHuose. Являюсь активным евангелистом КХ во всех компаниях, где я работал. Вы могли ранее видеть много моих сообщений здесь. Я жил в Донецке. В 2014м из-за войны переехл в Кеив. Живу и работаю в Киеве и сейчас у моей страны настало очень тяжелое время. Российская артилерия и ракеты бомбят мой город, как и много других городов Украины.
Этот чат — это одно из очень немногих мест с талантливой и умной российской аудиторией, к которому у меня есть доступ.
Я вас очень прошу не оставаться в сторонее и хотя бы с помощью видео или просто постом в своих соцсетях высказать ноту протеста войне, которую российская армия развязала у меня в стране.
Знаю что этот чат не для политики, поэтому обещаю больше сюда не писать такие сообщения.
Напоследок прошу посмотреть видеообращения к российским айти специалистам нашего министра цифровой трансформации: -
Обращаюсь к российским айтишникам. У вас забирают лучшие года жизни.
-
👍
-
Годы жизни и внимания всё-таки отняла Украина, с этим постоянным курсом "Украина-Антироссия"
-
у меня клиент остановил контракт на неопределенное время, у него денег нет. я вчера написал в группу 'ИТ канада' что потерял работу, ищу. мож кому нужен C# Net Core прогер. там украинцы начали радоваться мол так тебе и надо. мол ты виноват в нападении вот разгребай. а потом один укр гандон говорит мне А ты скажи чей крым?, не бойся не забаню. я говорю А что мне боятся. Крым русский, за него бились Екатерина и Колчак. они мне отключили возможность писать в группу. ну я вышел с группы
я за них переживаю тут но не выхожу на улицу, бездействую, а они сука радуются что у меня плохо дела и действуют. -
политика так и работает... поссорились 2 дядьки, а страдают 40 млн
-
подчистите, пожалуйста, чат.
-
-
-
-
Давайте без политике в этом чате
-
-
Если здесь давать высказываться на политические темы, то так или иначе участники разделятся по сути на два лагеря. Поэтому лучше вообще не допускать здесь какие-либо политически публикации. Они разобщают людей.
-
200
-
поэтому лучше про nvme 🙂
-
-
Думаю, что запреты на диалог между людьми разобщают больше. Если мы говорим о правах - вот они и вместе с ними ответственность и последствия. Мы уже начали жить в новом мире и начинать с запретов и цензуры не стоит - этого сейчас хватает в СМИ. Фейк ньюс и горе SMM хватает везде (тут оно будет чиститься), так что давайте научимся слушать и слышать других, даже если это не приятно или идет в разрез убеждениями или еще чем-то.
Regardless of your feelings about war, never hate the warrior. -
-
Проблема всей истории с обсуждением политики в беседе для обсуждения технологии в том, что в конечном итоге все поругаются и перестанут друг другу помогать именно с тем, ради чего все здесь - беседа загнется и все будет потеряно. Пожалуйста, создавайте другие беседы, обсуждайте - это важно очень, но не здесь...
-
Вопрос не в обсуждении как таковом. К тому же для этого есть площадки. Я считаю, что должен быть нейтралитет, который должен поддерживаться всеми участниками. Ни одно политическое обсуждение не даёт правдивой информации. То есть это лишь отражение пропаганды или просто мнения большинства, которые никак не являются объективными. Тут нет ни одного человека, который бы был за войну. Но вот причины конфликта у всех различаются. Также, как и методы решения этого конфликта. И да, все мы за мир. Но как это меняет ненависть или нетерпимость друг к другу, которая при достаточном количестве сюда политических вбросов станет в итоге превалировать?
-
у нас непосредственно переезда не было, но есть разные системы на разных.
В общем КХ заточен под большие sequential reads (если смотрим только классическое использование для тяжелых нечастых запросов), NVMe диски в целом имеют этот показатель на порядок лучше (паралеллизм + хороший queue depth) + NVMe диски.
SATA SSD vs NVME - будет значительный выигрыш (в 4-5 раз мин)
SAS SSD vs NVME - будет выигрыш но не такой значительный (но с SAS можно делать нормальный HW raid with hot replacement + writeback cache, который имеет свой плюс).
но лучше все равно рассматривать в контексте производительности самих дисков/подсистемы.
ну и опять таки КХ чаще упирается в CPU при сканировании. Если хотите использовать всю мощь массива NVMe дисков придется иногда выключать компрессию и терять в месте на диске. -
-
https://clickhouse.com/benchmark/hardware/#
можете тут попробовать сравнить сопоставимые системыPerformance comparison of ClickHouse on various hardwareClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
Админы, удалите политические сообщения из чата, пожалуйста!
-
Этотбыло обращение минцифры Украины. Он грамотный мужик, много чего сделал за время пребывания н посту. В нем нет призывов, нет ненависти. Он обращается к айтишникам, как к умным, думающим людям. Не к тем, кто живет в глубинке на минималку и даже не пойиюмет что случилось, а к тем кто реально ощутит. И просит задуматься.
Я за сохранение чата чисто по тематике. Но, к сожалению, молчать иногда бывает сложно.
Больше не буду задевать эту тему -
-
Ок. Не хотел высказываться прямо, но придется. Допустим, я русский и выскажусь против действий России на Украине. В этом случае я автоматически становлюсь преступником (госизмена). Но вдруг я украинец, и также выскажусь против войны с Россией. И я точно также автоматически становлюсь преступником (госизмена). Идем дальше. Я русский и выступаю за действия России на территории Украины - я враг и преступник Украины. Я украинец и выступаю за действия против России - я враг и преступник России.
Возникает вопрос. А надо ли устраивать на чисто технической площадке бои и выяснения отношений? К чему подталкиваете народ? Чтобы они становились преступниками в собственных странах или врагами в чужих? -
-
Всем привет, у меня после обновления до 22.2.2.1 перестали работать запросы в mysql (from mysql ('host...))
Но не все, а те, которые длиннее (на мои ощущения) 10 секунд.
Выпадают с такой ошибкой
DB::Exception: mysqlxx::ConnectionLost: Lost connection to MySQL server during query (HOST).
Вопрос такой, как это поправить, а если никак, то как можно сделать безопасный даунгрейд? Сервер один, без шардов и тд. -
вот тут не совсем понятно: “NVMe диски в целом имеют этот показатель на порядок лучше (паралеллизм + хороший queue depth) + NVMe диски.”
видимо, в первом случае не nvme имелось в виду? -
Hot swap доступен и на nvme, writeback cache крайне сомнителен на больших массивах и хороших дисках - большинство контроллеров не способно переварить производительность 4х ссд, что уж говорить в сравнении с nvme
-
я вчера делал downgrade 22.2.2.1 -> 22.1.3.7. ничего не пропало, поднялось сразу
-
а можешь расписать как делал плз?
-
1. остановил сервисы
2. выполнил downgrade
3. запустил сервисы -
-
Надо мерять на вашей нагрузке. Смотрите что с нагрузкой и очередью на диск.
Недавно мерял лейтенси с виртуализацией и без (под OLTP в 1 поток)
nvme ~20-30-us
ssd ~30-50us (контроллер в pass thru, иначе лейтенси растет)
kvm+ssd ~180+ us
Если используется виртуализация, то заметить разницу почти невозможно, как и утилизировать диски из 1VM c одной OLTP-базы. Если на голом железе - смотрите по текущей нагрузке, у нас CH большую часть запросов обслуживает из кеша (по горячим данным), io на чтение минимально, можно хоть на hdd -
да, по sequential reads если CPU тянут - NVMe на порядок лучше чем SATA, и просто лучше чем SAS.
но опять таки смотрите на ваши нагрузки. у нас например сервера 192 ядер и упираются в них а не в массив из SAS SSD. -
с помощью fio есть возможность померять?
-
Как вставить с json прямо в клиенте? Типа insert into table format JSONEachRow ‘{}’ , сча оно ругается.
-
Для начала можно сделать SELECT ... FORMAT JSONEachRow, чтобы понять какой формат JSON нужен
-
Ну json он и есть json, тем более в примере выше он вообще пустой. Ругается на
Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 128 ('insert') (line 8, col 1): insert into test format JSONEachRow '{"string.names.0": ["name"],"string.values.0": ["value"]}' FORMAT JSON. Expected one of: DoubleColon, LIKE, GLOBAL NOT IN, PRIMARY KEY, end of query, AS, DIV, IS, INTO OUTFILE, OVER, OR, QuestionMark, BETWEEN, NOT LIKE, MOD, AND, TTL, SETTINGS, PARTITION BY, IN, SAMPLE BY, ILIKE, FORMAT, NOT ILIKE, NOT, COMMENT, token, NOT IN, GLOBAL IN (version 21.8.14.5 (official build)) -
Ок я понял, надо по сырому передавать.
-
insert into table format JSONEachRow {}
-
Ребята, привет) Я дико извиняюсь, что вторгаюсь в вашу группу, но у меня только одно сообщениеи и больше не буду ни к кому приставать, честное слово 😊 Мне сейчас очень нужен Presales-архитектор Clickhouse для российского разработчика платформы управления данными, поэтому если это может заинтересовать вас или кого-то из знакомых, с удовольствием расскажу подробнее. Еще раз извините за наглость, всем спокойного дня)
-
Всем привет. Кластер из двух нод, 4 таблицы ReplicatedMergeTree. В system.errors примерно раз в минуту прилетает ошибка KEEPER_EXCEPTION: Transaction failed (Node exists). С чем может быть связано?
-
мерял fio --rw=randwrite --ioengine=sync --fdatasync=1 --directory=./test-data --size=16g --bs=16k --iodepth=1 --name=mytest, но измерения не были связаны с CH а были под OLTP базу (мелкие wr+fsync)
Скорее рекомендовал бы собрать метрики с имеющейся инсталляции CH с реальной нагрузкой - то, что есть в iostat -kx 10 (util, w/s, r/s, и прочие байты-иопсы-лейтенси) а также CPU за какой-то период времени и на этом основании принимать решение, есть ли смысл менять hdd/ssd/nvme. У меня ощущение, что в куче кейсов разницы ssd/nvme нет. -
system.macros проверьте
replica должен быть разный на всех сервереах
SELECT hostName(), * FROM clusterAllReplicas('your-cluser',system.macros) -
Спасибо, проверил, replica разный
-
посмотрите /var/log/clickhouse-server/clickhouse-server.err.log
на предмет вашего Node exists
может там будет имя ноды и будет чуть понятнее... но не факт
у вас zookeeper или clickhouse-keeper ? -
zookeeper
-
-
А расскажите какая цель? Что хотите сделать?
-
Агрегат по дню создать
Условно есть 3 разные таблички.
В одной транзакции пользователя по одному продукту
В другой по другому.
И хочу получить таблицу день,юзер , какая то стата...
Джойном по дате не получится , ибо юзер мог не совершать чего-то в какой то день -
FULL JOIN едрён батон
-
-
можно попробовать еще логи zookeeper посмотреть
-
Сделайте 2 матвью поверх обеих таблиц которые будут вставлять в 1 целевую
-
-
Оно чистится по штукам, а не времени. Сделали почти сразу с появлением мутаций.
-
Енто сделано, особенно п.3? https://docs.altinity.com/operationsguide/clickhouse-zookeeper/zookeeper-installation/ZooKeeper Installation and Configuration
How to configure Zookeeper to work best with ClickHouse
-
Спасибо, гляну
-
Т.е она поломалась, раз еще висит в самом zk?
-
Почему? Там по дефолту штук 100 последних чтоли хранится.
-
У меня конечно версия очень старая, но 22к записей об слияниях только по 1 таблице висят. [2/03/22 7:56:00] ~/Desktop cat znode-export-2022-03-02T16_54_04.582Z | jq | grep '/log/log-' | wc -l
22973 -
Привет!
На проекте по бизнес задаче нужно совершать апдейт одной колонки.
Условно, в КХ храню список кликов и юзаю движок AggregatingMergeTree.
Я вижу 2 варианта:
1. Делать SELECT записей, которые хочу обновить, и сделать их INSERT с обновленным значением столбца. (но х2 по памяти до оптимайза меня сильно смущает, плюс поддерживать консистентность данных после фейла кажется сложным)
2. ALTER TABLE UPDATE, что явно более тяжелая операция для диска, но исполняется асинхронно и ее можно отслеживать
У кого была похожая задача? В какую сторону можно покурить? -
Это никак не связано с мутациями
-
Т.е сами логи копятся с момента старта таблицы до упора?
-
Конечно нет, просто реплика какая-то у вас не выполняет ничего
-
Понял, буду смотреть. Спасибо.
-
-
-
-
а вы вставляли что-то в исходную таблицу? Это же просто триггер на инсерт
-
-
сначала создать матвью потом инсертить в основную
-
исторические данные если нужны - надо отдельно инсертить
-
при вставке в основную триггером вставляется в матвьюшку
-
-
и лучше сразу используйте TO нотацию чтобы избежать гемороя в будущем, тут хорошо объяснено и это лучший гайд по работе с мат вью
https://youtu.be/1LVJ_WcLgF8?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597
https://den-crane.github.io/Everything_you_should_know_about_materialized_views_commented.pdf -
можно и не инсертить, есть возможность сгенерировать историчность. POPULATE кажется
-
да там есть тонкость что если делать populate в момент вставки эти данные не доедут
-
посмотрите почитайте ссылки выше почему так делать не стоит
-
зависит от ситуации, возможность такая в целом есть
-
Я инсерчу по дню бывает, чтобы не убить сервера, если данных тьма
-
Если и есть такое чтобы сразу всё, не рискнул бы на больших данных) так что лучше сразу понять как оно работает (мержи в агрегированных таблицах тоже происходят и данные хранятся отдельно в своих файликах)
-
ALTER TABLE ADD COLUMN column_new + default + materialize
ALTER TABLE DROP COLUMN column_old
ALTER TABLE RENAME COLUMN column_new column_old - 03 March 2022 (73 messages)
-
-
Либо ENGINE либо TO, в документации об этом сказано.
-
ENGINE указывает движок для таблицы, которая создаётся автоматически, поэтому в нём нет смысла если указан TO (т.е. таблица уже существует)
-
Пожалуй вам нужно посмотреть этот ролик. Он поможет в понимание https://youtu.be/1LVJ_WcLgF8?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597
-
-
-
Что такое "обновляться" ?
-
-
Мат вью триггер на вставку, вы указываете как триггер таблицу в from
-
Только по левой части join если что-то справо вставляется - матвью не тригерится
-
-
-
Привет, подскажите, кто знает, в клике ещё нет возможности заливки нулевой даты? При заливке нулевых значений для колонки типа Date проставляется 1970-01-01 . Явного значения нул нет?
-
Nullable тип же есть, который оборачивает всё что угодно
-
Вообще-то это и есть нуль для time epoch 😀
-
Спасибо, помогло
-
Использовать Null в кликхаусе, это как надеть обувь на размер меньше .... Вроде идти можешь, но больно что то .....
-
Это не так. Все таки есть разница между тем, есть ли данные, или нет.
-
А в чем проблема? У меня есть такие поля, в которых может отсутствовать что-то. А вместо отсутствующих данных подставлять что-то левое будет неправильно.
-
В том то и дело что этот тип изначально не может быть нулем,поэтом или использовать Nullable или изменить тип на Uint32/64 и обернуть в DateFunc
-
Проблема в том, что вместо 2 файлов, хранится в 4 файлах один столбец ( как я помню )
-
Если даты будут использоваться свежее 1970-01-01, то лучше проверять на "пустое значение" так
WITH toDate('1970-01-01') AS date
SELECT date = toDate(0)
Query id: 26b73082-d009-4837-969b-f7c80fb92ae7
┌─equals(date, toDate(0))─┐
│ 1 │
└─────────────────────────┘ -
С чего бы это не может быть null? Допустим, у меня есть период действия. При этом начальная дата известна, а конечная не известна. И что тогда я должен вбивать в поле конечной даты? В моем понимании null - это не установлено. Если бы это было число timestamp, например, то 0 также не является корректным, потому что при проверке вхождения диапазона будет неверное условие.
-
По хранению не знаю. Если это так, то да, не хорошо
-
ну или так, если в дальнейшем будет удобнее работать с NULL
WITH toDate('1970-01-01') AS date
SELECT nullIf(date, toDate(0))
Query id: 00fcbc64-c879-45bf-9636-ba7fe200eebf
┌─nullIf(date, toDate(0))─┐
│ ᴺᵁᴸᴸ │
└─────────────────────────┘
1 rows in set. Elapsed: 0.158 sec. -
Ну это же даст эффект на систему только на сильно больших данных?
-
а если данные не сильно большие то зачем тогда кликхауз?)
-
Так решила история до меня)
-
-
-
Любая колоночная на нескольких миллиардах будет лучше реляционной для аналитических запросов
-
Вот именно. Поэтому его и начали использовать компании даже на сравнительно небольших объемах. Просто банальное суммирование может быть в сотни раз быстрее.
-
-
Я не знаю. Всё скорей всего зависит от данных. Я спрашивал в чатике про Null ранее, мне сказали делать без него. Я сделал без него.
-
https://gist.github.com/den-crane/e43f8d0ad6f67ab9ffd09ea3e63d98aa https://stackoverflow.com/questions/63057886/clickhouse-string-field-disk-usage-null-vs-emptyNullableVsInt
NullableVsInt. GitHub Gist: instantly share code, notes, and snippets.
-
Вот я опробовал колоночный таблицы на бесплатном MariaDB+columnstore - в целом работать можно. Правда сжатие в два раза хуже, чем в MS SQL, который у меня пока лидируют по удобству, универсальности и отсутствию детских болезней и ограничений как в КХ
-
Nullable(Date) с соответствующими тормозами. На больших данных лучше поменять логику приложения использовать -If (sumIf, avgIf, etc) для конкретного невалидного значения нежели Nullable.
-
всем привет)
А как в clickhouse-client можно получить список баз, схем, таблиц? -
По исследованием Дена, Null это пиздец :)
-
куча способов...
show tables;
show databases;
либо
select * from system.tables/system.databases -
это не пиздец, нормально все, пользуемся ок в одном из продуктов. Просто есть "тонкости" (например иногда надо кастить + доп тормоза). Без nullable в сложной аналитике когда запросы "генерируются" тоже сложно очень...
-
Select * from system.[databases, tables…]
-
У нас объем данных стремительно растет. Поэтому дальше насиловать MySQL не хочется. Да и сложная агрегация - там вообще у MySQL всё грустно
-
MariaDB с columnstore попробуйте, может и переписывать ничего не придется.
https://hub.docker.com/r/mariadb/columnstore -
Мне нравится функционал по массивам и вообще разные фишки КХ. Так что я, всё-таки, настроен на КХ
-
Спасибо)
-
Всем привет! Подскажите можно как то в лог клика логировать коннекты к базе? кто, когда, откуда подключился?
-
ну HTTP запросы вроде и так логируются (собственно там нет понятия "подключился").
по клиенту/tcp не скажу но тож должно быть в логах -
Всем привет) ребят а кто знает как подключиться к mongodb реплике из clickhouse?
-
MongoDB | ClickHouse Documentation
MongoDB MongoDB engine is read-only table engine which allows to read data (SELECT queries) from remote MongoDB collecti
-
Всем привет! Настроили интеграцию с AD для аутентификации доменных пользователей и после этого начали сыпаться такие ошибки:
"TCPHandler: Code: 492. DB::Exception: ID(72e72b16-2fa5-dea3-b799-4afb80b7ff70) not found in user directories. (ACCESS_ENTITY_NOT_FOUND)"
ID всегда один и тот же. Аутентификация и мапинг ролей работает ожидаемо, без проблем.
По логу совершенно ничего понять не получается. Интернет тоже ничего не выдает.
Может кто-то сталкивался с таким? -
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=...
-
Вроде об этом же
-
Не, это другая ошибка.
-
Коллеги, добрый день! Пытаемся попробовать перейти с последней LTS версии на 22.2 и вылезла странная проблема, как мне кажется с оптимизатором запросов:
Вот такой вариант с тремя WITH и обращениями к данным предыдущих уходит в бесконечный цикл на строне CH:
WITH
(
SELECT max(pkgset_date)
FROM static_last_packages
WHERE pkgset_name = 'sisyphus'
) AS last_repo_date,
(
SELECT toUInt32(pkgset_kv.v[indexOf(pkgset_kv.k, 'task')])
FROM PackageSetName
WHERE pkgset_nodename = 'sisyphus' AND pkgset_date = last_repo_date
) AS last_repo_task,
(
SELECT max(task_changed)
FROM TaskStates
WHERE (task_state = 'DONE') AND task_id = last_repo_task
) AS last_repo_task_changed
SELECT task_id
FROM TaskStates
WHERE task_state = 'DONE'
AND task_changed > last_repo_task_changed
AND task_id IN (SELECT task_id FROM Tasks WHERE task_repo = 'sisyphus')
ORDER BY task_changed DESC -
-
-
а сам запрос в логах становится огромным и примерно таким:
2022.03.03 11:16:09.661650 [ 73629 ] {433aa863-3334-4128-a156-5d74ad1e4786} <Error> executeQuery: Code: 306. DB::Exception: Stack size too large. Stack address: 0x7fd6f1415000, frame address: 0x7fd6f1813ea0, stack size: 4198752, maximum stack size: 8388608: While processing (WITH (WITH (WITH (WITH (WITH (WITH (SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date, (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT toUInt32(pkgset_kv.v[indexOf(pkgset_kv.k, 'task')]) FROM PackageSetName WHERE (pkgset_nodename = 'sisyphus') AND (pkgset_date = last_repo_date)) AS last_repo_task SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date: While processing (WITH (WITH (WITH (WITH (WITH (WITH (WITH (SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date, -
(WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (WITH (SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date SELECT max(pkgset_date) FROM static_last_packages WHERE pkgset_name = 'sisyphus') AS last_repo_date
-
Pastebin.com - #1 paste tool since 2002!
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
-
-
Привет. А подскажите запуск апдейта на 20млн записей это ок?
-
Я просто смотрю у меня уже мутация минут 30 висит
-
и как лучше обновить такое кол-во записей
-
нужно для всех этих записей поменять значение одного поля
-
-
по очереди по одной партиции, с предварительным отключением нагрузки на таблицы (чтение/запись)
-
а если нет возможности отключить нагрузку?
-
-
тогда ждать и надеяться, что все будет хорошо
-
JSON_QUERY есть
-
-
Коллеги подскажите
Как вствлять данные в мапу через csv
Это же не json, свой энкодер писать? - 04 March 2022 (96 messages)
-
Всем привет! Подскажите, изменение уровня логирования в конфигах требует рестарта сервера? В файле /var/lib/clickhouse/preprocessed_configs/config.xml изменения отображаются, но уровень логирования новый при этом все равно не применился. Версия 21.8.5.7
Нашел issue что такое поведение намеренно введено в версии v20.1.2.4. Может кто то уточнить, насколько актуально для моей версии?Configuration of server log is not applied until restart · Issue #10438 · ClickHouse/ClickHouseDescribe the bug It seems configuration changes made to /etc/clickhouse-server/config.xml are not respected until clickhouse-server is restarted. How to reproduce Which ClickHouse server version to...
-
Подскажите пожалуйста, куда смотреть. Есть кластер 30 шардов, 2 реплики, 3 ноды зукипера.
Работает нормльно неделю или несколько дней, потом в один момент все ноды кликхауса упираются в лимит одновременных подключений (сначала 500, потом поднял до 1000 - аналогично). Подсоединиться к серверу кликхауса не получается ни на одной ноде. Рестарт машин - все оживает и работа кластера почти нормализована.
Почти - потому что огромное число таблиц вываливается в ридонли или реплики не онлайн, ругаясь на /clickhouse/tables/dbanme/tablepath/replicas/s0/log_pointer: node doesn't exist (No node). (KEEPER_EXCEPTION) (version 22.1.3.7 (official build))
Нагрузка весьма умеренная (обычно ЛА5 на 16 ядерном сервере не выше 5), вставок довольно много, но большими пачками или через буферные таблицы.
С сетью вроеде все хорошо, но ситуация повторялась уже с десяток раз и я в полном унынии и непонимании, куда смотреть и на что обращать внимание.
В логах зукипера (на лидере) поток сообщений следующего вида, даже когда кластер себя хорошо чувствует и все работает без проблем со стороны приложения
INFO [ProcessThread(sid:1 cport:-1)::PrepRequestProcessor@653] - Got user-level KeeperException when processing sessionid:0x2005a7265a80068 type:delete cxid:0x7487552 zxid:0x11572c0d7d txntype:-1 reqpath:n/a Error Path:/clickhouse/task_queue/ddl/query-00000516
На что обратить внимание, какие метрики могут пролить свет на ситуацию? -
Всем привет.
В Clickhouse есть две опции при записи данных:
- запись в таблицу типа Null с последующим приведением типов, агрегацией и т.п. через Materialized View
- запись в таблицу типа Buffer для временного хранения данных в оперативной памяти
В каких случаях следует прибегать к каждой из этих опций?
Есть ли случаи, когда стоит использовать их одновременно? -
-
буфер - это по сути костыль на случай, если вы вынуждены делать одиночные вставки. Матвью - в случае, если вам надо как то переложить, продублировать или преобразовать входные данные
-
Неужели никто не сталкивался с таким? я один счастливчик? :)
-
Конфигурировали ЗК по рекомендации https://clickhouse.com/docs/en/operations/tips/#zookeeper ?Usage Recommendations | ClickHouse Documentation
Usage Recommendations CPU Scaling Governor Always use the performance scaling governor. The on-demand scaling governor w
-
Как бы да, но не совсем - версия 3.4.13, из репозитария, поэтому часть конфига из JVM не применимо вроде как
-
Я уже на панике совсем :) зукипер грузит диски на 80-90%, это нвме, есть ли способы облегчить ему жизнь конфигами? Или только снижение частоты вставок?
-
и параллельно - кажется, что все мои проблемы растут именно из ЗК, и есть шальная мысль удалить его и настроить заново с чистого листа. Это совсем глупость или в этом есть хоть толика разумности? в случае, если все же да, то как восстановить метаданные кликхауса в новом зукипере?
-
Искренне жаль вас, но большинство работает с меньшими данными 😞
-
по какой то совершенно не ясной мне причине часть таблиц вылетают из репликации с ошибкой Can't get data for node /clickhouse/tables/..../replicas/s1/log_pointer: node doesn't exist (No node). (KEEPER_EXCEPTION) (version 22.1.3.7 (official build))
-
а какая все-таки у вас частота вставок? Приемлемая - раз в секунду, хорошая - раз в 7-10 секунд.
-
3 годы зукипера у меня на 3 шарда
-
Советуют 5
-
А для такого кол-ва шардов может накинуть зукиперов поболе?
-
теста ради разворачивал 5 зукиперов и как то не увидел снижения нагрузки на диски, решил, что это избыточно и вывел их из группы
-
После появление проблем ?
-
Откуда у ЗК нагрузка на диски? Я чего-то не понимаю.
-
впервые эта проблема появилась месяц назад наверно, примерно спустя две недели после переезда на этот новый кластер. До этого шардов было 5 по 2 реплики, но на сильно более жирных машинах. Собственно после переезда началась это странное поведение - то два раза за день, то раз за неделю кластер превращается в тыкву
-
Может там какой-нибудь fsync где-то сконфигурен?
-
Я смотрю свои топовые зк и не вижу там I/O больше нескольких мег в секунду.
-
Прилетает запрос убийца мб
-
Replication_queue может растёт сильно
-
Чем больше нод в кластере ZK тем больше нагрузки, так как им надо состояние синкать. Поэтому 3 - это всегда ОК
-
То есть лучше накидать ресурсов в зк вместо добавления новых
-
Пасяб, запомню
-
-
как это проверить? на зукиперовых машинках графана показывает скорость рид-врайт около 10-15 мбпс, утилизация IO порядка 75-100%...
-
Наверное это неактуально. Какая конфигурация машин с ЗК? Это контейнеры, какие у них ресурсы? Там рядом что-нибудь бегает?
-
Добрый день! Подскажите, пожалуйста, есть запрос, который работал до недавнего времени. Сегодня вдруг возникает ошибка Error running query: Code: 44. DB::Exception: Cannot convert column multiply(FrcAmount, Prc) because it is non constant in source stream but must be constant in result. (ILLEGAL_COLUMN) (version 21.12.4.1 (official build)). Админ утверждает, что в базе ничего не меняли, апгрейды не ставили, я погуглила, сходу ничего не нашла(( К сожалению не могу сейчас упрощенный запрос выложить, тк долго преобразовывать, но вдруг кто-то быстро подскажет, в какую сторону смотреть? Через час презентация(( пока поняла, что проблема возникает с null значениями и видимо на преобразовании типов. Спасибо большое!
-
xeon e3-2236 (6*3,4gh), 32gb ram, 2*480 ssd, на них только ХК и нодэкспортер
-
обманул на счет нвме, все же ссд...
-
Если так то сделайте проверку до преобразования на null
-
> на них только ХК
Там КХ тоже стоит? -
вообще установлен, но сервера кх опущены, т.е. это изолированные сервера
-
Спасибо, сча гляну!
-
Да, проверила, это точно связано с null, до преобразования все ок, если преобразуется в null, то выдает ошибку.. не понимаю, почему вдруг так случилось, если раньше работало(( посмотрю еще, спасибо!
-
если раньше работало, а сейчас не работает - то или родились данные, которые ломают
-
или родились руки, которые сломали
-
😄, точно, спасибо!
-
А сделайте выборку за прошлые даты
-
Можно найти, за какие даты сломалось
-
-
Ну попытайтесь в toDateTime32 или вообще toDateTime
-
Добрый день.
При попытке подключения драйвера КХ в DBeaver ошибка получения сертификата.
Это лечится в текущих условиях ? Текст ошибки:
Network unavailable:
javax.net.ssl.SSLHandshakeException:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Network unavailable:
javax.net.ssl.SSLHandshakeException:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -
Can't create driver instance
Error creating driver 'ClickHouse' instance.
Most likely required jar files are missing.
You should configure jars in driver settings.
Reason: can't load driver class 'com.clickhouse.jdbc.ClickHouseDriver'
Error creating driver 'ClickHouse' instance.
Most likely required jar files are missing.
You should configure jars in driver settings.
Reason: can't load driver class 'com.clickhouse.jdbc.ClickHouseDriver'
com.clickhouse.jdbc.ClickHouseDriver
com.clickhouse.jdbc.ClickHouseDriver -
Коллеги, кто-нибудь сталкивался с тем, что при включении allow_experimental_database_replicated в users и перехода на Replicated базу, почему-то перестают опции allow_experimental_live_view/allow_nondeterministic_mutations, передаваемые через query параметры HTTP работать.
Не пойму, это ошибка при мёрже опций на стороне КХ или эти фичи перестают работать в Replicated? -
А что яндекс уже всё? Что с КХ? Перейдет к альтинити?
-
кх с недавних пор отдельная организация
-
Ну и отлично
-
ClickHouse - Introducing ClickHouse, Inc.
Today I’m happy to announce ClickHouse Inc., the new home of ClickHouse. The development team has moved from Yandex and joined ClickHouse Inc. to…
-
версия DBeaver’а?
-
Спасибо за идею, поищу!
-
21.3.5, последняя на текущий момент
-
и делаете новый коннект Clickhouse (НЕ Legacy)?
-
Добрый день!
Подскажите, пожалуйста, что можно сделать в ситуации, когда раньше убили мутацию, которая меняла тип колонки Int8 -> Int16, а теперь агрегация по этой колонке не работает с ошибкой DB::Exception: Invalid number of rows in Chunk column Int16 position 1: expected 65505, got 50812 ? Не работает только на некоторых партициях. -
Да. Новый компьютер, на него загрузил DBeaver и пытаюсь подключиться к существующей базе КХ. На других компьютерах DBeaver был установлен ранее и работает успешно (в т.ч. после обновления версии)
-
А селекты из партиций нормально работают?
-
Если да, можно аттачнуть эти партиции во временную таблицу рядом, детачнуть из оригинальной и залить заново через insert select
-
селекты без агрегатных функций нормально.
Спасибо! -
крыжик
Скачать принудительно / Перезаписать
не помогает? -
Нет, второе окно (с выделенным рамкой текстом) модальное. При нажатии на кнопку ОК закрываются оба окна
-
еще вопрос: а если нельзя делать detach, то поможет перезалить просто через delete/insert?
-
а открываются как — тоже сразу оба окна? или надо на первом кнопку Скачать надавить, чтобы второе окно выскочило?
-
Привет! Меня зовут Алексей, работаю маркетологом в
компании, которая занимается развитием экспертов в онлайн
👍 Сейчас мы проводим серию бесплатных консультаций, на которых:
- делаем диагностику нынешней ситуации в блоге, разбор ошибок
- помогаем составить экспертам стратегию развития себя и увеличения продаж своих продуктов в онлайн
Кому актуально, пишите в личку 'ХОЧУ БК', я предложу время -
если еще раз перезалить задублируются данные
-
у нас тоже ломались таблички, в итоге делали так - рядом создается таблица не replicated как копия поломанной, alter table newTable attach partition 202112 from oldTable, проверяем что данные в новой таблице есть, alter table oldTable detach partition 202112 (после проверки что мы скопировали данные в новую) и insert into oldTable select * from newTable
-
тогда проблемы с партами уже не будет - мы заливаем заново и мержи заново отрабатывают и сохраняют всё как надо
-
спасибо за подробное объяснение!
Дело в том, что detach ломает отправку событий, поэтому я уточняю, если мы создадим временную таблицу newTable, через insert положим туда данные сломанных партиций из oldTable, потом удалим данные из oldTable и инсертним из newTable, то это тоже поможет? Дубликатов вроде быть не должно -
Мы так старые чинили, в которые уже ничего не писалось - детач к отсутствию данных за определенный период временному приводил только
-
Можно и удалять, alter table delete where ... Но когда у нас ломалось делеты мы не пробовали ещё
-
Главное проверить что копия данных есть во временной
-
Всем привет.
Мне нужно выгрузить данные за год, но проблема в том, что запрос падает по памяти и можно выгружать только за день, а иногда вообще только за часть дня. Вопрос: существует ли способ задать последовательное выполнение одного и того же запроса с перебором дат? Или может есть другие способы сократить обезьяний труд? -
сколько у вас памяти?
-
9,3Гига
-
пробуйте set max_threads=1
если используете группировку, то можно добавить max_bytes_before_external_group_by -
Видимо вендор блокирует настройки драйвера. Cannot modify 'max_threads' setting in readonly mode
-
видимо, у вас маловато прав(
-
Согласен. А кроме управления памятью других вариантов последовательной обработки запроса нет?
-
врядли получится что-то адекватное написать(
-
Можно сделать матвью с маленьким кровом полей и группировкой сразу по дню или неделе, заполнить его обезьяньим трудом, а потом делать выборки из него
-
Вдруг влезет по памяти
-
Спасибо, но мне потребуется переводчик😂
-
Представление | Документация ClickHouse
CREATE VIEW Создаёт представление. Представления бывают обычные, материализованные (MATERIALIZED) и LIVE. Обычные предст
-
Если вкратце, есть табличка с полными данными, а под нее можно положить ту что хранит агрегированные данные
-
У нас такие весят 1гб при исходной 11Тб например
-
Но заполнять её будет всё равно очень долго
-
Спасибо, буду разбираться и пробовать 👍
-
)))
-
-
Сейчас начнется что-то:)
-
Открываются сразу оба, второе активное окно модальное. И закрываются сразу оба. Если нет доступа к ресурсу с сертификатом, то не подключиться к базам КХ.
-
я у себя на маке не могу воспроизвести — у меня открывается без модалки и сразу отображает метаданные для загрузки из maven (это если почистить уже загруженное)
-
щас схожу в Parallels
-
установил с чистого листа, создаю коннект — то же самое (одно окно без модалки).
- 05 March 2022 (19 messages)
-
Привет.
Есть вопрос.
В Clickhouse есть много вариантов для использования внешнего источника как словаря, но я не могу найти документации о том, как сделать словарь из таблицы, которая уже хранится в базе.
Так нельзя делать, это какая-то плохая практика либо это делать бессмысленно?
Или есть какой-то путь это реализовать? -
источник Clickhouse
-
Источники внешних словарей | Документация ClickHouse
Источники внешних словарей Внешний словарь можно подключить из множества источников. Общий вид XML-конфигурации: <clickh
-
На новом сервере CH 21.11 создал новую и пока единственную связку Kafka -> MV -> MT на 9 консьюмеров (по количеству партиций в топике) - получаю подозрительно низкую скорость вычитки порядка 11к записей в секунду. Уменьшаю (через пересоздание) в Kafka-таблице количество консьюмеров с 9 до 3 - скорость вычитки остаётся прежней, уменьшаю с 3 до 1 - скорость вычитки остаётся прежней!
Помнится, на 20.8 скорость росла практически пропорционально количеству консьюмеров.
В какую сторону копать? Что крутить? -
Пробуйте пересоздать MV с kafka_num_consumers = 1, kafka_max_block_size = 500000
+
https://altinity.com/blog/clickhouse-kafka-engine-faqClickHouse Kafka Engine FAQKafka is a popular way to stream data into ClickHouse. ClickHouse has a built-in connector for this purpose -- the Kafka engine. This article collects typical questions that we get in our support cases regarding the Kafka engine usage. We hope that our recommendations will help to avoid common problems.
-
всем привет! может кто-то работал с геоданными
где можно найти более менее корректные данные территориальных границ Российской Федерации (полигоны/мультиполигоны)
нужно сделать справочник на клике для проверки вхождения точки в полигон -
Увы, ничего не поменялось. Доку эту я читал, да и кафка движки раньше настраивал. Но либо я чего-то упускаю, либо в 21.11 оно иначе работать стало.
-
А в том же OSM разве нет таких данных? Или они там не точные?
-
После обновления на 21.11 у нас стало медленнее консьмить. Помогло kafka_thread_per_consumer = 1 и увеличение background_message_broker_schedule_pool_size. Ещё смотреть stream_flush_interval_ms и размер блока на вставку
-
Может быть проблема с производительностью вставки?
Данные в одну партицию летят? на ZK в io не уперлись?
PS: на свежее пока не обновлялся -
Увеличивать нужно кол-во консьмеров. Тестовым способом достиг максимальной производительности у себя при 9 консюмерах, при том что топик был с 6ю партициями
-
Про один тред на одного консьюмера думал, но не успел попробовать. Флаш тоже попробую, спасибо.
-
Там всего одна партиция, вставка пачками по 65-131к с общей скоростью 11к/сек, запас по выставке должен быть огромный.
ЗК тоже в порядке, т.к. эта таблица даже не реплицируемая. -
Так тут проблема как раз в том, что количество консьюмеров никак не влияет на скорость. Она составляет около 11к записей в секунду что для 1, что для 9 консьюмеров на топик из 9 партиций.
-
Может стоит подождать, а то розширяться будете?
-
Решил проблему.
1. Удалил последнюю версию DBeaver
2. Установил версию 21.0.0
3. Подключился к серверу КХ (драйвер успешно установился)
4. Обновил DBeaver до последней версии -
Если 1 партиция со стороны кафки, то больше 1 конзумера нет смысла, или меняйте кол-во партиций в кафке.
Я имел в виду то, как партицирована таблица и как это соотносится с потоком данных, если в 1 батче из кафки запись в 100 партиций таблицы (PARTITION BY), то будет медленно. -
Да, я понял ваш вопрос. В кафке 9 партиций, в таблице кх - одна партиция (т.е. все данные пишутся в одну партицию). И скорость вычитки не зависит от количества консьюмеров почему-то.
Надо будет ещё попробовать в Null таблицу писать. -
Добрый вечер.
Подскажите, сталкивался ли кто с такой ошибкой при работе через метод s3 с бакетами на google storage?
Code: 354, e.displayText() = DB::Exception: inflateReset failed: data error: While executing S3 (version 21.8.13.1.altinitystable (altinity build))
0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0x8fe7c9a in /usr/bin/clickhouse
1. DB::Exception::Exception<char const*>(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*&&) @ 0xe4cc952 in /usr/bin/clickhouse
2. DB::ZlibInflatingReadBuffer::nextImpl() @ 0xe4cc88f in /usr/bin/clickhouse
3. DB::LineAsStringRowInputFormat::readRow(std::__1::vector<COW<DB::IColumn>::mutable_ptr<DB::IColumn>, std::__1::allocator<COW<DB::IColumn>::mutable_ptr<DB::IColumn> > >&, DB::RowReadExtension&) @ 0x111c506d in /usr/bin/clickhouse
4. DB::IRowInputFormat::generate() @ 0x11180d28 in /usr/bin/clickhouse
5. DB::ISource::tryGenerate() @ 0x1110a735 in /usr/bin/clickhouse
6. DB::ISource::work() @ 0x1110a31a in /usr/bin/clickhouse
7. DB::InputStreamFromInputFormat::readImpl() @ 0xe4a9fbf in /usr/bin/clickhouse
8. DB::IBlockInputStream::read() @ 0xfe5ca27 in /usr/bin/clickhouse
9. DB::StorageS3Source::generate() @ 0x10bcfc56 in /usr/bin/clickhouse
10. DB::ISource::tryGenerate() @ 0x1110a735 in /usr/bin/clickhouse
11. DB::ISource::work() @ 0x1110a31a in /usr/bin/clickhouse
12. DB::SourceWithProgress::work() @ 0x112dcf3b in /usr/bin/clickhouse
13. ? @ 0x1114503d in /usr/bin/clickhouse
14. DB::PipelineExecutor::executeStepImpl(unsigned long, unsigned long, std::__1::atomic<bool>*) @ 0x11141bd1 in /usr/bin/clickhouse
15. ? @ 0x11146676 in /usr/bin/clickhouse
16. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x902891f in /usr/bin/clickhouse
17. ? @ 0x902c203 in /usr/bin/clickhouse
18. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
19. clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so - 06 March 2022 (40 messages)
-
возможно дело не в GCS
а в том что у вас со сжатием что-то напутано, ожидается gzip сжатие и формат LineAsString
а у вас как фалы пожаты? -
Может кто подскажет, настроил шардирование с реплецированием, шарда два, при вставке данных, вставляется часть данных на основной, на других не появляются данные, в логах вот такая ошибка "DB::Exception: Received from keeper3:9000. DB::Exception: default: Authentication failed: password DB::Exception: Received from keeper3:9000. DB::Exception: default: Authentication failed: password" где копать?
-
Ну так пароль не правильный
-
То есть кликхаус в который вставляете не может переслать, так как пароль неправильный ко второму кликхаусу
-
Логично) но в настройках кластера, ты же не указываешь пароль
-
Указываете
-
где?
-
Вроде в конфиге, где прописывает шард
-
хмм, попробую, спасибо, в примерах не указывается
-
Спасибо, помогло
-
Разобрался. Файлы имели расширение .gz, но пофакту не являлись сжатыми.
-
Подскажите, если я делаю
insert into table1 (col_1,col2) select * from table2.
но при этом в table2 колонки идут в обратном порядке: col2, col1.
В таком случае кликхаус вставим по позициям, или по названию колонок? -
по позициям. только при вставке в MV вроде бы по названию колонок это делается. Для безопасности лучше не select * а select col_1,col2 написать
-
Коллеги, добрый день. Прошу не закидывать камнями за нелепый вопрос, но может кто то знает, почему простой запрос через http падает с ошибкой 400, запрос на получение данных норм, на простые запросы норм, а вот создание таблиц ошибка, полагаю не хватает прав или может кластер не так создал, в чем может быть причина? http://skrinshoter.ru/s/060322/OwXQSVjY?a
import requests
query = """CREATE DATABASE test;"""
clickhouse_host = f"https://{host}.mdb.yandexcloud.net:8443/?query={query}"
clickhouse_login = ""
clickhouse_password = ""
auth = {'X-ClickHouse-User': clickhouse_login,
'X-ClickHouse-Key': clickhouse_password}
response = requests.post(
url=clickhouse_host,
# query=query,
headers=auth,
verify='/usr/local/share/ca-certificates/Yandex/YandexInternalRootCA.crt')
response.raise_for_status()
print(response.text, "Hello")
Если делать просто через консоль в clickhouse client то все отлично создает: http://skrinshoter.ru/s/060322/ZamiRLm0?a
Когда выхожу из clickhouse client и выполняю запрос SHOW DATABASES он мне не выводит эти новые базы, которые я сейчас создавал через консоль http://skrinshoter.ru/s/060322/F9is3Dq5?a -
А в логах сервера ничего подозрительного нет?
-
Ну и в порядке бреда: в http запросе адрес КХ в яндексоблаке, а в консоли какие-то локалхосты. Может это реально разные серверы?
-
в кластере нельзя создавать бд через SQL если явно не включена опция "управление БД через SQL"
-
это посмотрю, отфильтрую по ошибкам, вижу что то есть примерно в то время когда выполнял, сча повторю и проверю будет ли таже ошмбка в логах
-
да, до этого уже дошел, это включал, захожу через пользователя admin
-
вот меня смущает что он в итоге показывает разный набор датасетов
-
Это конктретно в яндекс облаке?
-
Я в своём кластере спокойно создаю через create database on cluster
-
да
-
без текста ошибки не понятно в чём проблема
-
так, невероятно, но факт, он создал, я правильно понимаю что не допускается символ "-" в названии?
-
названия с - надо в бектики оборачивать
-
я видел нельзя использовать default как название, слово test можно использовать? он не дал создать название такое, видимо потому что оно уже есть в списке датасетов, вопрос почему через клиента я вижу такой датасет, а через http он его не показывает
-
test можно. default это БД по умолчанию, она создана всега
-
спасибо
-
и system ещё нельзя :)
-
в общем я так и не понял что случилось, но спустя 2 дня борьбы, он все же сдался, хотя я очевидно ничего такого не делал, что могло бы повлиять)) всегда так, как только начинаю писать от безысходности в чат, сразу начинает работать. Всем спасибо
-
Всем доброго дня. Приключилась беда - после перезагрузки КХ рухнул и не встает... (version 21.8.5.7 (official build))
2022.03.06 16:39:07.996593 [ 322031 ] {} <Error> Application: DB::Exception: Suspiciously many (34) broken parts to remove.: Cannot attach table noc.raw_ping from metadata file /var/lib/clickhouse/store/ca2/ca26a92f-7fb9-487e-8a26-a92f7fb9e87e/raw_ping.sql from query ATTACH TABLE noc.raw_ping UUID 'cb6560f6-f5ed-4d91-8b65-60f6f5eded91' (date Date, ts DateTime, metric_type String, managed_object UInt64, labels Array(LowCardinality(String)), attempts UInt16, rtt UInt32) ENGINE = MergeTree PARTITION BY toYYYYMM(date) PRIMARY KEY (managed_object, date) ORDER BY (managed_object, date) SETTINGS index_granularity = 8192: while loading database noc from path /var/lib/clickhouse/metadata/noc -
как полечить эту беду
-
место на винте до жопы...
-
Есть настройка про suspicious, это реплика?
-
А где это посмотреть? Есть такой проект NOC, там эта штука работает.... с какими настройками или параметрами - х.з. Вот сервер лег и беда....
-
<yandex> <merge_tree> <max_suspicious_broken_parts>50</max_suspicious_broken_parts> </merge_tree> </yandex>
-
Suspiciously many broken parts
Suspiciously many broken parts error during the server startup.
-
Если это реплицируемая табличка, можно смело задрать настройку и по реплике данные обратно залетят
-
Спасибо тебе добрый человек.... Ты меня спас.... все заработало
- 07 March 2022 (24 messages)
-
Доброе утро, у кого то есть ссылка на хорошую статью, как подключиться к clickhouse развернутого в Яндекс облаке с домашнего компа на windows?
-
Документация Yandex.Cloud | Yandex Managed Service for ClickHouse | Подключение к базе данных в кластере ClickHouse
К хостам кластера Managed Service for ClickHouse можно подключиться:
-
Вот тут я уже был, но что то у меня не срослось. Почему то ошибка вот такая получается
-
-
Выглядит как будто хост не открыт наружу
-
-
Сча перепроверю ещё раз, спасибо. Пересоздавал кластер, может там забыл открыть
-
Подскажите у КХ keeper есть такое понятие как Master an Slave?
-
добрый день. Подскажите, как можно добавить в ключ сортировки столбец, не изменяя при этом старые партиции?
-
alter table modify order by ...
но там были ограничения, можно вроде было добавить только новые столбцы и только к конец списка ключа -
Ага, там только новые, а мне надо существующий добавить
-
Если добавлять в конец ключа, то проблем не должно быть.
-
там вроде raft, поэтому есть 1 лидер и фолловеры.
-
А если репликатор подключаешь в существующий кластер, новый, то данные на него руками копировать?
-
-
Пока это просто сахар вроде.
-
то есть там раскукоживается в колонки под капотом?
-
Да
-
-
это два массива
-
т.е. keys, values.
т.е. если будете прям тысячи мапов хранить и по ним лукапить - будет тормозить -
Если вы добавляете новую реплику после того, как таблица на других репликах уже содержит некоторые данные, то после выполнения запроса, данные на новую реплику будут скачаны с других реплик. То есть, новая реплика синхронизирует себя с остальными.
https://clickhouse.com/docs/ru/engines/table-engines/mergetree-family/replication/Репликация данных | Документация ClickHouseРепликация данных Репликация поддерживается только для таблиц семейства MergeTree: ReplicatedMergeTree ReplicatedSumming
-
Немного странный вопрос: можно ли, в зависимости от выбранного диапазона timestamp, обеспечить условную гранулярность по времени?
То есть, при запросе за один час, выдавать результат в виде 30-секундных суммирований (агрегаций), при запросе одних суток (24 часа) выдавать гранулярностью по 5 минут. Это нужно, чтобы график в графане не рендерился на клиентском браузере слишком долго, и за условный месяц мы не получили бы тысячи точек на одном графике, при количестве графиков в десятке. -
в плагине Grafana для ClickHouse есть переменные $from, $to, $interval. если вам функционала $interval недостаточно, сделайте свою переменную, которая в зависимости от select datediff($from, $to) будет генерить выражение колонки для "Group By ..." и засуньте ее в запрос Grafana
- 08 March 2022 (95 messages)
-
в query options вроде на граф панели можно кол-во точек на графике задать
-
-
Доброе утро, подскажите, имеется 5 шардов, в каждом по три реплики, вопрос, как лучше организовать запись данных и считывание, если ж все делать на одном каком то сервере, то нагрузка будет большой? Заранее благодарен!
-
если полностью контроллируете процесс то шардируйте и сортируйте данные перед вставкой
запись делайте непосредственно в ReplicatedMergeTree таблицы
данные читайте из Distributed
это наиболее быстрый вариант -
а считывать данные, тоже контролировать с какого сервера лучше?
-
нет, там просто можно round robin выбирать любую ноду
можно chproxy для чтения поставить или nginx перед кластером
там у вас на схеме непонятные стрелки между шардами черные, не ясно что они значат -
Да это я для себя связь обнозначил, один кластер
-
то есть получается отказ от автоматического шардирования
-
ну можно вставлять в distributed
но тогда надо следить когда данные доедут до ReplicatedMergeTree и получаете в итоге записи в два раза больше
сначала .bin файлы для Distributed создаются
а потом они на destination nodes в ReplicatedMergeTree уже пишутся -
Hi
-
еще вопросик, а где то можно посмотреть, какой ключ на каком шарде записан?
-
Смотреть в создание дистрибьютед таблицу
-
я имею ввиду можно ли определить, какой ключ на какой шард попадет?
-
Можно
-
Distributed | Документация ClickHouse
https://clickhouse.com/docs/ru/engines/table-engines/special/distributed/Distributed | Документация ClickHouseDistributed Движок Distributed не хранит данные самостоятельно, а позволяет обрабатывать запросы распределённо, на неско
-
Почему он пытается сделать toYYYYMM(env)?
CREATE TABLE positions (
env String,
timestamp String,
sequence_id Int32,
legal_entity String,
symbol_id Nullable(String),
currency String,
account_id String,
type String
) ENGINE = ReplacingMergeTree(env, (env, account_id, symbol_id, currency), 8192);
Code: 43. DB::Exception: Illegal type String of argument of function toYYYYMM. Should be a date or a date with time: While processing toYYYYMM(env) -
-
Может потому что строка не может быть ключом партиционирования? Там по-видимому требуется что-то Int-представимое, или float, если allow_floating_point_partition_key=1
-
лучше не использовать старый синтаксис создания таблицы
https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/#table_engine-mergetree-creating-a-tableMergeTree | ClickHouse DocumentationMergeTree The MergeTree engine and other engines of this family (*MergeTree) are the most robust ClickHouse table engine
-
коллеги почему выдается такая ошибка
Missing columns: 'UserID' 'EventDate' 'CounterID' while processing query: 'CounterID, EventDate, intHash32(UserID)', required columns: 'CounterID' 'EventDate' 'UserID' 'CounterID' 'EventDate' 'UserID'. (UNKNOWN_IDENTIFIER)
сама таблица
CREATE TABLE a_cluster
(
hash String,
tt String,
date Date,
timestamp UInt64,
h UInt64,
from Nullable(String),
to Nullable(String),
transaction_hash String,
value UInt256
)
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/table_name', '{replica}', date)
PARTITION BY toYYYYMM(date)
ORDER BY (date, intHash32(date))
SAMPLE BY intHash32(date) -
а запрос какой
-
Hi
I have this problem with clickhouse in k8s
Liveness probe failed: Get "http://*******:8123/ping": dial tcp **:8123: connect: connection refused
can anyone help me please
Thanks -
я сейчас переделал , ибо увидел очепятку тупую (( , сейчас дает такую ошибку
DB::Exception: Primary key must be a prefix of the sorting key, but the column in the position 0 is date, not height. (BAD_ARGUMENTS) (version 22.2.2.1)
сам запрос
CREATE TABLE a_cluster ON CLUSTER chain_cluster_3_nodes
(
hash String,
tt String,
date Date,
timestamp UInt64,
h UInt64,
from Nullable(String),
to Nullable(String),
transaction_hash String,
value UInt256
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/table_name', '{replica}', date)
PARTITION BY toYYYYMM(date)
ORDER BY (date, intHash32(date))
SAMPLE BY intHash32(date) -
does docker container started ? what is output of open ports netstat -atpn ?
iptables-save ? -
yes pods started and running but after for example 1h they get CrashLoopBackoff
-
.
-
Seems that problem of memory exhaust ,need to see a pod logs
-
-
-
Check some secret logs under /var/log/clickhouse-server/.
-
-
-
Can i disable health check?
I deploy with kind: "ClickHouseInstallation" -
apiVersion: "clickhouse.altinity.com/v1"
kind: "ClickHouseInstallation"
metadata:
name: "repl-05"
spec:
defaults:
templates:
dataVolumeClaimTemplate: default
podTemplate: clickhouse:20.7
configuration:
zookeeper:
nodes:
- host: zookeeper.rezvani-prom.svc.cluster.local
port: 2181
clusters:
- name: replicated
layout:
type: Standard
shardsCount: 2
replicasCount: 2
templates:
volumeClaimTemplates:
- name: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
storageClassName: rook-cephfs
podTemplates:
- name: clickhouse:20.7
spec:
containers:
- name: clickhouse-pod
image: yandex/clickhouse-server:20.7
resources:
requests:
memory: "1Gi"
cpu: "1"
limits:
memory: "1Gi"
cpu: "1" -
I would recommend look up for memory utilization metrics, as so namespace events and do not disable health checks.
Btw maybe clickhouse operator logs clarify your issue. -
-
i have resource qouta so it came from it?
-
If it sets memory limits, I guess so. Looks like clickhouse pod got killed by OOM.
-
Thank you, @dev0urer @naimson
i will check it tommorow -
You are welcome , I am also try to learn farsi sado
-
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/table_name', '{replica}', date)
у вас лишний параметр - date ? или там раньше был ReplicatedReplacingMergeTree? -
Раньше было replicated replacing , как дома буду посмотрю
-
фиксанул, но там все равно новую ошибку zookeeper дает (
DB::Exception: There was an error on [162.55.2.54:9000]: Code: 342. DB::Exception: Existing table metadata in ZooKeeper differs in mode of merge operation. Stored in ZooKeeper: 5, local: 0. (METADATA_MISMATCH) (version 22.2.2.1). (METADATA_MISMATCH) -
смените путь в ЗК, у вас там не пусто...
например так
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/a_cluster', '{replica}', date) -
а старый как удалить ?
-
-
-
-
проверьте что у вас там...
select * from system.replicas r ; -
Привет всем. Кто углублялся в тему RAM-дисков? Ищу решение, которое способно развивать скорость от 50 гб/с и выше на передачу файлов (чтение/запись). Мне надо знать хотя бы, что нужно для таких скоростей? Что влияет на скорости оперативной памяти? Тайминги? Частота? Кол-во ядер процессора? На обычных современных компьютерах скорость примерно 10-15 гб/с на чтение и запись. Да, тут ещё и программно многое что зависит, но хотелось бы узнать сначала про аппаратную часть. Вот максимально какое решение можно сделать по скоростям? Скажите что кэш процессора, да, соглашусь, он быстрее чем RAM-диск, но надо объём от 4 гб.
-
А что вы пытаетесь сделать?
-
Передачу куда? Вы раньше столкнётесь с проблемами при передаче такого объема через сеть, скорее.
В чём вообще проблема? Используйте себе shm на здоровье -
да нет ограничений в принципе - просто делите задачу на несколько параллельных и всё. сетевые устройства сейчас продаются infiniband даже БУшные на 40 Гб/с за копейки относительно
-
Имеется архив на 3 ГБ примерно. В этом архиве 2 миллиона файлов, которые очень мало весят, по пару КБ. Этот архив надо распаковать с этими файлами. На SSD это крайне долго, про HDD вообще молчу. На RAM диске уже быстрее. Нужна максимальная скорость или другое альтернативное решение для этой задачи.
Распаковать все файлы, далее их отсортировать их (сделать по ним поиск, это .txt файлы, поиск по словам), и далее переместить найденные .txt файлы в другую папку на RAM диске, ну и потом их объединить в 1 файл. Всё это крайне долго занимает даже на RAM диске. -
а какой бюджет то? :)
-
не уверен что в тему, но 2кк файлов в одной папке - очень плохо. почти все FS будут тормозить. попробуйте на уровне распаковки разложить их по папкам, не более 10к в каждой. но find & etc всё равно будут тормозить
-
-
я удалил путь, но на одном узле выдает ошибку такого рода (
An error occured before execution: Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 34: UUID '660774a1-da81-429f-b6f4-6df6420bbc02' ON CLUSTER chain_cluster_3_nodes (hash String, tt String, date Date, timestamp UInt64, h UInt64, from Nu. Expected one of: storage definition, token, OpeningRoundBracket, ENGINE, ON, AS, e.what() = DB::Exception -
Так может вам взять обычную какую-нибудь k/v БД типа кассандры?
-
Если даже и найдётся готовое решение - то в любом случае только аренда. Мне на постоянную работу не нужно это.
-
может в сжатом виде попробуете https://www.kernel.org/doc/html/latest/admin-guide/blockdev/zram.html
-
попробуйте в облаке амазон просто последний АМД арендовать если там такой есть - и то же самое из оперативки
-
А разве сжатие оперативной памяти прибавляет ей скорость? Разве что, только увеличивая её объём
-
Так конфиг надо сначала собрать, собственно вопрос у меня и в этом. Что надо конкретно для максимальной скорости RAM диска? Может там надо 7000+ мгц для него. Или что-то другое
-
ты попробуй, вообще если множество маленьких файлов то поэкспериментируй с BTRFS и Reiser
-
А просто читать архив, грепать файлы и нужные вытаскивать - не вариант?
-
А что с файлом собираетесь делать? Нужен ли этот большой файл?
-
Файл чего? Я же написал ранее что я собираюсь делать. Сейчас у меня архив только с собой.
-
> далее переместить найденные .txt файлы в другую папку на RAM диске, ну и потом их объединить в 1 файл. Всё это крайне долго занимает даже на RAM диске.
-
Это всё время занимает довольно продолжительное. И надо ещё уточнить где именно выполнять эти операции. Может на HDD имелось ввиду вообще. Я за этим сюда и пришёл, чтобы узнать что быстрее RAM-диска для моей задачи. Или же как ускорить RAM-диск.
-
Перемещение как раз будет быстрым, скорее всего
-
Объединение мелких .txt файлов которые весят пару МБ, пусть даже и сотни тысяч, этот большой файл максимум будет весить под 100 МБ.
-
Быстрее всего - не совершать ненужных операций. Прочитали контент, проверили, если нужно - выгрузили.
-
-
Да, соглашусь, но опять же, смотря где это всё делать. Или же на скоростном ssd диске, или же на старом HDD. Это разные вещи, где будут выполняться операции.
-
Не совсем понятно в чём проблема разных имен, ну да не суть.
Основной затык который я вижу - поиск фразы в тексте и он будет упираться не в скорость рам диска, а в ЦПУ. Это нужно хорошо паралелить -
чтение архива, даже с ротационного диска, если без фрагментации - сотни МБ/с
-
распаковка в оперативе - ГБ/с
-
нужно больше шин памяти и материнку с 4мя процессорами
-
архив 3ГБ - даже смешно, я ежедневно так сотни ГБ обрабатываю
-
А вот это уже начинает становится сомнительной идеей - нума может сожрать весь пруфит
-
да и нужно определить где сейчас узкой место - в процессоре или скорости чтения записи
-
Смешно не его размер, и размер файлов в нём, а их количество в архиве
-
тип архива?
-
rar
-
архив плоский? без вложенных директорий?
-
В архиве есть папки, в этих папках от 50к файлов
-
А с какой проблемой Вы собственно столкнулись? Что у вас при переборе нагружено?
-
Ну например на Windows только чтобы открыть архив занимает около часа времени на SSD быстром. Winrar не отвечает просто. Тут только чтобы прочитать эти 2 млн файлов, требуются часы времени. А их ещё надо и распаковать, и выполнить поиск по ним. На HDD/SSD - бесполезно просто.
-
Всё, забудьте, быстрее не будет
-
Не нужно использовать WinRar, он наверняка читает весь архив сначала, а потом еще в GUI это отрисовывает
-
Хороший ответ. Спасибо большое.
-
Rar паралельно Вы не вычитаете
-
Да
-
??? если не solid, то можно попробовать
- 09 March 2022 (60 messages)
-
Приветствую, сталиквался ли кто-то со следующей задачей:
Есть поле UInt64 нужно посчитать сколько раз встречается каждый бит этого пол вы выборке, то есть бит в позиции 0 -> 100 записей, бит в позиции 1 -> 20 ... бит в позиции 63 -> N записей? -
Здравствуйте! в запросе использую round(x,2) колонка x имеет тип float. В результате получаю для некоторых значений два знака после запятой, а для некоторых больше двух.
Как исправить?
X - nullable , если это важно. -
Ребят, подскажите что я делаю не так: пытаюсь сделать бекап clickhouse с помощью clickhouse-backup, программа отрабатывает, но сохраняте только метаданные в json но не создает sql файлы с данными. Может кто подсказать в чем затык?
-
можно как то так
SELECT
pos,
countIf(bit = '0') AS zero_bit,
countIf(bit = '1') AS one_bit
FROM
(
SELECT
bin(number) AS res,
splitByString('', res) AS arr,
bit,
pos
FROM numbers(10)
ARRAY JOIN
arr AS bit,
arrayEnumerate(arr) AS pos
)
GROUP BY pos
Query id: 5af511ca-8441-43db-8239-0c1618dab6cf
┌─pos─┬─zero_bit─┬─one_bit─┐
│ 4 │ 10 │ 0 │
│ 3 │ 10 │ 0 │
│ 2 │ 10 │ 0 │
│ 5 │ 8 │ 2 │
│ 1 │ 10 │ 0 │
│ 6 │ 6 │ 4 │
│ 7 │ 6 │ 4 │
│ 8 │ 5 │ 5 │ -
Есть же нормальный bitTest
-
WITH toUInt64(100) AS input
SELECT
sum(bitTest(toUInt64(number), 1) = bitTest(input, 1)) AS count1,
sum(bitTest(toUInt64(number), 2) = bitTest(input, 2)) AS count2,
sum(bitTest(toUInt64(number), 64) = bitTest(input, 64)) AS count64
FROM numbers(100)
Query id: b85434b9-dd54-4582-a23b-b8c34ecc48ce
┌─count1─┬─count2─┬─count64─┐
│ 50 │ 48 │ 100 │
└────────┴────────┴─────────┘ -
спасибо за варианты, мои мысли вокруг этого и крутятся, ещё размышляю о bitPositionsToArray
-
-
-
select (arrayJoin(arrayZip(range(1,64),sumForEach(arrayMap((x) -> bitTest(inputval,toUInt64(x)), range(0,63))))) as res).1 as bitNum, res.2 as bitSetFlag
from (
select cityHash64(number) as inputval from numbers(10)
)
чтоб по битно не писать. -
попробуем и так, уже увидел что вариант с bitTest работает очень даже шустро:
1 rows in set. Elapsed: 0.108 sec. Processed 88.60 million rows, 1.86 GB (816.77 million rows/s., 17.15 GB/s.)
тестировал 40 бит кластер 4 машины -
c range промахнулся, исправил
-
спастибо
-
там нечему тормозить
-
всегда есть тени сомнений )
-
How can i create table or insert some data in specific table on just one shard of cluster?
with mergetree or distributed engine -
пробовали конвертацию в decimal(n, 2) в селекте?
-
-
Яндекс, вообще, зареган в Нидерландах) разрабы наши
-
Тогда какого лешего в документации про политику !?
-
Изначально разработка Yandex, в сентябре прошлого года была выдела отдельная компания ClickHouse Inc (в штатах?)
А так там уже порядочно кода со всего мира. -
Офис то в рф)
-
да хороший офис, и бар там хороший
-
Кто там главный ? Дайте контакт пожалуйста.
-
Хз... на странице яндекса поищите
-
Да вроде не было?
-
где написано?
-
ClickHouse - Fast Open-Source OLAP DBMS
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
промахнулись, пингую
-
сорри
-
спасибо
-
удалилось?
-
со всеми бывает
да, удалилось -
Всем привет, подскажите кто уже обновлялся с 21.6.6.X до последней версии кликхауса? С какими проблемами может сталкивались и как чинили, какие не откатные вещи есть? ПС читаю также ченджлог, но интересно услышать фидбеки от людей если есть. Если всё прошло окей поставьте плиз 👍
-
Пардон, это Python'овский clickhouse-driver в политику вдарился в доке...
-
Если у вас в именах полей есть точки, можете нарваться на обратную несовместимость.
-
Разница в поведении есть между 21.3 и 21.8, точнее я не выяснял
-
Но она ведь и не заявлена нигде... Или нет ?
-
Не заявлена, насколько я помню.
-
Но я не копал, только в коде смотрел как оно сейчас.
-
Проблемы будут с чтением данных (checksums.txt) и с валидацией при вставке.
-
Или не будут, зависит от данных.
-
У меня были 🙂
-
Имеется ввиду сломается таблица или просто откатиться будет сложно (невозможно?)?
-
Откатиться можно, ничего не сломается. Кликхаус после апгрейда будет дохнуть из-за превышения лимита сломаных партов. Это можно обойти через force_restore_data флаг, но тогда он начнет ломаться при вставке данных из-за новой валидации.
-
CREATE TABLE test1
(
`string.names.0` Array(LowCardinality(String)),
`string.values.0` Array(String),
`string.names.1` Array(LowCardinality(String))
)
ENGINE = MergeTree
ORDER BY tuple()
SETTINGS index_granularity = 8192
# 20.12.4.5
insert into test1 format JSONEachRow {"string.names.0": ["name"]}
Ok.
# 21.3.13.9
insert into test1 format JSONEachRow {"string.names.0": ["hello"]}
Ok.
# 21.8.13.1.altinitystable (latest stable)
insert into test1 format JSONEachRow {"string.names.0": ["hello"]}
Received exception from server (version 21.8.13):
Code: 190. DB::Exception: Received from 0:25604. DB::Exception: Elements 'string.names.0' and 'string.values.0' of Nested data structure 'string' (Array columns) have different array sizes.. -
Ага, спасибо, посмотрю таблицы на предмет точек в названиях. А чинили случайно не пересозданием?
-
Ну чтобы починить, надо выбрасывать точки миграцией схемы, а потом апгрейдить.
-
коллеги, приветствую
подскажите, возможно ли использовать postgres_fdw в PostgreSQL для доступа к таблицам ClickHouse по 9005 порту?
если да, то где можно почитать как правильно настроить сервер/промапить юзера/создать таблицу в PostgreSQL для этого?
спасибо -
Решили вопрос
-
Спасибо!
-
postgres_fdw - это для подключения к PG. КХ умеет по протоколу PG отдавать подключения? В смысле, обслуживать подключения.
-
Server Settings | ClickHouse Documentation
Server Settings builtin_dictionaries_reload_interval The interval in seconds before reloading built-in dictionaries. Cli
-
странно что в доках нет до сих пор в integrations
-
Ой-вэй, слона то я и не заметил. Спасибо огромное!
-
Блин, а я все думал, чего все fdw к КХ забросили, через ODBC подключался. Век живи, век учись.
-
мде, не работает postgres_fdw
<Error> PostgreSQLHandler: DB::Exception: Syntax error: failed at position 19 ('pg_catalog'): pg_catalog. Expected one of: number, literal, NULL, FALSE, TRUE, string literal -
clickhouse поддерживает протокол передачи данных но не поддерживает все внутренности postgresql и через этот протококол не поддерживает Posgtres SQL диалект
вам надо внутри Postgres получить данные из clickhouse? какие и зачем ? -
просто проверял работоспособность postgres_fdw
сам клиент работает, вопросов нет, но для fdw нужны структуры внутренние, в общем, я не удивлен -
Hi
- 10 March 2022 (55 messages)
-
И про now64 тоже ничего нет))
-
Добрый день. У меня проблема.
есть докер контейнер clickhouse/clickhouse-server:22.2.2.1
при перегрузке контейнера у меня удаляется база которая внутри докер.
Подскажите как мне лучше перегружать базу КХ. Или киньте ссылочку -
ClickHouse/README.md at master · ClickHouse/ClickHouse
ClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
спс ... пойду впитывать
-
всем привет!
течёт память на серверах
два кластера (боевой и тестовый) по две ноды.
в каждом кластере на одной из нод настроен забор данных из кафки через связку engine=Kafka + mv
в остальном на нодах - одни и те же replicated таблицы и mv
вот потребления памяти за 15 дней с двух нод с прода: слева с ноды с забором данных из кафка.
на тестовом окружении графики такие по характеру, только не так всё быстро (там трафика почти на два порядка меньше)
в запросах с этой страницы https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-who-ate-my-memory/
что-то похожее на значимое показывают только первых два запроса. В первом тотал, похожий на то, что на графиках, во втором много записей (за каждую секунду) вида:
│ 2022-03-10 12:33:16 │ CompiledExpressionCacheBytes │ 114688 │ 112.00 KiB │
(на обеих нодах)
сомневаюсь, что здесь кто-то что-то посоветует, скорее просто держу в курсе
получается, что под подозрением engine=kafka, но как проверить это пока не знаю -
Вроде был такой лик, погуглите. Он падает с ООМ?
-
в конце концов прекращает обработку запросов и отгрузку данных
на проде версия: 22.1.3.7
на тестовом: 22.2.2.1 -
не падает, но и не работает
-
Добрый день.
Подскажите кирилица кликхаусом нормально обрабатывается?
все работало идеально до момента пока в поле string не отправилась кириллица. запрос на создание поля не прошел. -
сообщение кликхауса Cannot parse expression of type String here:
-
Здравствуйте, подскажите как получить разницу между соседними строками?
Мне нужно получить разницу метрик по дням, сгруппированных по дименшенам -
Попробуйте русское имя в двойных кавычках
-
neighbor ?
-
Именно нейбор и имеется в виду. Просто кейс такой, что помимо колонки с датой и числом, дневной прирост которого мы хотим считать, есть другие колонки с айдишниками. Например dim_id.
Как реализовать нейбор, чтобы для каждого значения dim_id мы выводили дневной прирост числовой колонки? -
оконная функция lag / lead, dim_id добавьте в partition by
https://altinity.com/blog/clickhouse-window-functions-current-state-of-the-artClickHouse Window Functions -- Current State of the ArtWindow functions are available in ClickHouse! Learn about this long-awaited feature and how it works, based on extensive QA work at Altinity.
-
Всем привет, вопрос не про CH... просто здесь самые адекватные люди имхо. Нужна быстрая СУБД для хранения и SELECT-запросов по множеству таблиц вида key-value, такая чтобы поддерживала JOIN и работала с этим всем JOIN в mpp-подходе (то есть чтобы можно было масштабировать). Есть ли такая вообще и что можно рассматривать?
-
чем тот же Postgres не подходит? При хорошем проектировании она и JOIN спокойно держит и скорость адекватная
-
и вроде для ch много join в одном SQL не так чтобы хорошо
-
-
для pg вроде сильно лучше
-
Это называется HTAP - Hybrid Transactional Analytical Processing. Из опенсорса можно взглянуть на TiDB, там КХ в качестве аналитического плагина. Из платного какой-нибудь MemSQL, решения Tableu (они купили Hyper), либо строить пайплайны самому из OLTP в OLAP.
-
В любом случае надо тестировать на ваших сценариях и иметь кого-нибудь, кто хорошо понимает как это работает.
-
Десятки join для PG - не проблема, если, опять же, верно настроена БД, индексы и т.п. Все таки надо чуть больше вводных данных )
-
если таки говорить о КХ, то эти ваши KV таблицы тут называются словарями. Их может быть много, они живут преимущественно в памяти и быстро делают примерно то, что вы называете JOIN.
Выбирая инструмент, лучше говорить в терминах задачи, а не предполагаемого решения. -
-
Ну можно вспомнить опыт компании lingualeo. Где они рассказывают как они переехали на pg и у них есть только какие-то id по которым они находят данные, а сами данные лежат в JSONB. И скорость получения данных огромная. Можно почитать на habr и посмотреть в youtube канал ru postgres.
-
-
насколько велики ваши KV словари? Как часто изменяются? У вас там уже сложилось с измерениями/фактами по кимбалу или что-то иное?
-
Задача – хранение произвольных данных для выполнения аналитических запросов. Здесь я имею в виду что система сама создает таблицы, индексы и другие сущности исходя из данных. То есть этим не разработчик занимается а она сама думает о том как хранить, разработчик работает лишь с прикладным слоем. Словари от 1к до 500м строк
-
"этим не разработчик занимается а она сама думает" - тогда смело вычеркивайте КХ. Тут все ровно наоборот - разработчик думает головой. NoSQL подход. Возможности оптимизатора запросов минимальны.
-
-
т.е. вот так - с явным умыслом занимаетесь оффтопиком? Нехорошо....
-
-
мы на КХ делаем, в принципе ОК, главное join-ить объемы влезающие в память...
-
но разработчику надо много думать над запросами...
-
вам может гринплам лучше подойдет
-
-
Привет! Почему-то любой пользователь, кроме default, при попытке просмотреть словари получает пустой ответ. Default получает все данные нормально. Пробовал rbac пользователя создать и явно дать доступ к таблице, тот же результат. По другим системным таблицам селект отрабатывает нормально, проблема исключительно со словарями. Может кто-нибудь сталкивался с такой проблемой?
select * from system.dictionaries
SELECT *
FROM system.dictionaries
Query id: 2ec91bbf-9951-4c97-bd48-4220b2d577f6
Ok. -
Что в правах на другого пользователя прописано?
-
выполнял это
CREATE user rbac_test
GRANT SELECT ON system.dictionaries TO rbac_test WITH GRANT OPTION -
Выполните SHOW ACCESS , проанализируйте разницу между пользователем default и новым
-
спасибо за совет) посмотрю
-
там есть пермишн dictGet
-
Скорее всего, поможет
CREATE USER rbac_test IDENTIFIED WITH plaintext_password SETTINGS PROFILE readonly
GRANT ALL ON *.* TO rbac_test WITH GRANT OPTION;
Будет доступ только на чтение для пользователя. -
Сработало, так словари видит, большое спасибо!
-
Обращайтесь )
-
Кто-нибудь юзал Исполняемые пользовательские функции? https://clickhouse.com/docs/ru/sql-reference/functions/
Пример из доки не работает (
SELECT test_function_python(toUInt64(2))
Query id: bf2b5401-d664-4f80-8f38-c8cd83475568
0 rows in set. Elapsed: 0.002 sec.
Received exception from server (version 22.2.2):
Code: 75. DB::Exception: Received from localhost:9000. DB::Exception: Cannot write into pipe , errno: 32, strerror: Broken pipe: While executing TabSeparatedRowOutputFormat: While processing test_function_python(toUInt64(2)). (CANNOT_WRITE_TO_FILE_DESCRIPTOR)Введение | Документация ClickHouseФункции Функции бывают как минимум* двух видов - обычные функции (называются просто, функциями) и агрегатные функции. Эт
-
Посмотри
https://github.com/ClickHouse/ClickHouse/issues/34604#event-6114388762Executable UDF: read / write other data formats than TabSeparated · Issue #34604 · ClickHouse/ClickHouseHi, I'm trying to figure out how read / write some data formats that are not TabSeparated (e.g. Native or JSONEachRow) in my EUDF - C++ script. Context: I already succeed to implement some ...
-
спасибо. Запопробую на сях
-
Да там и на питоне не сложно
-
ttps://t.me/black_hub
https://t.me/
Менеджер Destrov, [08.03.2022, 16:54]
OrNeverMaaan
https://t.me/likeconcentrat
https://t.me/prophp7
https://t.me/litegroup
@confayazkzn
https://t.me/zdorovoz
https://t.me/optchinaUARU
https://t.me/dimavolkovnostradamus
https://t.me/telbtc
https://t.me/odeepwebchat
@mskstroika
https://t.me/thepalatalordov
https://t.me/okolohookah_chat
https://t.me/musicandit
https://t.me/dejawe
https://t.me/blackmss
https://t.me/git_ru
https://t.me/trikotage
https://t.me/postcoinrussia
https://t.me/golos_io
https://t.me/OPGtelega
https://t.me/otkrytyy
https://t.me/rusmmchat
https://t.me/New_GoodStory
https://t.me/yoba_ch
@avtochatodessa
https://t.me/cpabet
https://t.me/firmodelmarket
@agencytravelua
https://t.me/topchattop
https://t.me/BAZASNG]
https://t.me/ylubka
https://t.me/dnrtg
https://t.me/bestalkota
https://t.me/Dark_Rblnok
https://t.me/str0yka
https://t.me/kievchat
https://t.me/konsaltinggroup
https://t.me/samuichat
https://t.me/blackmarket_chat
https://t.me/workoninternet
@baraholka_zah_buy
https://t.me/ru_philosophy
https://t.me/DarkCourtCha
https://t.me/business_as_it_is
https://t.me/rsgey777
https://t.me/shumibl
@B1LACKMARKET
https://t.me/supergoodadvice
https://t.me/higher_math
https://t.me/business_in_Uk
https://t.me/biznes_chat0
https://t.me/AstraChat
https://t.me/chessconf
https://t.me/linuxcoders
https://t.me/augmoscow
https://t.me/clickhouse_ru
https://t.me/ukrasell
@legko_bank_msk
https://t.me/techat
https://t.me/chernyy_rynok_ukr
@xarcharingrussia
https://t.me/coinmarket1
https://t.me/welcome_to_sprite
https://t.me/xmade
https://t.me/devall
https://t.me/etozhechat
https://t.me/provizorua
https://t.me/glpi_ru
https://t.me/myjobit
@uabar
https://t.me/
Главный Модератор, [04.03.2022, 21:45]
🔱💰@GradientShop_bot💰🔱
✅СВЯЗКИ под МФО♦
✅BTC_BANKER с балансом♦
✅Чистые госы со сканом♦
✅Еу сканы паспортов♦
✅Физ.номера♦
✅Физ. Номера Теле2 (от 1 года,активные)♦
✅Прокси♦
✅Мануалы и обучения♦
✅МЕГАПАК♦
✅Аккаунты БК с фрибетом♦
✅ДЕАНОН♦
✅Взлом телеграм аккаунта♦
✅Верифицированные аккаунты Авито♦
✅АВТОПОСТИНГ♦
✅СОФТЫ♦
✅Создание ботов любой сложности под ключ 🔑 ♦
✅Приватные ПАРСЕРЫ♦
🔰И многое другое только тут:
➡️@GradientShop_bot⬅️
▫️Гарант ☑
▫️Отзывы📣
Главный Модератор, [06.03.2022, 23:52]
🔥🔥ЕСЛИ НАЙДЕТЕ ДЕШЕВЛЕ ОТДАДИМ ВАМ ТОВАР БЕСПЛАТНО🔥🔥
🔱💰@GradientShop_bot💰🔱
✅Qiwi кошельки с БАЛАНСОМ
✅СВЯЗКИ под МФО
✅BTC_BANKER с балансом
✅Чистые госы со сканом
✅Еу сканы паспортов
✅Физ.номера
✅Физ. Номера Теле2 (от 1 года,активные)
✅Прокси
✅Мануалы и обучения
✅МЕГАПАК
✅Аккаунты БК с фрибетом
✅ДЕАНОН
✅Взлом телеграм аккаунта
✅Верифицированные аккаунты Авито
✅АВТОПОСТИНГ
✅СОФТЫ
✅Создание ботов любой сложности под ключ 🔑
✅Приватные ПАРСЕР
////////////////////////////////////////////////
🔥ОБУЧЕНИЕ ЕУ МФО
🔥ОБУЧЕНИЕ РУ МФО
🔥ОБУЧЕНИЕ АБУЗУ БК
🔥ОБУЧЕНИЕ "ДОХОД НА ПАСИВЕ ОТ 2к-4к"
🔰И МНОГОЕ ДРУГОЕ ТОЛЬКО ТУТ:
🔜🔜➡️@GradientShop_bot⬅️🔙🔙
////////////////////////////////////////////////
▫️ЕСТЬ РЕПУТАЦИЕЙ НА ИЗВЕСТНЫХ ФОРУМАХ
▫️ГАРАНТ☑
▫️ОТЗЫВЫ📣
////////////////////////////////////////////////
❗ЕСЛИ НАЙДЕТЕ ДЕШЕВЛЕ ,ОТДАДИМ ВАМ ТОВАР БЕСПЛАТНО
Главный Модератор, [06.03.2022, 23:56]
@ChatsOfScrooge_bot
@DWDCHAT
https://t.me/joinchat/8Z3XQFaOAVBmMjcy
https://t.me/+BlVn14bn5982YThi
https://t.me/+Twqz1HrHOEkyZjcy
https://t.me/+oit_W0md08lkMGUy
https://t.me/+HivpiNaYhxFiZWI6
https://t.me/joinchat/BXIMqpRjU8JhNWEy
https://t.me/joinchat/erE-Bfnt9Sc3ZGE6
Главный Модератор, [07.03.2022, 21:52]
Чаты для рассылок: https://t.me/darksidechat
https://t.me/DarkDeals2
https://t.me/LolzUslugi
https://t.me/saves_cash_chat
https://t.me/joinchat/8Z3XQFaOAVBmMjcy
https://t.me/joinchat/-BDhsbihf3oxYTMy
https://t.me/lztguardbot
https://t.me/ScroogeProjects
https://t.me/DWDCHAT
https://t.me/joinchat/pfZV3mfA6JE0ZWE6
https://t.me/joinchat/hOoGbNlhE0ZmNzcy
https://t.me/joinchat/gPvxPPVS4XxiZTFi
https://t.me/joinchat/M4p0EE6np1KFaHWModY9Fw
https://t.me/joinchat/GbHGDcNiZVM2MGNi
https://t.me/darknetlook
https://t.me/BuffettChatt
https://t.me/sonictv77
https://t.me/joinchat/BlVn14bn5982YThi
https://t.me/PHPГруппа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev
-
ttps://t.me/black_hub
https://t.me/
Менеджер Destrov, [08.03.2022, 16:54]
OrNeverMaaan
https://t.me/likeconcentrat
https://t.me/prophp7
https://t.me/litegroup
@confayazkzn
https://t.me/zdorovoz
https://t.me/optchinaUARU
https://t.me/dimavolkovnostradamus
https://t.me/telbtc
https://t.me/odeepwebchat
@mskstroika
https://t.me/thepalatalordov
https://t.me/okolohookah_chat
https://t.me/musicandit
https://t.me/dejawe
https://t.me/blackmss
https://t.me/git_ru
https://t.me/trikotage
https://t.me/postcoinrussia
https://t.me/golos_io
https://t.me/OPGtelega
https://t.me/otkrytyy
https://t.me/rusmmchat
https://t.me/New_GoodStory
https://t.me/yoba_ch
@avtochatodessa
https://t.me/cpabet
https://t.me/firmodelmarket
@agencytravelua
https://t.me/topchattop
https://t.me/BAZASNG]
https://t.me/ylubka
https://t.me/dnrtg
https://t.me/bestalkota
https://t.me/Dark_Rblnok
https://t.me/str0yka
https://t.me/kievchat
https://t.me/konsaltinggroup
https://t.me/samuichat
https://t.me/blackmarket_chat
https://t.me/workoninternet
@baraholka_zah_buy
https://t.me/ru_philosophy
https://t.me/DarkCourtCha
https://t.me/business_as_it_is
https://t.me/rsgey777
https://t.me/shumibl
@B1LACKMARKET
https://t.me/supergoodadvice
https://t.me/higher_math
https://t.me/business_in_Uk
https://t.me/biznes_chat0
https://t.me/AstraChat
https://t.me/chessconf
https://t.me/linuxcoders
https://t.me/augmoscow
https://t.me/clickhouse_ru
https://t.me/ukrasell
@legko_bank_msk
https://t.me/techat
https://t.me/chernyy_rynok_ukr
@xarcharingrussia
https://t.me/coinmarket1
https://t.me/welcome_to_sprite
https://t.me/xmade
https://t.me/devall
https://t.me/etozhechat
https://t.me/provizorua
https://t.me/glpi_ru
https://t.me/myjobit
@uabar
https://t.me/
Главный Модератор, [04.03.2022, 21:45]
🔱💰@GradientShop_bot💰🔱
✅СВЯЗКИ под МФО♦
✅BTC_BANKER с балансом♦
✅Чистые госы со сканом♦
✅Еу сканы паспортов♦
✅Физ.номера♦
✅Физ. Номера Теле2 (от 1 года,активные)♦
✅Прокси♦
✅Мануалы и обучения♦
✅МЕГАПАК♦
✅Аккаунты БК с фрибетом♦
✅ДЕАНОН♦
✅Взлом телеграм аккаунта♦
✅Верифицированные аккаунты Авито♦
✅АВТОПОСТИНГ♦
✅СОФТЫ♦
✅Создание ботов любой сложности под ключ 🔑 ♦
✅Приватные ПАРСЕРЫ♦
🔰И многое другое только тут:
➡️@GradientShop_bot⬅️
▫️Гарант ☑
▫️Отзывы📣
Главный Модератор, [06.03.2022, 23:52]
🔥🔥ЕСЛИ НАЙДЕТЕ ДЕШЕВЛЕ ОТДАДИМ ВАМ ТОВАР БЕСПЛАТНО🔥🔥
🔱💰@GradientShop_bot💰🔱
✅Qiwi кошельки с БАЛАНСОМ
✅СВЯЗКИ под МФО
✅BTC_BANKER с балансом
✅Чистые госы со сканом
✅Еу сканы паспортов
✅Физ.номера
✅Физ. Номера Теле2 (от 1 года,активные)
✅Прокси
✅Мануалы и обучения
✅МЕГАПАК
✅Аккаунты БК с фрибетом
✅ДЕАНОН
✅Взлом телеграм аккаунта
✅Верифицированные аккаунты Авито
✅АВТОПОСТИНГ
✅СОФТЫ
✅Создание ботов любой сложности под ключ 🔑
✅Приватные ПАРСЕР
////////////////////////////////////////////////
🔥ОБУЧЕНИЕ ЕУ МФО
🔥ОБУЧЕНИЕ РУ МФО
🔥ОБУЧЕНИЕ АБУЗУ БК
🔥ОБУЧЕНИЕ "ДОХОД НА ПАСИВЕ ОТ 2к-4к"
🔰И МНОГОЕ ДРУГОЕ ТОЛЬКО ТУТ:
🔜🔜➡️@GradientShop_bot⬅️🔙🔙
////////////////////////////////////////////////
▫️ЕСТЬ РЕПУТАЦИЕЙ НА ИЗВЕСТНЫХ ФОРУМАХ
▫️ГАРАНТ☑
▫️ОТЗЫВЫ📣
////////////////////////////////////////////////
❗ЕСЛИ НАЙДЕТЕ ДЕШЕВЛЕ ,ОТДАДИМ ВАМ ТОВАР БЕСПЛАТНО
Главный Модератор, [06.03.2022, 23:56]
@ChatsOfScrooge_bot
@DWDCHAT
https://t.me/joinchat/8Z3XQFaOAVBmMjcy
https://t.me/+BlVn14bn5982YThi
https://t.me/+Twqz1HrHOEkyZjcy
https://t.me/+oit_W0md08lkMGUy
https://t.me/+HivpiNaYhxFiZWI6
https://t.me/joinchat/BXIMqpRjU8JhNWEy
https://t.me/joinchat/erE-Bfnt9Sc3ZGE6
Главный Модератор, [07.03.2022, 21:52]
Чаты для рассылок: https://t.me/darksidechat
https://t.me/DarkDeals2
https://t.me/LolzUslugi
https://t.me/saves_cash_chat
https://t.me/joinchat/8Z3XQFaOAVBmMjcy
https://t.me/joinchat/-BDhsbihf3oxYTMy
https://t.me/lztguardbot
https://t.me/ScroogeProjects
https://t.me/DWDCHAT
https://t.me/joinchat/pfZV3mfA6JE0ZWE6
https://t.me/joinchat/hOoGbNlhE0ZmNzcy
https://t.me/joinchat/gPvxPPVS4XxiZTFi
https://t.me/joinchat/M4p0EE6np1KFaHWModY9Fw
https://t.me/joinchat/GbHGDcNiZVM2MGNi
https://t.me/darknetlook
https://t.me/BuffettChatt
https://t.me/sonictv77
https://t.me/joinchat/BlVn14bn5982YThi
https://t.me/PHPГруппа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev
-
@orantius
-
да, на гошке успешно обошли неумение клика работать с динамическими регулярными выражениями. с чтением из stdin там действительно много мороки
-
- 11 March 2022 (78 messages)
-
Всем привет, кто-нибудь может подсказать ссылки на какие-нибудь статьи , исследования про связь количества джоинов и производительности клика. Насколько я помню скорость селектов сильно проседает из-за этого. Это также работает для view и количества джоинов в нем используемых?
-
тут скорее правило, что JOIN это плохо, если у вас нет Очень много оперативной памяти. Правая табла джойна уходит в RAM , а там она хранится в расжатом виде и поэтому ваши 500 метров таблицы превращаются в 5 Гб примерно. Джойны хорошо работают, но на маленьких объемах. Но это мой опыт на 21.8 версии
-
Добрый день всем. Насколько негативно влияет добавление ключей партицирования и нескольких столбцов в primary key на скорость вставки?
Каков вообще примерный объем строк, который клик может обрабатывать для вставки вне зависимости от количества индексов и ключей партицирования? -
Спасибо!
-
Добрый день!
Подскажите, пожалуйста, что можно сделать в ситуации, когда раньше убили мутацию, которая меняла тип колонки Int8 -> Int16, а теперь агрегация по этой колонке не работает с ошибкой DB::Exception: Invalid number of rows in Chunk column Int16 position 1: expected 65505, got 50812 ? Не работает только на некоторых партициях.
Мне уже помогли здесь следующим вариантом решения: залить сломанные партиции во временную таблицу, удалить их из исходной, потом из временной залить заново в исходную, чтобы мерджи еще раз отработали. Но проблема в том (что я выяснила уже после) , что на некоторых сломанных партициях обычные селекты без агрегаций тоже не работают. То есть я не могу сделать insert в другую таблицу по той же ошибке.
Может кто-то сталкивался с подобным и решал эту проблему? -
Добрый день! При создании базы данных на движке MaterializedPostgreSQL в CH появляется база но вообще без таблицы.
Делаю вот так:
CREATE DATABASE demodb
ENGINE = MaterializedPostgreSQL('postgres1:5432', 'postgres_database', 'postgres_user', 'postgres_password')
SETTINGS
materialized_postgresql_tables_list = 'table1,table2,table3';
PK в таблице есть, пользователь Postgre с правами Superuser и Replication.
Кто-нибудь сталкивался с этим, подскажите пожалуйста, как это можно решить? -
Я как помню там какой то определённый тип репликации требуется.
-
Вы по доке делали ? https://clickhouse.com/docs/ru/engines/database-engines/materialized-postgresql/MaterializedPostgreSQL | Документация ClickHouse
[экспериментальный] MaterializedPostgreSQL Создает базу данных ClickHouse с исходным дампом данных таблиц PostgreSQL и з
-
Да
-
Добрый день, 2 реплики одного шарда начали разъезжаться по заниманиемому месту. Реплика, которая стала больше "жрать" в лог сыпет ошибками (структуру не меняли очень давно)
2022.03.11 13:28:37.800477 [ 116465 ] {} <Error> ladnl.dnl_log_local: auto DB::StorageReplicatedMergeTree::processQueueEntry(ReplicatedMergeTreeQueue::SelectedEntryPtr)::(anonymous class)::operator()(DB::StorageReplicatedMergeTree::LogEntryPtr &) const: Code: 49, e.displayText() = DB::Exception: Unexpected merged part 3895_19197_24304_103_24336 intersecting drop range 3895_20969_21725_999999999_24336, 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) @ 0x8b5e67a in /usr/bin/clickhouse
1. DB::Exception::Exception<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&) @ 0xda7ad7e in /usr/bin/clickhouse
2. DB::MergeTreeData::removePartsInRangeFromWorkingSet(DB::MergeTreePartInfo const&, bool, std::__1::unique_lock<std::__1::mutex>&) @ 0x100ef0ff in /usr/bin/clickhouse
3. DB::StorageReplicatedMergeTree::executeDropRange(DB::ReplicatedMergeTreeLogEntry const&) @ 0xfea66be in /usr/bin/clickhouse
4. DB::StorageReplicatedMergeTree::executeLogEntry(DB::ReplicatedMergeTreeLogEntry&) @ 0xfea47ed in /usr/bin/clickhouse
5. ? @ 0xff2887f in /usr/bin/clickhouse
6. DB::ReplicatedMergeTreeQueue::processEntry(std::__1::function<std::__1::shared_ptr<zkutil::ZooKeeper> ()>, std::__1::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&, std::__1::function<bool (std::__1::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&)>) @ 0x102a996c in /usr/bin/clickhouse
7. DB::StorageReplicatedMergeTree::processQueueEntry(std::__1::shared_ptr<DB::ReplicatedMergeTreeQueue::SelectedEntry>) @ 0xfed86dd in /usr/bin/clickhouse
8. ? @ 0x1006eab7 in /usr/bin/clickhouse
9. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0x8ba1458 in /usr/bin/clickhouse
10. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()&&...)::'lambda'()::operator()() @ 0x8ba2e1f in /usr/bin/clickhouse
11. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x8b9e99f in /usr/bin/clickhouse
12. ? @ 0x8ba1ec3 in /usr/bin/clickhouse
13. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so
14. __clone @ 0xfe9fd in /usr/lib64/libc-2.17.so
(version 21.6.4.26 (official build))
Подскажите, что посмотреть, чтобы починить? -
Добрый день, подскажите пожалуйста, как можно сделать COUNT(DISTINCT `field`) в семействе движков CollapsingMergeTree без FINAL ?
-
Всем привет, кто-нибудь сталкивался с проблемами при переходе со старой версии КХ на более новую?
У нас стоят 19.15.2.2 и 20.8.19.4
Хотим перейти на 22.2.2.1
Какие вообще есть риски обновления текущего инстанса, не создавая копию? Миграция данных может прилично времени и памяти отнять ( -
а тестовый такой же у вас есть?
-
а что можно сделать с таблицами типа system.asynchronous_metric_log_9 и system.query_thread_log_3 и т.д.? их у меня почему-то десятки и они занимают они 10+gb...
-
Вы часто обновляли кликхаус ?
-
ну за пару лет наверное 10+ раз набежало
-
Ну вот, по идее можете отсавить только с максимальной цифрой лог
-
И то если он вам нужен, можете удалить вроде как и кликхаус сам пересоздаст
-
ок, спасибо
я думал может команда какая-то есть - руками это тяжело чистить... -
DELETE TABLE и всё
-
ну да, пару десяток раз... :)
-
Всем привет! Пытаюсь запустить клиент на C++. Всё успешно компилится но не работает ( запрос строки должен возвращать.
подробнее проблему описал тут.
https://stackoverflow.com/questions/71420049/dont-run-program-with-successful-compilation-c
Может кто подскажет или поделится своим проект на плюсах? Я не чень в них погружен. Заранее спасибо!don't run program with successful compilation c++I try execute this code. #include <clickhouse/client.h> #include <iostream> using namespace clickhouse; int main(){ /// Initialize client connection. ClientOptions settings =
-
Нету
Еще полгода назад создавали тестовый инстанс, и проверили по нему часть данных, всё было ок, но всех данных так не проверить
Какие в целом есть риски такого обновления? В худшем сценарии бд не может заблокироваться совсем например? -
Я бы вам рекомендовал обновлятсья по lts версиям. Проблемы могут быть из-за разных баз данных в 19/22 версии. Так же будут не совпадать checksum для столбцов из-за изменений хранения информации.
-
Коллеги, добрый день! Подскажите, можно ли и если можно то как (какой должен быть тип индекса) создать индекс для существующей таблицы. В ней скажем 10 столбцов и я хочу создать 2 индекса, по 2 столбцам. В order by уже указаны не интересующие меня столбцы.
Например для индексированного поиска по столбцу column1 можем попробовать так:
Alter table MYTABLE add index MYINDEX (column1) type minmax;
Но насколько я понимаю, минмакс тут совершенно вставлен не корректно. -
В кликхаусе нету "обычных" индексов, сейчас есть order by и skip-index. Уже в зависимости от данных выбирать тип индексов.
-
Спасибо за совет!
Видимо без копии не обойтись -
-
А какие данные он качает ?
-
партици таблицы которая и так у него есть
-
Добрый день, подскажите пожалуйста, как можно сделать COUNT(DISTINCT `field`) в семействе движков CollapsingMergeTree без FINAL ?
-
Привет!
Подскажите пжл по интеграции с Kafka. Попробовал узнать на SO, но там пока без ответа https://stackoverflow.com/questions/71426336/clickhouse-kafka-engine-on-cluster
Продублирую сюда:
Запускаю кластер кх и кафку в докер-компоуз https://github.com/apanasevich/clickhouse-etl-cluster под Win10
Создаю реплицируемую таблицу, таблицу кафки и вью:
CREATE TABLE tmp ON CLUSTER cluster
(
`event_timestamp` DateTime64(3, 'Europe/Moscow'),
`account_id` Int32,
`session` String,
`type` Int16
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/etl/tmp', '{replica}')
PARTITION BY toMonday(event_timestamp)
ORDER BY (account_id, event_timestamp)
TTL toDateTime(event_timestamp) + toIntervalDay(90);
CREATE TABLE tmp_kafka_datasource
(
`topic_data` String
)
ENGINE = Kafka
SETTINGS kafka_broker_list = 'kafka:29092', kafka_topic_list = 'Tmp',
kafka_group_name = 'clickhouse_etl_group', kafka_format = 'JSONAsString', kafka_num_consumers = 1;
CREATE MATERIALIZED VIEW tmp_consumer TO tmp
(
`event_timestamp` DateTime64(3),
`account_id` Int32,
`session` String,
`type` Int16
) AS
SELECT
fromUnixTimestamp64Milli(JSONExtract(topic_data, 'time', 'Int64')) AS event_timestamp,
toInt32(JSON_VALUE(topic_data, '$.data.accountId')) AS account_id,
JSON_VALUE(topic_data, '$.data.session') AS session,
toInt16(JSON_VALUE(topic_data, '$.data.type')) AS type
FROM tmp_kafka_datasource;
Проблема - в табличке нет данных, хотя для заданной консюмер группы в кафке нет лагов, т.е. данные читаюся. В том числе они читаются напрямую из таблицы кафка (если удалить вью).
Если сделать insert в реплицируемую таблицу, то данные вставляются и реплицируются.
Если создавать таблицу как не реплицируемую (ENGINE=MergeTree), то вся схема интеграции работает тоже.
Что не так сделано?
В логах только это:
2022.03.11 07:39:54.519652 [ 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.4.14 (official build)). If it is an IPv6 or IPv4 address and your host has disabled IPv6 or IPv4, then consider to specify not disabled IPv4 or IPv6 address to listen in <listen_host> element of configuration file. Example for disabled IPv6: <listen_host>0.0.0.0</listen_host> . Example for disabled IPv4: <listen_host>::</listen_host>
2022.03.11 07:39:54.641049 [ 249 ] {} <Error> virtual bool DB::DDLWorker::initializeMainThread(): Code: 999. Coordination::Exception: All connection tries failed while connecting to ZooKeeper. nodes: 172.27.0.2:2181
Poco::Exception. Code: 1000, e.code() = 111, Connection refused (version 21.11.4.14 (official build)), 172.27.0.2:2181
Poco::Exception. Code: 1000, e.code() = 111, Connection refused (version 21.11.4.14 (official build)), 172.27.0.2:2181
Poco::Exception. Code: 1000, e.code() = 111, Connection refused (version 21.11.4.14 (official build)), 172.27.0.2:2181
(Connection loss). (KEEPER_EXCEPTION), Stack trace (when copying this message, always include the lines below):Clickhouse Kafka engine on clusterI'm playing with Kafka engine on ClickHouse cluster. At the moment ClickHouse 22.1 cluster and Kafka are run in Docker. Here are configurations: https://github.com/apanasevich/clickhouse-etl-cluste...
-
0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0x9b605d4 in /usr/bin/clickhouse
1. Coordination::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Coordination::Error, int) @ 0x134a60d5 in /usr/bin/clickhouse
2. Coordination::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Coordination::Error) @ 0x134a6416 in /usr/bin/clickhouse
3. Coordination::ZooKeeper::connect(std::__1::vector<Coordination::ZooKeeper::Node, std::__1::allocator<Coordination::ZooKeeper::Node> > const&, Poco::Timespan) @ 0x134e6202 in /usr/bin/clickhouse
4. Coordination::ZooKeeper::ZooKeeper(std::__1::vector<Coordination::ZooKeeper::Node, std::__1::allocator<Coordination::ZooKeeper::Node> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Timespan, Poco::Timespan, Poco::Timespan, std::__1::shared_ptr<DB::ZooKeeperLog>) @ 0x134e475c in /usr/bin/clickhouse
5. zkutil::ZooKeeper::init(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 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&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) @ 0x134a89e1 in /usr/bin/clickhouse
6. zkutil::ZooKeeper::ZooKeeper(Poco::Util::AbstractConfiguration const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<DB::ZooKeeperLog>) @ 0x134ab12d in /usr/bin/clickhouse
7. void std::__1::allocator<zkutil::ZooKeeper>::construct<zkutil::ZooKeeper, Poco::Util::AbstractConfiguration const&, char const (&) [10], std::__1::shared_ptr<DB::ZooKeeperLog> >(zkutil::ZooKeeper*, Poco::Util::AbstractConfiguration const&, char const (&) [10], std::__1::shared_ptr<DB::ZooKeeperLog>&&) @ 0x11ea3abb in /usr/bin/clickhouse
8. DB::Context::getZooKeeper() const @ 0x11e83856 in /usr/bin/clickhouse
9. DB::DDLWorker::getAndSetZooKeeper() @ 0x11ed5e6c in /usr/bin/clickhouse
10. DB::DDLWorker::initializeMainThread() @ 0x11ee746c in /usr/bin/clickhouse
11. DB::DDLWorker::runMainThread() @ 0x11ed38f4 in /usr/bin/clickhouse
12. ThreadFromGlobalPool::ThreadFromGlobalPool<void (DB::DDLWorker::*)(), DB::DDLWorker*>(void (DB::DDLWorker::*&&)(), DB::DDLWorker*&&)::'lambda'()::operator()() @ 0x11ee847a in /usr/bin/clickhouse
13. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x9ba2697 in /usr/bin/clickhouse
14. ? @ 0x9ba609d in /usr/bin/clickhouse
15. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
16. clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so
(version 21.11.4.14 (official build))
2022.03.11 07:42:23.082220 [ 249 ] {eef27851-f848-4b5a-8a95-cf568951cf75} <Warning> etl.tmp (3eb29f08-e712-4705-beb2-9f08e712c705): It looks like the table /clickhouse/tables/01/etl/tmp was created by another server at the same moment, will retry -
Hi
-
hello!
-
Можете тогда, пожалуйста, прояснить ситуацию? Как лучше поступить, если скажем в таблице из 10 столбцов по каким-то 3 (по каждой отдельно, а не вместе) из них нужно частенько делать поиск? Если просто перечислить из в group by, то поиск уже по второй колонке (не говоря про третью) будет сравним с фулсканом, разве нет?
-
если кому надо, ошибка была в правах доступа к скрипту. Всё заработало после chmod 755 md5binary.py
-
Наверное, проще всего будет держать 3 таблицы с разным ПК.
-
В идеале, возможно. Но это в дальнейшем вызовет проблемы, так как все данные нужно будет всё равно агрегировать, например джойном
-
Так таблицы будут по сути одинаковые, просто иметь разный ПК. Зачем их джойнить?
-
Предлагаете создать 3 копии таблицы с сортировкой по разным полям?
-
Добрый день, подскажите пожалуйста, как можно сделать COUNT(DISTINCT `field`) в семействе движков CollapsingMergeTree без FINAL ? Если нету, то так и скажите, я пойму
-
Кажется, тут кафка не причём. Поэкспериментируйте просто с replicated таблицей. Как-будто с зукипером не может сн соединиться, соответственно не может проводить репликацию
-
Если предполагается частый поиск и невозможно построить общий индекс, то, вероятно, это будет единственным вариантом. Хотя по идее можно и проекции для этого использовать. Но я с проекциями не возился. Попробуйте.
-
Проекции в релизе же в последних версиях
-
Да. Я уже вспомнил о них :)
-
может uniq(field) и его модификации
вместо COUNT(DISTINCT field) -
А какие у вас в ORDER BY столбцы ? Может можно опимизировать его ?
-
Это всё три столбца, содержащие разные контрольные суммы (md2 md4 md5). Суть поиска в том, что нам бывает необходимо сверить какой либо из этих хешей с тем, что лежит в базе. Поэтому я не уверен, насчёт оптимизации
-
Про проекции не знал, буду изучать
-
-
Создание SSH-туннелей с помощью PuTTY
В данной статье будет описано как строить SSH-туннели с помощью PuTTY. Рассмотрим следующую ситуацию. Мы находимся внутри корпоративной сети, у нашего компьютера доступ во внешний мир полностью закрыт. Влиять на политику ограничения доступа у нас возможности нет, но зато есть SSH–доступ на один из серверов с маршрутизируемым IP-адресом.
-
пробую, но не работает почему-то...
-
например тут http://ui.tabix.io/#!/login не могу подключиться к удалённому кликхаусу, указывая локальный хост и порт
-
-
-
Да, с кафкой всё ок. Для обычной MergeTree таблицы всё работает. А для реплицируемой - не работает вставка из MV, а вот вставка insert-ом работает. Пробовал другие реплицируемые таблицы создавать и делать там insert - тоже работает.
Что ещё можно проверить? -
Кто-то видит подводные камни в попытке посчитать количество уникальных записей через
uniqExact(field, sign) - (uniqExact(field, sign) - uniqExact(field)) ? -
Подскажите как создать несколько словарей с источником SOURCE(MYSQL(...)) без дублирования параметров доступа к БД?
Создаю словари через SQL (DDL). Не хотелось бы делать copy-paste одинаковых параметров (db, host, user, password).
В случае создания словаря через XML конфигурацию, можно параметры доступа к MySQL вынести в <include_from>/etc/metrika.xml</include_from>.
Возможно ли подобное с SQL (DDL)? -
ALTER TABLE DELETE, висит мутация и ничего не происходит, как можно понять в чем дело? спасибо
-
Ну только если по ошибке какой то висит
-
https://github.com/ClickHouse/ClickHouse/issues/28367
<named_collections>
<my_conn_name>
<user>emelya</user>
<password>pikefish</password>
<host>mysql.example.com</host>
<port>3306</port>
<database>stove</database>
</my_conn_name>
...
</named_collections>
SELECT ... FROM mysql(my_conn_name, table = 'northwind');
CREATE TABLE ... ENGINE = PostgreSQL(my_conn_name, table = 'northwind');
CREATE DICTIONARY ... SOURCE(MYSQL(NAME my_conn_name TABLE 'northwind'));
CREATE DATABASE ... ENGINE = PostgreSQL(my_conn_name, table = 'northwind'); -
а зачем вы дублируете описание tmp таблицы внутри MV? Не думаю что проблема тут, но я так обычно не делаю - это просто избыточно и некрасиво. Но может и ломается что-то.
-
а что вам мешает хранить все хеши в одной колонке? или у вас часто бывает что искать надо по нескольким хешам сразу? ну или проекции как вариант... если будет поиск по второй и третьей колонках в order by он тоже будет побыстрее чем фулскан, но не так быстро как если первая колонка была включена в условие
-
Такая логика работы, что не могу объединить три столбца в один. По поводу фулскана, да, согласен, немного всё таки быстрее) а про проекции, как я и говорил, я был не в курсе, сейчас вот изучаю
-
Всем спасибо, кто ответил)
-
спасибо.
не нашёл в документации упоминания о named_collections
можно named_collections добавлять через SQL (DDL) ?
в случае с yndex.cloud не нашёл прямого доступа к конфигам. -
Я дико извиняюсь, за своевременный ответ, не могли бы вы подсказать, как вы сгенерировали таблицу? Хочу сравнить данные
у меня получается по такому же запросу из моей таблицы
query_duration_ms: 14 732
result_rows: 17 627 581
memory_usage: 4 304 970 671
при том что результат на запрос
select
count(*)
from
(
select
policy_id,
toDate(start_date) AS s,
toDate(end_date) AS e,
arrayJoin(arrayMap(x -> (s + x), range(assumeNotNull(toUInt16(e - s))))) AS days
from
policies_test p
)
выдает - 2 595 716 571 -
Там нет дублирования. Разбирается JSON с вложенными структурами на части-столбцы
-
Как посчитать количество записей которые идут строго друг за другом?
-
про генерацию не уловил, я просто взял таблицу из постгре в которой 20млн записей ну и скрипт выше
-
sequenceMatch / sequenceCount ?
-
Считает не по строгим правилам, даже когда между записями присутствуют другие
-
оно так и делает (по умолчанию)
-
-
Вот в этом вообще смысла нет. Вместо тестирования одной последней версии придется протестировать еще все промежуточные
-
Откатиться обратно будет невозможно.
А так можно смело обновляться. Может какие-то запросы перестанут работать, придется переписать -
Всем привет! Пытаюсь запустить клиент на C++. Всё успешно компилится но не работает ( запрос строки должен возвращать.
подробнее проблему описал тут.
https://stackoverflow.com/questions/71420049/dont-run-program-with-successful-compilation-c
Может кто подскажет или поделится своим проект на плюсах? Я не чень в них погружен. Заранее спасибо!don't run program with successful compilation c++I try execute this code. #include <clickhouse/client.h> #include <iostream> using namespace clickhouse; int main(){ /// Initialize client connection. ClientOptions settings =
- 12 March 2022 (33 messages)
-
-
Всем привет!
Кто-нибудь знает, почему это всё время происходит? Клик естественно не в работе -
лог посмотрите. он пишет что делает
-
В мониторинге или кликхаусе? У него где логи вообще глянуть
-
/var/log/clickhouse-server/
-
-
Он просто вон куда пишет всё
/opt/homebrew/var/log/clickhouse-server/stdout.log
/opt/homebrew/var/log/clickhouse-server/stderr.log
/opt/homebrew/var/log/clickhouse-server/clickhouse-server.log
/opt/homebrew/var/log/clickhouse-server/clickhouse-server.err.log
/opt/homebrew/var/run/clickhouse-server/clickhouse-server.pid
/opt/homebrew/var/lib/clickhouse/status -
вы не стесняйтесь - смотрите внутри. сломать ничего не получится. Может что-то интересное увидите. Почитайте про логи в линуксе, если тут что-то непривычное. Начать стоит с файла clickhouse-server.log
-
Хорошо, гляну )
-
Существует ли аналог функции toStartOfInterval, чтобы округление было в большую сторону? Задача — получить конец временого интервала?
-
toStartOfInterval() + 1? не прям так но идея вроде понятна должна быть
-
Если честно не совсем понятно, что там искать
-
идея какая, нужно получить начало дня / недели / месяца / года и конец, не затрагивая следующий интервал.
Например, есть дата:
2022-03-12 15:22:10
Если сделать:
SELECT toStartOfInterval(toDate('2022-03-12 15:22:10'), INTERVAL 1 day)
то получим 2022-03-12 03:00:00.000
И вот теперь нужно получить 2022-03-13 02:59:59.999 — то есть временную метку конца интервала.
При этом, интервал может быть разным часы / дни / недели / года. -
select toDateTime(ceil(toUnixTimestamp(now())/300)*300)
-
Спасибо, но получается, что все равно попадает в следующий интервал. Можно отнять секунду (это много), но мне нужно отнимать миллисекунду, чтобы оставаться в текущем интервале.
-
А какая цель получения конца интервала? Если нужно проверить вхождение в интервал, то достаточно проверять "меньше" начала следующего интервала, а не "меньше либо равно" конца текущего интервала.
-
Цель — вернуть из выборки по мимо агрегированных данных, еще и начало и конец интервала, который базируется на дате каждой записи в таблице.
Можно, конечно, не запариваться и на уровне кода потом уже учитывать, что сравнение конца интервала должно быть по оператору "меньше", но что-то будто бы так себе решение. -
наоборот, в вашем случае "конец" интервала будет то 23:59, то 23:59.999, то еще какая странная конструкция просто потому что вы открытое множество эмулируете замкнутым.
-
-
Добрый день!
Интересует возможность INSERT INTO ... FROM INFILE ... FORMAT ... с Windows сервера
Например, на стороне OLTP системы хотим запустить задание по выгрузке данных в ClickHouse с использованием пакетной загрузки. Это возможно?
Если я правильно понял документацию, то Вставка данных из файла поддерживается клиентом командной строки и clickhouse-local.
Клиент командной строки для Windows не существует.
Что такое clickhouse-local? Есть ли он для Windows? -
У меня был похожий кейс, я делал так: храним дату в таймстемпе, делалаем toStartOfInterval() + 1 interval - 1
Но в конечно итоге перешёл к дополнительным столбцам с годом, месяцем, неделей, днем и часом -
clickhouse-local это вещь для анализа данных с помощью синтексиса кликхауса, без сервера. Скорей всего нету по windows. В вашем случае наверное ставить докер контейнер и туда устанавливать клиент и монтировать файлы которые хотите загрузить. Либо с помощью любого языка программирования
-
-
-
-
Всем привет! Подскажите, пожалуйста, есть ли возможность в запрос передать названия столбцов, которые хранятся в другой таблице?
Пример части таблицы из которой я хочу получить столбцы и пример того какие столбцы хочу выбрать из большой таблице, заранее огромное спасибо -
-
Select name from ststem.columns ?
-
Так я получу название столбцов, а могу ли я их передать в другой запрос, чтобы по ним уже выдалась необходимая информация? Например, под мое условие подходит столбец IRKT, могу ли я его(ответ первого запроса) передать в качестве названия столбца во второй? В данном примере мне необходимы все значения внутри столбца IRKT
-
Сегодня свежим взглядом посмотрел и понял о чём вы: да, это явно лишнее. Взгляд уже замылился, поэтому не сразу понял замечание. Если убрать, то да: работает! Странно только, что для обычного MergeTree оно работало и так. Спасибо большое за подсказку!
-
Подскажите, пожалуйста, такой момент использования ClickHouse : интегрирую данные из Kafka в MergeTree и часть топиков ненагружена, допустим, десяток записей в минуту. Чем это грозит ? Такие масштабы - не совсем профиль кх, я понимаю, но и разделять нагруженные и ненагруженные топики по разным СУБД некрасиво.
-
Подписываюсь на вопрос, также интересны последствия. И ещё хотел бы уточнить: а что такое «топик»?
-
Топик - это понятие из Kafka, в данном вопросе достаточно просто считать, что это некий источник записей для кх. В моём сценарии есть топики нагруженные по несколько тысяч записей в секунду, но есть и ненагруженные. Вот для последних интересны последствия вставки редких записей из них в кх: вырастет потребление диска под data parts?
- 13 March 2022 (47 messages)
-
Благодарю! Еще бы в этой документации был пример загрузки локального файла...
-
static void checkForCarriageReturn(ReadBuffer & in)
{
if (!in.eof() && (in.position()[0] == '\r' || (in.position() != in.buffer().begin() && in.position()[-1] == '\r')))
throw Exception("\nYou have carriage return (\\r, 0x0D, ASCII 13) at end of first row."
"\nIt's like your input data has DOS/Windows style line separators, that are illegal in TabSeparated format."
" You must transform your file to Unix format."
"\nBut if you really need carriage return at end of string value of last column, you need to escape it as \\r.",
ErrorCodes::INCORRECT_DATA);
} -
-
Товарищи, помогите вновь пожалуйста.
Есть таблица с 15 кк записей
в таблице примерно 200 полей
запрос типа select id from table where id = 'пример id' выполняется за нормальное время.
а вот select * from table where id = 'пример id'
выполняется в 6-7 раз дольше и это сильно бьёт по перфомансу -
-
Братцы, а что почитать по быстродействию Clickhouse относительно Spark SQL?
Хочу убедить своих боссов, чтобы поставили нам CH на кластер, экспериментов для... -
так особо никуда не покопать, вам надо в 200 раз больше файлов прочитать, конечно всё будет намного медленее. Колоночные базы не предназначены чтобы делать select *
-
Коллеги, Добрый день! Не подскажите, как принудительно заставить кликхаус удалять с диска данные дропнутой таблицы?
-
храните все 200 колонок дополнительно в одной общей, как это делает эластик с его _source. неидеально по многим причинам, но сильно лучше чем читать из 200 колонок
-
я ещё по ним филтрую. Боюсь это может быть ещё больнее
-
так и продолжайте фильтровать по ним. у вас будет 201 колонка, 200 какие есть и 201-я в которой все 200 еще раз продублированы чтобы вы не select * а select 201-я колонка
-
-
-
конечно будет плохо сжиматься и занимать много места, но тут или шашечки или ехать
-
интересно, спасибо. Только вот я этот запрос делаю, для того, чтобы заинсёртить с sign = -1 и закрыть запись в collapsingMergeTree
-
если только для этого случая то тогда конечно так как я сказал делать не надо ))
-
то есть получается что вы не знаете в момент вставки значения 200 полей и нужно взять текущие значения из клика?
-
Всем привет!
Кто-нибудь знает как надо правильно вставлять результат get запроса в клик? -
Вы интересный вопрос задали, на который можно ответить 1000+ способами. Может вы уточните язык, и что вы хотите вставить?
-
Да, простите )
Хочу вставлять в бд (клик или постгрес не суть) данные с сайта используя апишку, если результат не в tsv представлять то результат такая json штука:
{'motd': {'msg': 'If you or your company use this project or like what we doing, please consider backing us so we can continue maintaining and evolving this project.', 'url': 'https://exchangerate.host/#/donate'}, 'success': True, 'query': {'from': 'BTC', 'to': 'USD', 'amount': 1}, 'info': {'rate': 38975.285714}, 'historical': False, 'date': '2022-03-13', 'result': 38975.285714}
А в бд должны быть колонки для записи BTC, USD, 38975.285714, 2022-03-13. Ну откуда, куда, курс и дата
Работать всё должно в airflow, но это не проблема, сначала подумал класть результаты запроса в файлик в каком-нибудь tsv формате, выглядет оно так:
rom to amount rate date result
BTC USD 1 38975,285714 2022-03-13 38975,285714
Что куда приятнее, а потом просто читать из файлика в базу. И вот пытаюсь понять как сразу результат этого запроса бахнуть в базу и в нужные колонки. На птоне код простючий:
import requests
url = 'https://api.exchangerate.host/convert'
response = requests.get(url, params={'from': 'BTC', 'to': 'USD'})
print(response.json())Exchangerate.host - Unlimited & Free foreign, crypto exchange rates with currency conversion & EU VAT rates APIExchange rates API is a free service for current and historical foreign exchange rates & crypto exchange rates & EU vat rates published by the many public sources.
-
Есть clickhouse_driver, в который можете просто скормить эти данные
-
-
Да, надо глянуть, а не подскажите как из этого чудища:
{'motd': {'msg': 'If you or your company use this project or like what we doing, please consider backing us so we can continue maintaining and evolving this project.', 'url': 'https://exchangerate.host/#/donate'}, 'success': True, 'query': {'from': 'BTC', 'to': 'USD', 'amount': 1}, 'info': {'rate': 38975.285714}, 'historical': False, 'date': '2022-03-13', 'result': 38975.285714}
Сделать:
[{'from': 'BTC', 'to': 'USD', 'date': '2022-03-13', 'result': 38975.285714}]
Который должен судя по документации через client.execute ложиться в базу -
это можно сделать на питоне
преобразовать тот же response.json, который является питон - словарём -
Спасибо, попробую )
-
-
а [3, 0, 1, 0] почему?
-
это uniq по n-ому элементу в каждом массиве?
-
типа, берем из всех массивов первый элемент, и делаем uniq?
-
Разница каждого элемента массива
-
потом второй, и по нему тоже uniq, да?
-
так не очень понятно
-
кажется, вы хотите посчитать кол-во уникальных, и потом вычесть 1
-
тоже будет массивом
макс - мин? -
956 - 953 =3
И так далее -
аааа, прикол
-
CTE в помощь
-
arrayDifference ?
-
Да, но сначала надо groupArray применить для каждого индекса и уже потом применять arrayDifference на каждый сгруппированный массив
Думал может что-то есть готовое -
Для чего готовое? diff? sliding? average?
-
diff
Сумма diff значений -
[956,-3,1,0]
[955,1,1,0]
[954,1,1,0]
[953,5,0,-12]
надо получить? -
Хуже. Ему нужно получить по каждому столбцу разницу между минимальным и максимальным значением.
-
Хм, а что сложного
-
arrayMap( ,minForEach, maxForEach)
-
Автору вопроса требуется "Думал может что-то есть готовое"
-
^
- 14 March 2022 (159 messages)
-
подкиньте идей, как можно агрегировать в MV уникальные записи.
Есть таблица (примерная)
CREATE TABLE test1 (
id UInt16,
tp UInt16,
ag UInt16,
date DateTime
) ENGINE = MergeTree()
PARTITION BY toStartOfInterval(date, INTERVAL 4 HOUR)
ORDER BY (id, tp, ag);
При вставке хочу агрегировать с нее данные в view1, чтобы оставлять только уникальные строки по секции ORDER BY,
также хочу иметь возможность дропнуть данные с MV, по партиции. Таблица на миллионы записей, FINAL для Replace не до конца убирает дубликаты.
Идеи, которые пришли в голову
-- v1
CREATE MATERIALIZED VIEW t1_agg ENGINE = AggregatingMergeTree()
PARTITION BY toStartOfInterval(result_date_utc, INTERVAL 4 HOUR)
ORDER BY (id, tp, ag) POPULATE
AS SELECT
id, tp, ag,
result_date_utc
FROM T1
GROUP BY id, tp, ag, toStartOfInterval(result_date_utc, INTERVAL 4 HOUR) as result_date_utc;
-- v2
CREATE MATERIALIZED VIEW t1_agg_max ENGINE = AggregatingMergeTree()
PARTITION BY toStartOfInterval(result_date_utc, INTERVAL 4 HOUR)
ORDER BY (id, tp, ag) POPULATE
AS SELECT
id, tp, ag,
max(result_date_utc) as result_date_utc
FROM T1
GROUP BY id, tp, ag;
-- v3
CREATE MATERIALIZED VIEW t1_agg_max_state ENGINE = AggregatingMergeTree()
ORDER BY (id, tp, ag) POPULATE
AS SELECT
id, tp, ag,
maxState(result_date_utc) as result_date_utc
FROM T1
GROUP BY id, tp, ag;
Из-за особенностей вставки данных ощутимой разницы между v1 и v2 не будет.
Возможно небольшое изменение процесса, тогда v2 будет лучше в агрегации, но менее точен при дропе партиций (из-за мах берем самую большую дату, которая может оказаться через несколько партиций от минимальной)
Можно ли как-то в v3 запихнуть state еще в PARTION? Пока идея только при селекте добавить where на поле. и хранить все что есть -
если коротко, то никак. Окончательная дедубликация всегда в финальном запросе. Будет это какой-нибудь group by или final - зависит от конкретных данных и их потоков.
Идея сделать дедубликацию в MV - порочна изначально, т.к. MV работает с блоками поступающих данных, а не со всей таблицей. -
Привет!
Подскажите, пожалуйста, что можно сделать в ситуации, когда раньше убили мутацию, которая меняла тип колонки Int8 -> Int16, а теперь агрегация по этой колонке не работает с ошибкой DB::Exception: Invalid number of rows in Chunk column Int16 position 1: expected 65505, got 50812 ? Не работает только на некоторых партициях.
Мне уже помогли здесь следующим вариантом решения: залить сломанные партиции во временную таблицу, удалить их из исходной, потом из временной залить заново в исходную, чтобы мерджи еще раз отработали. Но проблема в том (что я выяснила уже после) , что на некоторых сломанных партициях обычные селекты тоже не работают. То есть я не могу сделать insert в другую таблицу по той же ошибке.
Может кто-то сталкивался с подобным? -
Хммм, я бы предложил детач аттач сделать к другой таблице, но вряд-ли селект заработает, возможно на новой таблице запустить мутацию на int8 или на 16 и тогда заработает
-
Спасибо!
Мне как раз здесь предлагали сделать детач и аттач, но проблема в том, что детач нам ломает отправку событий. -
а делать дедупликацию на основе Replacing MV тоже не правильно?
может есть какие-то особенности вызовы FINAL к DISTRIBUTED?
Это запрос с FINAL, но данные все равно дублируются -
-
Ну наверное самое прозаичное решение привести к string, IPv6 ? Через arraymap
-
-
да, final with ReplacingMV with Distributed - это проблема. Distributed соберет вместе результаты нескольких FINAL, но дубликаты между шардами удалять не будет.
Поэтому ваш путь - argMax/group by. -
Я не особо знаток исходников Clickhouse, но кадись он строку превращает обратно в формат данных ipv6 https://github.com/ClickHouse/ClickHouse/pull/21329/filesAdd a function isIPAddressInRange() by depressed-pho · Pull Request #21329 · ClickHouse/ClickHouse
This function takes an IP address and a CIDR network prefix, and determines if the address is contained in the network. It supports both IPv4 and IPv6 addresses, and expects arguments to be strings...
-
-
Вы так спрашиваете, будто бы CH - централизованный сервис. У кого-то, вероятно, наблюдается, у кого-то нет. У всех же свои инстансы
-
На всякий случай, вдруг вы из Яндекса, это не чатик Яндекса.
-
мб у него managed clickhouse в облаке?
-
Тогда тем более поддержка в помощь, или мониторинг
-
-
Коллеги, такой вопрос. Есть stand-alone сервер, 70 GB RAM, таблица с ~70 млн. записей. Запрос uniqExact(id) по таблице может занимать до 2 секунд, независимо от количества условий в WHERE.
Есть ли какой-нибудь потолок в скорости вычислений в CH в расчете на 1 сервер, без кластеров, шардов и т.д.? Никто не проводил такого тестирования? -
По крайне мере в Roadmap на 2022 нету. https://github.com/ClickHouse/ClickHouse/issues/32513Roadmap 2022 (discussion) · Issue #32513 · ClickHouse/ClickHouse
This is ClickHouse open-source roadmap 2022. Descriptions and links to be filled. This roadmap does not cover the tasks related to infrastructure, orchestration, documentation, marketing, integrati...
-
Извиняюсь, впредь буду внимательнее
-
Я бы сказал, что если не меняется время выполнения функции от разных where, то у вас построен PK не правильно. Либо вы запрос where не по индексам делаете
-
можно исключить вообще where. Просто select uniqExact(id) from table... 2 секунды...
-
Добрый день!
Подскажите пожалуйста, как можно вытащить данные одного значения из json
Мне нужно вытащить все услуги что идут после "Name":{Value:
данные храняться вот так:
["Консультации врачей",{"Number":{"IsVisible":false,"Value":1},"Name":{"IsVisible":true,"Value":"Прием (осмотр, консультация) невролога повторный"},"Code":{"IsVisible":true,"Value":"01.17.02"},"Count": "IsVisible":true,"Value":1},"Price":{"IsVisible":false,"Value":0.0},"Sum":{"IsVisible":true,"Value":0.0}},{"Number":{"IsVisible":false,"Value":2},"Name":{"IsVisible":true,"Value":"Прием (осмотр, консультация) невролога первичный"},"Code":{"IsVisible":true,"Value":"01.17.01"},"Count":{"IsVisible":true,"Value":1},"Price":{"IsVisible":false,"Value":0.0},"Sum":{"IsVisible":true,"Value":0.0}},"Лабораторная диагностика",{"Number":{"IsVisible":false,"Value":3},"Name":{"IsVisible":true,"Value":"Общий белок"},"Code":{"IsVisible":true,"Value":"23.05.01.06"},"Count":{"IsVisible":true,"Value":1},"Price":{"IsVisible":false,"Value":0.0},"Sum":{"IsVisible":true,"Value":0.0}},{"Number":{"IsVisible":false,"Value":4},"Name":{"IsVisible":true,"Value":"Мочевая кислота"},"Code":{"IsVisible":true,"Value":"23.05.01.05"},"Count":{"IsVisible":true,"Value":1},"Price":{"IsVisible":false,"Value":0.0},"Sum":{"IsVisible":true,"Value":0.0}} -
Наверное с помощью JSON_QUERY
-
Честно не знаю, нету такой маленькой таблицы для тестов. Скорей всего вам не нужна точность прям в 99,9999% и будет достаточно просто uniq
-
А сколько занимает 70 млн записей места не в сжатом виде по версии кликхауса ? На ваших данных
-
В том то и дело, что нужна.
-
какой тип данных у вас лежит в поле id?
-
Минуту
-
UInt64
-
JSON_QUERY выдает пустое значение
-
А у вас правильный json ?
-
-
а как вы считаете что он выполняется 2 секунды? через консоль? проверяете query_log?
-
Ну на самом деле 2 секунды это даже хорошо. Бывает и по 5-10 секунд. Запросы проверяю в DBeaver и WebStorm. На других таблицах скорость обычно не превышает 400-600 мс.
-
Добрый день, скажите возможно "поймать" ошибку insert при использовании engine Rabbitmq
-
А как понять правильный он или нет?
-
Ну я бы сказал, что это врямя с погрешностью на драйве jdbc посмотрите в clickhouse-client
-
мало опыта работы с json
-
JSON | Документация ClickHouse
Функции для работы с JSON В Яндекс.Метрике пользователями передаётся JSON в качестве параметров визитов. Для работы с та
-
Если взять поле типа UUID, то еще дольше. Это уже тяжело списать на погрешность )
-
https://jsonformatter.org/
хороший валидатор jonBest JSON Formatter and JSON Validator: Online JSON FormatterOnline JSON Formatter / Beautifier and JSON Validator will format JSON data, and helps to validate, convert JSON to XML, JSON to CSV. Save and Share JSON
-
зато легко списать на медленную дисковую систему. Сколько места занимает столбец? Его надо полностью прочитать. Сколько ядер? Сколько тредов работает при запросе? Какая все-таки задержка по сети? Не очень хорошо измерять время в DBeaver, лучше в clickhouse-client прямо на хосте. Заметим, что DataGrip показывает две цифры - общую и самого запроса.
-
Валидный
-
Хм. Спасибо, протестирую все эти моменты...
-
Ну тогда вы не правильно пишите запрос для JSON_QUERY
-
понял, спасибо
-
https://clickhouse.com/docs/ru/sql-reference/functions/json-functions/#json-query тут некоторые примеры естьJSON | Документация ClickHouse
Функции для работы с JSON В Яндекс.Метрике пользователями передаётся JSON в качестве параметров визитов. Для работы с та
-
По идее полностью совместим https://docs.microsoft.com/ru-ru/sql/t-sql/functions/json-query-transact-sql?view=sql-server-ver15
-
Коллеги, а подскажите, есть ли какой-то механизм, как сделать подключение из Oracle в Clickhouse через DBlink?
-
В какую сторону гуглить?
-
В сторону Click House jdbc driver
-
Может, odbc? Причём тут jdbc?
-
О, так вы лучше меня ответ знаете ))
-
Как говорит наш главархитектор, ДБЛинки - зло, гетерогенные дблинки - двойное зло 😁
-
Ну, тут я с ним согласен. Сам не люблю их. Просто задачка прилетела. Хочу исследовать вопрос. Вижу, что есть clickhouse-odbc драйвер. По идее его можно прикрутить в качестве гетерогенного сервиса.
Кто-нибудь пользовался?
https://github.com/ClickHouse/clickhouse-odbcGitHub - ClickHouse/clickhouse-odbc: ODBC driver for ClickHouseODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
-
Всем привет! У меня есть несколько серверов. на которых лежат финализированные парты. Я их переношу на архивные-сервера и там начинаются процессы мержей этих данных которые идут очень долги и зачастую падают с ошибками. Мне эти парты не нужно переМерживать! Как сказать конкретным нодам КХ чтобы он для конкретных таблиц отключил мерж данных ?
-
Думаю, что такого нету, только если через if прописывать самому, либо сделать словарь в котором будет +от UTC и город и потом как то соединять
-
SYSTEM STOP MERGES [ON VOLUME <volume_name> | [db.]merge_tree_family_table_name]
-
я правильно понимаю что мержи включаться после перезагрузки сервера?
-
да. и даже DETACH / ATTACH как указано в документации - https://clickhouse.com/docs/ru/sql-reference/statements/system/#query_language-system-stop-merges
-
как отключить Merges для указанно таблицы вообще на всегда или до явного включения?
-
можно попробовать поискать подходящий сеттинг при создании таблицы. max_bytes_to_merge_at_max_space_in_pool - выглядит обещающе, но я не пробовал.
-
Можно глобально по размеру парта в конфиге запретить мержить парты больше определенного размера, если на бакапном сервере мержи не предполагаются - вариант
-
А что за настройка конфига
-
Оказывается, оно на табличку
https://clickhouse.com/docs/ru/operations/settings/merge-tree-settings/#max-bytes-to-merge-at-max-space-in-poolНастройки MergeTree таблиц | Документация ClickHouseНастройки MergeTree таблиц Значения настроек всех MergeTree таблиц собраны в таблице system.merge_tree_settings. Их можн
-
-
Спасибо, похоже на то, что нужно. Похоже есть зависимость от версии клиента - не все клиенты понимают эту конструкцию.
-
Создал view на remote таблицу. Выбор из этой view отдаёт лишь малую часть данных, причём каждый раз разное количество.
Если просто сделать запрос к remote таблице, то данные получаю все, которые нужны.
Почему view на remote таблицу так себя ведёт? -
-
То есть на Distibuted таблицу ? Сделали view ?
-
Да
-
Чтобы не светить учетную запись и пароль.
-
View на remote view, которая смотрит на distributed таблицу работает нормально.
-
-
Подождите, у вас разделитель у CSV какой ? Запятая или точка ?
-
Настройки | Документация ClickHouse
Настройки distributed_product_mode Изменяет поведение распределенных подзапросов. ClickHouse применяет настройку в тех с
-
есть такая настройка
-
SET format_csv_delimiter = ';'
-
-
Покажите запрос
-
INSERT INTO <имя таблицы> (<список полей>) FROM INFILE <имя файла> FORMAT CSVWithNames;
-
-
INSERT INTO <имя таблицы> (<список полей>) FROM INFILE <имя файла> SETTINGS format_csv_delimiter = ';' FORMAT CSVWithNames;
-
Попробуйте так
-
-
-
-
-
-
Добрый день. Подскажите пожалуйста суть параметра гранулярности minmax скипиндекса, выставленного в 1. Разве смысл параметра гранулярности не в том, для скольки подряд идущих строчек ищутся мин и макс? Ведь если так, то как понять единичную гранулярность вторичного минмакс индекса?
-
Просто видел такой пример на стеке
-
Гранулярность индекса это сколько гранул данных будет в индексе, а не строк. По умолчанию в 1 грануле данных 8192 строк
-
Вероятно вы правы, спасибо)
-
Всем привет, после обновления кластера начали сыпаться ошибки в таком духе
Code: 210. DB::NetException: Connection reset by peer, while writing to socket (10.200.0.7:49192)
Кто нибудь сталкивался? -
Сорри, тогда я в тупике
-
Запросы проходят через chproxy. Кластер 4 шарда, две реплики, проблема на всех нодах куда не ткнётся chproxy
-
Покопался, увидел что открыто много коннектов к другим кликхаусам. Обычно это число составляет ~70 tcp на сервере, а сейчас их аж 250+. Есть какие то настройки как их можно урезать и понять что это за коннекты вообще?
-
Приветствую! Столкнулся со странным поведением Kafka движка в версии 22.1.3.7.
Таблица вида:
Create table table_kafka_out
(
field1 String,
field2 String,
field3 String
) engine = Kafka
SETTINGS kafka_broker_list = ‘broker’, kafka_topic_list = ‘topic’, kafka_group_name = ‘group’, kafka_format = ‘JSONEachRow’
Топик на 5 партиций, replication-factor = 1.
При INSERT в таблицу ожидаемое поведение - равномерно размазанные по партициям сообщения. Реальное поведение - 90% сообщений уходит в первую партицию, остальные неравномерно размазываются по оставшимся четырём.
Пробовал читать из клика и своим продюсером кидать в тот же топик - распределяет равномерно.
На версии 21.х(уже точно не помню) таких проблем не замечал.
Может я не знаю каких-то настроек? Такое ощущение, что используется не round-robin распределение, а что-то другое. -
-
потому что /24 в ipv6 это очень много триллионов адресов
-
-
а есть возможность как то проверять соответствие с CIDR если в первом аргументе поле IPv6 и в него могут попадать IPv4 адреса которые будут к IPv6 приводиться
-
маску подкрутить и норм будет
-
-
Спасибо, буду пробовать
-
Прошу прощения, что вопросом на вопрос, но разве этот движок ClickHouse умеет писать в Kafka?
-
умеет
-
Умеет.
-
А где почитать подробнее про запись? Что будет записано в кач-ве ключа топика? Или там запись без ключа, поэтому вы ожидаете раунд-робин?
-
Явно ключ точно нигде не указывается. До обновления клика на 22.х (с целью получить хранимые функции) распределение было round-robin. Во всяком случае за год использования никогда с такими проблемами не приходилось сталкиваться.
Подробнее официальной документации я ничего не нашёл. -
-
так вроде бы и так можно, через clickhouse-client, как минимум, запросы принимаются в любом регистре
-
-
-
Ясно. В кафке три варианта партиционирования:
1) кастомная стратегия - явно мимо
2) раунт-робин, если без ключа
3) по ключу
Может попробовать посмотреть в ключи топика, может там непусто? -
-
-
Пусто. Судя по ui кафки.
-
Сейчас они в кликхаусе или в какой то другой бд ?
-
уже в CH, движок MergeTree. Приехали из шардированных BQ
-
Merge | Документация ClickHouse
Merge Движок Merge (не путайте с движком MergeTree) не хранит данные самостоятельно, а позволяет читать одновременно из
-
Интересно выходит, можно например сделать dettach партицию и аттач к другой таблице, и это всё автоматизировать каким-нибудь питоном. А так кроме merge нету ничего
-
Спасибо! Пошёл пробовать merge. Подключать для этих задач что-то сторонее не хотелось бы.
Ps. А если id в этих таблицах нет? Его можно указать как concat_key? -
-
с чего вы так решили?
create table t1 (a UInt32, b Nullable(UInt32)) engine MergeTree order by a;
insert into t1 select number, if(number % 2 = 0, number, NULL) from numbers(20);
select count(a),count(b),avg(b) from t1; -
не встречал такого поведения в CH (за исключением avgState с одним из обновлений). в любом случае, затюнить поведение функций можно через countIf, avgIf
-
да, не разобрался, текстовое поле, там не NULL, а ''
соответственно COUNT(DISTINCT FNAME) учитывает это значение -
-
-
-
да вы в самом начале пути. Если коротко, то DELETE отсутствует (пока). есть alter table ... delete, но он про другое и для другого. В вашем случае надо писать ещё одну запись с тем-же id и дедублицировать при выборке. Ищите по архиву многочисленные дискуссии про дедублицацию, argMax & FINAL.
Или тут - https://kb.altinity.com/engines/mergetree-table-engine-family/replacingmergetree/ -
-
-
Используем.
-
Потребовалось в графану записи вывести из CH в log панельку. а там нужно перечислить колонки в виде одной строки status=403 http_host=xxx.yyy http_uri=/path ... и так несколько десятков колонок. где status, http_host, http_uri и тд обычные колонки в таблице.
В CH есть что-то что может закукожить так все колонки в строку или хотя бы как-то похожее на это? или придётся-таки писать функцию? -
Есть же кликхаус расширение для Grafana
-
ну да, datasource, но для log панельки нужно возвращать в нужном виде данные. я про эту панельку https://play.grafana.org/d/6NmftOxZz/logs-panel?orgId=1 (Logs)
-
так-то всё завелось, но перечислять каждый раз все колонки довольно геморно, если их несколько десятков
-
Сделайте view один раз и отправляйте
-
а разве это не прибъёт WHERE гвоздями к view? к тому что из графаны уже не пофильтровать будет
-
Я не знаю, но наверное можно сделать where по view
-
Народ кто нить курил движок интеграций Rabbitmq ?? не могу понять как возможно отловить ошибки если в очередь кролика шлю не те колонки, нашел только в системных таблицах error но там просто счетчик и все . А в логи самого КХ ошибка не попадает. (попадает если я делаю инстерт не верных колонок)
-
Всем Привет! Скажите плиз кто пробовал подключать hdfs как external table к CH , когда клик читает паркет файл или ORC он инициирует какую то джобу на хадупе или сам через свой какой то внутренний механизм ?
-
Хотим сделать слой быстрого доступа к данных на клике поверх хадупе , нормальный ли вариант это делать через подключение hdfs как внешние таблицы к клику
-
Hdfs-клиент. Джобов нет
-
Это какой-то кликовый hdfs клиент ?
-
Libhdfs (библиотека на C), насколько я помню.
-
Доступ к данным будет быстрее чем через hive, но медленнее чем в самом клике
-
-
-
в смысле всё в память грузит? а как же тогда работает S3/HDFS storage для mergeTree таблиц?
-
или вы про прочитать один раз из файлов? Я не проверял если честно, но удивлюсь если для паркета он читает весь файл а не только запрашиваемые колонки ну и фильтровать можно не читая все в память наверно...
-
как минимум два года назад он читал весь файл, даже если нужно было выбрать из него несколько колонок. поэтому приходилось специально файл перед записью в паркет сортировать по нужным колонкам, чтобы компрессия лучше работала и файл получался меньшего размера
-
ага спасибо, надо будет посмотреть изменилось ли чего
-
https://github.com/ClickHouse/ClickHouse/pull/30936 вроде как починили но совсем недавноReduce memory usage for some formats when reading with s3/url/hdfs by kssenii · Pull Request #30936 · ClickHouse/ClickHouse
Changelog category (leave one): Improvement Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md): Reduce memory usage when reading with s3 / url / hdfs for...
-
добрый вечер, вам удалось выгрузить?
-
о, огонь-огонь, сами пробовали из bigquery выгружать напрямую в КХ ?
чёт настроил odbc, подключаюсь через tsql, но вот КХ клиент в упор не хочет , не пойму что ему не нравится - 15 March 2022 (185 messages)
-
@huskydev
-
-
ch != DWH
так как в DWH нужны частые update и изменение уже записанных данных. Те в классической постановки ch не будет оптимально работать как DWH -
-
да перезапись открытого периода та еще задача, но во первых есть надежда что команда Яндекс что-то предложит,
во вторых пока решил делать пересоздание партиции открытого периода... -
ch !=яндекс )
-
да читаю сейчас...
В DWH по большому счету транзакции не сильно то и нужны...
Для меня пока эталон СУБД для DWH это IQ, ничего удобнее не видел. Там тебе и INSERT/UPDATE/DELETE, потоковая загрузка, даже возможность писать процедуры/функции. -
Вопрос как Greenplum будет справляться с запросами к большому объему данных, агрегацией и т. д.
Наверное есть смысл протестировать в том числе и его...
CH очень неплохо справляется с агрегациями различными на больших объемах, по крайней мере в рамках моих скромных тестов. -
Вообще, имя greenplum уже занято ребятами, которые на постгресе подобную задачу решают
-
Поторопился, так и написано. "Сервис для управления кластерами популярной массивно-параллельной СУБД Greenplum® в инфраструктуре Yandex Cloud."
-
всем привет! вопрос по оф.доке https://clickhouse.com/docs/ru/sql-reference/statements/alter/column/#alter_modify-column
судя по ней, можно поменять позицию колонки через ALTER TABLE t MODIFY COLUMN c AFTER another_c;
но это не работает. Версия 20.3.21.2
Обновиться надо или я что-то не так делаю, или это бага?Манипуляции со столбцами | Документация ClickHouseМанипуляции со столбцами Набор действий, позволяющих изменять структуру таблицы. Синтаксис: ALTER TABLE [db].name [ON CL
-
Хмм, ну по логу изменений надо посмотреть за 22, 21 и 20 год, добавляли или изменяли что то
-
вот сходу не нашёл ничего про это в ченджлогах. Обновляться сразу чтоб проверить - слишком много телодвижений, поэтому решил сначала спросить, вдруг кто в курсе)
-
Укажите тип колонки в альтере (такой же как сейчас)
-
уже пробовал, не работает
-
а что пишет? у КХ парсер с блекджеком и девицами
-
вот запрос:
alter table factsByDate modify column addressesResource Array(String) AFTER addresseesContacts;
e.displayText() = DB::Exception: Syntax error: failed at position 71: AFTER addresseesContacts. Expected one of: DEFAULT, MATERIALIZED, ALIAS, COMMENT, CODEC, TTL, token, SETTINGS, FORMAT, Comma, INTO OUTFILE (version 20.3.21.2) -
Hi
Can we have 1 shared replica for 2 shards? -
Всем привет подскажите пожалуйста от чего зависит количество частей в одной партиции при копировании данных через insert from select в рамках одного кластера? Просто немного странно, что у одной партиции в рамках одного кластере в старой таблице 8 частей, а в новой 191 часть.
-
Yes
-
ClickHouse
ClickHouse DBMS discuss and help
-
А вы смотрели сразу после вставке ? Попробуйте запустить OPTIMIZE TABLE . И по идее должно стать 8
-
Да наверно вопрос отпал, мерж еще не сделался на тот момент. Спасибо.
Просто очень медленно эта операция у меня в рамках одного кластера делается, не пойму какие параметры или настройки ОС подпарвить. Вроде кластер на NVMe дисках с 300Gb RAM а данные из одной таблицы в другую не больше 500Gb в сутки переносится. -
а через isql ODBC коннект к bigquery работает?
вы ODBC в какой OS настроили?
ну он ошибку обычно говорит и показывает что ему надо -
Ну вообще все зависит от версии GA. Если это UA, то вам только експорт из API поможет. Если GA4, то достаточно в интерфейс GA настроить экспорт и данные будут копироваться ещё и в BQ.
Как копировать из BQ в CH я не знаю, не пробовал. Но если копировать из UA API в CH, то надо сперва со схмеой данных определиться. Какие поля забирать и как их валидировать. Ибо По сути мы тянем не то, что собралось, а то что внутри UA было обработано
P.s. и неплохо было бы всю эту схему данных обогатить идентификаторами. Хита как минимум. -
Спасибо за ответ 😁
Проблеме уже почти год и кое-как я ее решил в то время 🙂 -
Упс. Я просто прошёлся по ответам на тему выгрузки из BQ и наткнулся=)
-
isql работает
ОС - ubuntu
может я не правильно обращюсь из КХ клиента? есть ли у Вас пример? -
srv1.ftt.local :) SELECT * FROM odbc('DSN=BigQuery', 'product-analytics.test.ya3')
Received exception from server (version 22.1.3):
Code: 86. DB::Exception: Received from localhost:9000. DB::Exception: Received error from remote server /columns_info?connection_string=......
HTTP status code: 500 Internal Server Error, body: Error getting columns from ODBC 'std::exception. Code: 1001, type: nanodbc::database_error, e.what() = ../contrib/nanodbc/nanodbc/nanodbc.cpp:1046: HY00: [Simba][ODBC] (11560) Unable to locate SQLGetPrivateProfileString function: [Simba][DSI] An error occurred while attempting to retrieve the error message for key 'LibsLoadErr' with message parameters ['""'] and component ID 3: Message not found in file "/opt/SimbaODBCDriverforGoogleBigQuery_2.4.3.1012-Linux/lib/en-US/ODBCMessages.xml" (version 22.1.3.7 (official build))'
. (RECEIVED_ERROR_FROM_REMOTE_IO_SERVER) -
-
Ну написано же, что синтаксис неверный.
-
I want test stability and HA of ClickHouse cluster so i remove one of my pods with its persistentVolumeClaim and after that when my pod created again, it doesnt sync with its replica and tables aren't present in database
i try to create table but i face to this Exception
│ chi-repl-05-replicated-0-0 │ 9000 │ 253 │ Code: 253, e.displayText() = DB::Exception: Replica /clickhouse/replicated/default/tables/events_local/0/replicas/chi-repl-05-replicated-0-0 already exists. (version 20.7.4.11 (official build))
chi-repl-05-replicated-0-1 │ 9000 │ 57 │ Code: 57, e.displayText() = DB::Exception: Table default.events_local already exists. (version 20.7.4.11 (official build)) -
It is a CH problem, just wait for CH initiated zookeeper records deletion.
-
In future please not talk non Russian in Russia channels.
-
Лондон из зе кэпитал оф зе грейт британ.
-
точно
https://www.youtube.com/watch?v=ML_IjppR_SURT: как работает «кремлёвская пропаганда», или Симоньян, медведь и бобровый сокМаргарита Симоньян наконец рассказала всю правду об RT. #пропаганда #МаргаритаСимоньян #бобры Подписывайтесь на RT Russian - http://www.youtube.com/subscription_center?add_user=rtrussian RT на русском - http://russian.rt.com/ Vkontakte - http://vk.com/rt_russian Facebook - http://www.facebook.com/RTRussian Twitter - http://twitter.com/RT_russian Livejournal - http://rt-russian.livejournal.com/
-
не люблю ее, с другой стороны и Путина не люблю
Путина не люблю потому, что он слишком мало Путин -
-
Не-не-не. "Лондон из зе кэпитал оф зе грейт британ" это отсюдя
-
/report
-
И это не политика, если подвал не считать :)
-
тут не тот чат где хотелось бы это обсуждать. Даже в юмористическом контексте
-
-
Прошу прощения; удалите записи, я не хотел политоту разводить
-
вы можете и сами удалить спокойно без вмешательства админов
-
Я много чего могу
-
ну так сделайте то, что просят, - удалите пожалуйста, ВАШИ сообщения, не связанные с тематикой чата
-
написано) если писать прям так как в доке, тоже говорит что неверный
-
Вы пока первый и последний
-
так я же писал, парсер там свой
-
попробуйте как-то иначе написать
-
все варианты как я мог написать, уже написал, и всё пока тщетно
-
odbc(connection_settings, external_database, external_table) - забыли БД указать
-
odbc | Документация ClickHouse
odbc Возвращает таблицу, подключенную через ODBC. odbc(connection_settings, external_database, external_table) Параметры
-
пробовал и так тоже, всё равно ошибка
srv1.ftt.local :) select * from odbc('DSN=BigQuery;databaseName=product-analytics', 'db_tha', 'day_results')
Received exception from server (version 22.1.3):
Code: 86. DB::Exception: Received from localhost:9000. DB::Exception: Received error from remote server /columns_info?connection_string=DSN%3DBigQuery%3BdatabaseName%3Dproduct-analytics&schema=db_tha&table=day_results&external_table_functions_use_nulls=true. HTTP status code: 500 Internal Server Error, body: Error getting columns from ODBC 'std::exception. Code: 1001, type: nanodbc::database_error, e.what() = ../contrib/nanodbc/nanodbc/nanodbc.cpp:1046: HY00: [Simba][ODBC] (11560) Unable to locate SQLGetPrivateProfileString function: [Simba][DSI] An error occurred while attempting to retrieve the error message for key 'LibsLoadErr' with message parameters ['""'] and component ID 3: Message not found in file "/opt/SimbaODBCDriverforGoogleBigQuery_2.4.3.1012-Linux/lib/en-US/ODBCMessages.xml" (version 22.1.3.7 (official build))'
. (RECEIVED_ERROR_FROM_REMOTE_IO_SERVER) -
-
С связи политикой, подскажите насчет чистоты лицензии ClickHouse, нет ли угроз отзыва или иных геноцид, вроде российская и apache, но clickhouse.com зареген непонятно где. Прошу без сарказма и злых нападок. Спасибо
-
Так как код открытый, а обновление производится в любом случае руками, то не думаю, что будут какие-либо проблемы.
-
А коннективность вообще проверяли, работает с командной строки ? isql <DSN> <user name> <password>
-
Проблема была в параметре prefer_column_name_to_alias, поставил 1 и завелось. Запрос начал отрабатывать на distributed таблице первые несколько секунд, отдавал ошибку и резал коннект. На локальной таблице всё работает что странно.
Не самая богатая на информативность ошибка конечно, еле докопался -
дело же не в доменах, а в лицензиях. Лицензия тут - https://github.com/ClickHouse/ClickHouse/blob/master/LICENSE
Команда располагается в SF & Ams, и работает по роадмапу - https://github.com/ClickHouse/ClickHouse/issues/32513
Пока интернет есть - пользуйтесь на здоровье, а когда отключат - вам уже будет уже все равно. -
-
жалуется на сам ODBC драйвер
не могут найти функцию
SQLGetPrivateProfileString
https://stackoverflow.com/questions/65336260/simba-athena-odbc-unable-to-use-sqlgetprivateprofilestring-functionsSimba Athena ODBC: unable to use SQLGetPrivateProfileString functionsThis is very strange, I want to setup a connection from RStudio to my instance in AWS Athena. I am using unixodbc as the driver manager, and succeded by testing the connection using isql -v 'Simba ...
-
а в чем преимущество argMax?
я вообще сделал через DISCTINCT, работает быстрее GROUP BY
2-3 с, против 7-8 -
Добрый день. Подскажите какие есть существующие решения ошибки "Memory limit (total) exceeded: would use 6.93 GiB (attempt to allocate chunk of 4219540 bytes), maximum: 6.93 GiB". В данный момент запрос на основе system.query_log занимает 13mb на 75 строк. Причем ошибка появляется не часто, т.е запросы идут и она иногда появляется (около 1-2 раз на 10к строк). Если увеличить запись до 200 строк за раз, то ошибки сыпятся почти на каждую вставку. Может есть какие-то способы дебага данной ошибки?
-
explain и explain estimate
-
ребята привет, а кто-нибудь подключал кх к редаш, в каком виде нужно урл указывать?
-
Можете подсказать, почему запросы в кликхаус падают с out of memory из-зи order by в конце? Кликхаус умеет же сортировать результаты через диск?
-
Всем привет. Важный вопрос к знатокам КХ.
Имеется относительно большой по объему набор из 4 партов ReplicatedReplacingMergeTree.
В сумме 150 млрд записей.
1) Сколько займет по времени изменение строки на массив во всех записях?
alter table db.SomeTable on cluster ch_cluster modify column Some Array(String)
2) А до изменения типа столбца нужно еще сделать 4 млрд. реплейсов:
alter table db.SomeTable on cluster ch_cluster update Some = concat('[''', Some,''']') where length(Some) > 0
alter table db.SomeTable on cluster ch_cluster update Some = '[]' where length(Some) = 0
У меня есть мысль, что все это очень плохо и в боевое окружение я это не пропущу и предлагаю просто завести новый столбец SomeList нужного типа.
Сможет кто-нибудь меня разубедить в обратном, сказать что КХ не торомозит и дать мне гарантии того, что мол, смело реплейсь и изменяй тип колонки? -
подключал
обычный URL указывал
http://10.0.1.221:18898 -
argMax - это один из механизмов дедубликации. Не всегда просто посчитать uniq по данным, среди которых есть дубликаты. Особенно если требуется полная точность (uniqExact).
Разговор изначально был про distributed конфигурацию и дубликатами рассыпанными по разным шардам. Простой distinct тут не особо поможет, если нужна полная точность. Но лучше закатать губу и считать какой-нибудь uniqHLL12 - он ещё быстрее, но не гарантирует полной точности. -
Почему DISCTINCT не может? Если выполню его на distributed
SELECT DISTINCT s_id, o_id, a_id, codes FROM data_mv_Replacing FINAL; -
почитайте изначальный вопрос (не мой). У человека этот final обрабатывался на шардах, а после сборки вместе получалось больше чем нужно, потому как final дубликаты между шардами не поборет.
-
а если он ругается что invalid schema?
-
Это был мой вопрос )
FINAL чистит дубликаты на шардах (их 2),
DISCTINCT в данных, что пришли с шадрдов, грубо говоря
Или это не совсем так работает?
Мне нужно совсем без дубликатов -
да, работает
-
http виде
-
Если у вас используется group by в запросе и включена настройка на использования жёсткого диска, то он будет делать на жёстком диске group by
-
если ключ шардирования сделан так что дубликаты получаются (и разрешаются) внутри шардов, то проблемы нет. Если вы считаете distinct по единственному id в order by (где происходит дедубликация) - проблем нет. Но в других случаях есть риск получить неточность - значения из "лишних" строк, которые были на разных шардах и не смогли дедублицироваться попадут в хеш-таблицу дистинкта.
-
Привет. Напомните, пожалуйста, есть ли синтаксис в КХ, позволяющий делать селект из колонки если она существует в таблице, а если нет, то возвращать условный 0?
-
-
При чем тут group by? у меня order by
-
max_bytes_before_external_sort для order by настройка
-
я бы ещё внимательно прочитал https://clickhouse.com/docs/en/operations/settings/settings/#optimize-distributed-group-by-sharding-key и попробовал применить.Settings | ClickHouse Documentation
Settings distributed_product_mode Changes the behaviour of distributed subqueries. ClickHouse applies this setting when
-
odbc - это вообще интеренсая тема, там pushdown никакой не проходит
-
нужно учитывать, что запрос сам проваливается
-
т.е. я могу сделать правильный запрос, но odbc всегда вернет все строки
-
вем привет, а как подучить в кх текущее значение минус предыдущее?
-
lead lag аналог
-
neighbor(column, offset[, default_value])?
-
-
any(column) over (partition by ... order by .. rows between 1 preceding and 1 preceding)
-
Expected one of: end of query, GROUPS, ClosingRoundBracket, ORDER BY, PARTITION BY, BY, ROWS, RANGE, token. (SYNTAX_ERROR) (version 21.11.5.33 (official build))
-
heuftncz(
-
перейдите по ссылке от Boris, там примеры использования этой оконной функции. что-то где-то вы неправильно написали у себя, так как ругается на синтаксис
-
спасибо большое
-
-
-
Я бы сказал, что сгодится
-
то есть соответственно для кластера с репликой, могу такое же просто on cluster <cluster> выполнить и всё?
-
Вроде не рекомендуется делать on cluster, там же ещё может быть какой-нибудь подводный каменть с ZooKeeper
-
Я им не пользовался никогда, у нас всё без реплик просто шарды ....
-
-
Какой?
-
-
да, можно запустить ON CLUSTER
если у вас zookeeper работает -
-
-
-
-
Joined.
-
Добрый день! Прошу помощи, служба поддержки отвечать не хочет. У меня есть несколько десятков сервер машин, на которых я использую CH, на трех из них внезапно начались ошибки, CH падает в логах вот такая ошиюка "<Error> Application: Caught exception while loading metadata: Code: 231. DB::Exception: Suspiciously many (34) broken parts to remove.: Cannot attach table".
1) Переустановка не помогла, CH сразу вывалился в эту ошибку.
2) sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data, хватает буквально на сутки и после CH опять умирает.
3) Сервера(в смысле ПО) везде одинаковое.
4) Жесткие диски проверял на жизнеспособность, все ок.
Подскажите, возможно ли как-то определить в чем ошибка, почему это происходит.
Или каким то образом сделать так, чтобы CH не валился за сутки?
Спасибо. -
Умирает на одной машине или разных? Что за поддержка, вы в облаке?
-
Добрый день,
Что можно настроить чтобы уменьшить кол-во активных мерджей? Настроил profiles>default>background_pool_size = 4, но в system.merges бывает 5-6 записей... -
Нет, писал в Службу поддержки самого CH, нет не облако, сервера, на Windows машинах с Ubuntu Hyper-V
-
имею проблему с query_log и query_thread_log
они создаются, через время от нескольких секунд до пары минут в логе появляется сообщение
Existing table system.query_log for system log has obsolete or different structure. Renaming it to query_log_5.
он создает новый query_log, и с ним такая же беда
в итоге за день он несколько десятков тысяч этих таблиц может наделать, все пустые
как исправить это? -
Ну если у вас на всех машинах такая фигня, то наверное что-то не то виртулизацией. Сложно сказать.
-
По сути корраптится диск, чексуммы не совпадают.
-
Я же говорю, что появилось по очереди на трех из 20 штук
-
Не на всех машинах
-
Добрый день, подскажите по доке, пожалуйста:
https://clickhouse.com/docs/en/operations/backup/#filesystem-snapshots
Написано, что можно сделать реплики на зфс, например, и "исключить их из Distributed таблицы". Вот как "исключить реплику из Distributed" я что-то не могу найти.Data Backup | ClickHouse DocumentationData Backup While replication provides protection from hardware failures, it does not protect against human errors: acci
-
Добрый день! Подскажите в чем может быть проблема: у меня есть запрос вида
SELECT
rrrbo.date AS date,
co.date_order,
...
Когда делаю из него select всё работает. Пытаюсь сделать из него представление командой
CREATE VIEW detailed_reserves AS
SELECT
rrrbo.date AS date,
co.date_order,
...
Появляется ошибка Unknown column name 'rrrbo.date' -
Укажите в From database.table
-
Спасибо, помогло
-
Добрый день,
Что можно настроить чтобы уменьшить кол-во активных мерджей? Настроил profiles>default>background_pool_size = 4, но в system.merges бывает 5-6 записей... -
Привет всем. Запустил в докере кликхаус. Пишу туда строчки в таблицу с движком merge tree. Вставляю пачками по 10к записей. Примерно через 1,5 миллиона строк загрузка диска уходит в потолок и вставка в кликхаус перестаёт работать. Подскажите, как это победить ?
-
volumes в /var/lib/clickhouse пробросили?
-
Нет. В этом случае сразу начинает работать через раз
-
какая host OS? Mac OS? Linux ? Windows WSL
-
Windows
-
какой виндовс? 10?
докер какой? docker-desktop ? -
Да
-
Да
-
попробуйте уйти на WSL2 и запускать docker внутри linux
проблема скорее всего с clickhouse не связана, а связана с docker desktop -
Попробую, спасибо
-
и еще попробуйте Widows Defender отключить... и место проверьте C: может кончилось?
-
Место есть, попробую
-
Всем привет!
После рестарта не дает подключиться
Code: 210. DB::NetException: Connection refused (127.0.0.1:9000). (NETWORK_ERROR
в логах только Too many parts на system.metric_log; Это может быть взаимосвязано? Или причину отсутствия подключения искать в другом месте? И можно ли безопасно почистить system.metric_log на диске ? -
Help me
-
clickhouse на нескольких десятках Windows машин с Ubuntu Hyper-V - это очень необычное решение. У вас есть возможность удалить Windows хотя бы с одного сервера и посмотреть что получается? Наверное надо искать проблемы не в КХ и дисках, а вот в этой необычной виртуализации и запрашивать платную поддержку у майкрософт и её партнеров.
-
Вам настройку max_broken_parts в mergetree_settings нужно выставить , в таком случае битые парты перенесуться и кликхаус запустится.
-
если там действительно повышенное количество битых партов случается на десятках машин всего за 1 сутки, то "всю систему надо менять", а не пытаться запустить хоть что-то.
-
Вам же не известна вся инфраструктура и цели использования кх, возможно такой вариант человека вполне устроит.
-
-
-
А как в таком случае действовать, если записей не настолько много чтобы копить их группами по 100 тысяч и вставлять? Поможет ли использование буферной таблицы?
-
а как часто вы планируете вставлять эти 200 строк?
-
-
Я думаю в пиках не чаще, чем раз в минуту
-
-
-
-
200 строк раз в минуту, ничего не сломается
-
Повторю свой вопрос
-
Добавьте новую колонку в которой default будет преобразование старой в массив, потом делаете materialize column и переименовываете. Будет намного быстрее чем update
-
Скорее, записать что-то нужно.
-
Привет!
Подскажите, пожалуйста, почему при сравнении левая дата оказывается больше правой? -
-
А какая та?
-
Как может быть не та, по псевдониму разве нельзя сказать, что та?
-
Если первую дату тоже привести к местному часовому поясу, все равно остается больше
-
такая же нога
SELECT
toDateTime('2022-03-06 22:37:00') AS date1,
toMonday(toDate(now(), 'Europe/Moscow')) - toIntervalWeek(1) AS big_date,
date1 > big_date AS is_greater
┌───────────────date1─┬───big_date─┬─is_greater─┐
│ 2022-03-06 22:37:00 │ 2022-03-07 │ 0 │
└─────────────────────┴────────────┴────────────┘ -
Похоже на бред какой-то
-
-
🙃 Как такое возможно
-
Это то же, что 00:00
-
-
-
Если минуту добавить, видно
-
Что интересно, ваш запрос мне выдает корректный 0
-
Но мой собственный запрос оставляет 1😅
-
-
-
-
У date1 - DateTime
-
А где смотрю - этого уже не знаю, честно
-
Обернул big_date в toDateTime, получил 0
-
Как будто DateTime > Date при равных именно датах
-
а что показывают timeZoneOf оригинальной колонки и date_diff между колонками, которые сравниваете?
-
Хотя даты не равные - 6 и 7 числа
-
У первой была Москва, у второго UTC
Перевел вторую на Москву, стало: -
а select timezone() на сервере что показывает?
-
Подскажите, кто какой dashboard использует для работы с ch?
-
Dashboard для чего? Показать данные или мониторинг самого кх?
-
Привет! А есть у кого-нибудь идеи, куда копать с такой ошибкой в system.replication_queue?
num_tries: 183106
last_exception: Code: 49, e.displayText() = DB::Exception: Incomplete granules are not allowed while blocks are granules size. Mark number 346 (rows 8192), rows written in last mark 0, rows to write in last mark from block 1 (from row 8192), total marks currently 347 (version 21.2.4.6 (official build)) - 16 March 2022 (97 messages)
-
Бред какой-то.
-
Данные
-
Что такое по-вашему "dashboard "?
-
ClickHouse, Power Bi , Metabase и т.д.
-
В чем тогда вопрос? Все что перечислили используется. Еще Tableau, redash, superset, что угодно
-
Список что угодно не так широк, в целом интересен open source
-
Ну так Metabase Redash Superset
-
Какой вопрос, такой ответ 🤷♂
Вы вообще с вопросом про дашборды зашли - можно хоть через excel подключиться и рисовать -
Вопрос наиболее удачные инструменты для аналитике при работе с ClickHouse
-
-
Может есть чумовые сравнительные статьи у кого нибудь в загашнике, почитать
-
CH 😂
-
а контекст задачи какой?
-
-
Нам для бизнес пользователей
-
Без тех бэкграунда
-
Есть ещё Tabix, его обещали завести новый
-
если для бизнес задач - дашни можно те же, или иными словами витрины, построить в Grafana. В контексте более ничего такого не особо надо
-
Self service нужен?
-
Есть, она скорее чисто для оперативнее аналитике, ретроспективную делать не удобно
-
ну, самый простой вариант, - взять уже имеющийся инструмент для построения дашбордов на проекте, если есть
-
с учетом того, что вы вопрос вообще задали, обратитесь к своим ДБА
-
-
Я не бизнес, но область для меня новая и при работе с новой задачей, стоит ещё раз посмотреть вокруг, вдруг что то новое интересное подъехало
-
-
В целом понятно, всем спасибо
-
Ни с чем
-
Excel :)
-
jupiter notebook попробуйте
-
Не думал, интересно
-
-
только топам не показывайте
-
Если уж на то пошло, то бизнес-пользователи любят просто смотреть на красивые графики и таблички, а не строить их сами. Строить при этом их можно в чем угодно. Главное понимать, что генерация этих графиков и табличек ляжет на того, кто и будет уже выбирать инструмент для работы. В чем ему будет удобнее и понятнее работать, то он и выберет. Возможно, ему будет проще самому нарисовать свой дешборд, а не использовать готовые платформы для этого.
-
-
Чисто теоретически, пока есть интернет, всегда можно скачать последнюю версию и использовать её. Если интернета не будет, то останутся флешки :)
-
-
Скажем так, дураков я среди знакомых мне людей, которых можно к топам отнести, не видел. Пробовали посмотреть на вопрос с другой стороны? "Леха, а я вот так делаю, а получается вот так"?
-
Объясните мне, дураку, свой комментарий. Я не совсем его понял.
-
Ну, блин, кого первого спросят, если не получается что-то? Того, кто предложил.
-
Ох... Вас иногда очень сложно понять
-
можно, если есть свои сервера. Поскорее покупайте или арендуйте. Если аренда, то с годовым контрактом. И нанимайте админов и DBA, которые вам это будут поддерживать вместо облачных сотрудников яндекса.
-
Я не специально :(
-
-
-
так вопрос же не про цены. Конечно со своими админами и дба будет дороже
-
Просто сейчас можно уже и облаком пользоваться, а свои сервера только для резерва держать. Раньше облака по цене сильно проигрывали своему железу.
-
С учетом того, что вендоры даже оплаченную гарантию выполнять отказываются, вопрос открытый
-
если у кого будет такая же проблема, решил обновлением КХ (был 21.12, сейчас 22.2 - все ок)
-
Yandex DataLens
-
Привет, столкнулся со странным поведением. Подскажите пожалуйста как это работает?
Есть Kafka таблица, которая читает JSON из кафки:
CREATE TABLE IF NOT EXISTS queue ON CLUSTER '{cluster}'
(
eventTimestamp DateTime64,
parameter_boolean Int8 DEFAULT toInt8(-1)
) ENGINE = Kafka
SETTINGS
kafka_broker_list = 'kafka_broker_list',
kafka_topic_list = 'kafka_topic_list',
kafka_group_name = 'kafka_group_name',
kafka_format = 'JSONEachRow',
kafka_skip_broken_messages = '0'
Есть целевая таблица с событиями:
CREATE TABLE IF NOT EXISTS events ON CLUSTER '{cluster}'
(
eventTimestamp DateTime64,
parameter_boolean Int8 DEFAULT toInt8(-1)
) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{cluster}/{shard}/{database}/{table}', '{replica}')
PARTITION BY toYYYYMM(eventTimestamp)
ORDER BY (Какой-то ордер)
Есть MV, которое перекладывает эти сообщения:
CREATE MATERIALIZED VIEW events_consumer TO events
(
eventTimestamp DateTime64,
parameter_boolean Int8 DEFAULT toInt8(-1)
) AS SELECT * FROM events_queue
В настройках включены опции:
input_format_defaults_for_omitted_fields=1
insert_null_as_default=1
В чем проблема?
Когда кликхаус подключается к кафке и начинает читать сообщения, то в сообщениях кафки, где отсутствует поле parameter_boolean для него не применяется выражение DEFAULT и проставляется 0 вместо -1.
Это ожидаемое поведение? И если да, то как тогда проставлять правильно
дефолты в отсутствующие поля? -
зачем вы повторно описываете поля?
CREATE MATERIALIZED VIEW events_consumer TO events
(
eventTimestamp DateTime64,
parameter_boolean Int8 DEFAULT toInt8(-1)
) AS SELECT * FROM events_queue
Там выше по чату была подобная ситуация, когда это ненужное описание приводило к странным последствиям. -
Даже если в MATERIALIZED VIEW не описывать секцию DEFAULT, то секция DEFAULT не выполняется в KAFKA таблице.
А можно ссылочку плиз на то обсуждение?) -
А только нашел похожее обсуждение в англоязычном чатике с подобной проблемой https://t.me/clickhouse_en/32237 , но из него не понятно как эту проблемку решить. Пишут, что это возможно баг Kafka таблицSlach [altinity] in ClickHouse
looks little bit strange, maybe it bug of kafka engine could you try to use DEFAULT value inside MATERIALIZED VIEW which get data FROM your kafka table Kafka engine itself doesn't store data
-
да нет там ничего особенного. я тоже почему-то повторил описание таблиы-реципиента и у меня не работала интеграция с кафкой для Replicated таблиц. Борис выше всё, в принципе, написал уже
-
Dmitrii Apanasevich in ClickHouse не тормозит
Привет! Подскажите пжл по интеграции с Kafka. Попробовал узнать на SO, но там пока без ответа https://stackoverflow.com/questions/71426336/clickhouse-kafka-engine-on-cluster Продублирую сюда: Запускаю кластер кх и кафку в докер-компоуз https://github.com/apanasevich/clickhouse-etl-cluster под Win10 Создаю реплицируемую таблицу, таблицу кафки и вью: CREATE TABLE tmp ON CLUSTER cluster ( `event_timestamp` DateTime64(3, 'Europe/Moscow'), `account_id` Int32, `session` String, `type` Int16 ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/etl/tmp', '{replica}') PARTITION BY toMonday(event_timestamp) ORDER BY (account_id, event_timestamp) TTL toDateTime(event_timestamp) + toIntervalDay(90); CREATE TABLE tmp_kafka_datasource ( `topic_data` String ) ENGINE = Kafka SETTINGS kafka_broker_list = 'kafka:29092', kafka_topic_list = 'Tmp', kafka_group_name = 'clickhouse_etl_group', kafka_format = 'JSONAsString', kafka_num_consumers = 1; CREATE MATERIALIZED VIEW tmp_consumer TO tmp ( …
-
Спасибо я посмотрю)
-
если баг, то воркараундом я бы попробовал ставить правильный дефолт прямо в селекте.
CREATE MATERIALIZED VIEW events_consumer TO events
AS SELECT eventTimestamp, ifNull(parameter_boolean,-1,parameter_boolean) FROM events_queue,
ну или вобще использовать формат LineAsString, разобрать JSON в селекте и сделать как надо. Вариантов масса. -
-
Да, это хорошая идея) Спасибо за помощь. Хотелось обойтись выражениями с DEFAULT, казалось, что это должно быть проще)
-
-
-
Коллеги, кто-то в курсе, в RabbitMQ Engine параметр rabbitmq_address c какой версии появился и что может означать ошибка
details: code: 36, message: There was an error on [chi-ch-infra-0-1:9000]: Code: 36. DB::Exception: Empty address passed to function parseAddress. (BAD_ARGUMENTS) (version 22.2.3.1)
для
rabbitmq_address = 'amqp://ch_reader:ch_reader@192.168.51.30/nvms' -
Он наверное не может отрезолвить такое имя?
-
ip адрес?
-
chi-ch-infraчтототам
-
ага... сейчас подумаю про это...
-
нет вряд ли. На этом pod-e выполняется команда через exec и и команда то выполняется
-
Венчурный фонд MyVentures принимает заявки от стартапов на инвестирование 2022 года.
Мы заинтересованы в технологичных проектах на стадиях pre-seed, seed, pre-round A, round A.
Подавай заявку на сайте!
Fortis fortuna adiuvat!
Статья на vc.ru
СМИ о насНа венчурном рынке СНГ появился новый крупный игрок — Промо на vc.ruОн инвестирует в ИТ-стартапы 20 млн долларов
-
-
Напишу сюда. Мало ли кому-то пригодится мой опыт.
Итого: Я попробовал все варианты с секцией DEFAULT. В кафка таблице, в целевой, в MV. Вместе и по отдельности. Это не сработало. Как будто для Kafka таблиц эта секция не учитывается. Возможно по вот этой причине:
Important part: MV never reads the source table (except for the populate stage). And the source table can have any Engine.
Engine type does not matter. It can even be Engine Null or Kafka. They both don't store data themselves.
Я воспользовался вокрараундом, который предложил Борис. Он показался мне для моей ситуации максимально простым. В Kafka таблице делаем нужное поле Nullable(parameter_boolean), а в Materialized View в секции SELECT делаем проверку на NULL и проставляем нужный дефолт ifNull(parameter_boolean, -1) as parameter_boolean. Done. -
Доброго дня, изучаю сабж - "застрял" на подключении metabase (корпоративная BI, изменить не могу) с помощью clickhouse-driver к инстансу в yandex cloud (к self-hosted инстансам проблем нет, но хочется использовать saas). Драйвер не позволяет указывать дополнительные параметры подключения, такие как sslrootcert, а без этого не подключается. Кто уже имеет положительный опыт такого подключения (или есть ссылка)?
-
-
1. Добавить колонку в целевую таблицу (куда MV переливает данные)
2. Пересоздать MV, не забыв поменять запрос внутри неё -
-
Ну вы некропостер) 2.5 года прошло)
-
Ага, нашел близкий по теме пост поиском по чату :). Похоже воз и ныне там. Или нет? :)
-
Так а данные в MV у вас ?
-
нет в TO таблице
-
Ну тогда ALTER TABLE ADD COLUMN
-
Ну в саму таблицу я добавил колонку. Но когда делаешь: SHOW CREATE TABLE mv нет колонки
-
А в рамках "additional JDBC connection string" нет такой возможности? Правда, эти опции в метабазе у меня вообще пропали начиная где-то с 40й версии. Пытался здесь выяснить причины, но молчат.
-
Нету additional... You're on version v0.42.2. Убрали похоже, говорят раньше было...
-
-
create table t1 (a UInt32, b Nullable(UInt32)) engine MergeTree order by a;
insert into t1 select number, number+1 from numbers(20);
select cast((groupArray(a),groupArray(b)),'Map(UInt32,UInt32)') from t1;
{0:1,1:2,2:3,3:4,4:5,5:6,6:7,7:8,8:9,9:10,10:11,11:12,12:13,13:14,14:15,15:16,16:17,17:18,18:19,19:20} -
а порядок нормально будет соблюдатся? не перепутаются пары?
-
-
с чего бы это? тут все прямолинейно и логично. Никаких паралельных выполнений с перепутываниями при окончательных мерджах.
-
Пока нашел решение "через задний проход" - поднял nginx, который тупо
"proxy_pass https://<clickhouse на yandex cloud>:8443" с
"proxy_ssl_trusted_certificate /usr/local/share/ca-certificates/Yandex/YandexInternalRootCA.crt;".
Вдруг есть решение лучше, буду благодарен за подсказку. -
-
в system.parts есть колонки про secondary_indices*
-
system.data_skipping_indices
-
-
Коллеги, доброе время суток
Знаю, что в clickhouse нет оконных функций.
Но мб кто то пробовал пронумеровать строки в запросе мб, кто знает какой костыль??? -
Есть уже оконные функции, обновитесь на современную версию
-
row_number работает?))))
-
д
-
Спасибо, буду завтра спрашивать своих админов)))
- 17 March 2022 (137 messages)
-
-
а что за map() ?
-
тип данных кликхауса очен удобный https://clickhouse.com/docs/en/sql-reference/functions/tuple-map-functions/#function-mapaddWorking with maps | ClickHouse Documentation
Functions for maps map Arranges key:value pairs into Map(key, value) data type. Syntax map(key1, value1[, key2, value2,
-
здорово на KV похоже
-
а в чем вопрос? Чем вам mapAdd не угодил?
-
mapAdd не добавляет элементы а суммирует. это арифметическая операция.
аналога arrayConcat нету :( -
-
-
ну миллион решений. можно assume_that_everything_is_ok, можно ошибку обрабатывать.
ну и когда ты мапу из массивов собираешь такая же проблема может быть и то есть это не новая ситуация. можно просто повторить поведение какое было там -
если миллион, то попробуйте применить комбинатор -Map. Например groupArrayMap или maxMap или avgMap
-
у меня задача две мапы сцепить в одну. я попробовал комбинаторы и чето не решилось :(
-
-
есть что-то вроде toTypeOf, может там типы разные?
-
Подскажите, матвью в дистрибутивную таблицу на двух репликах будет дублировать данные?
-
ключ строка, значение datetime. ну из мапы в 3 значений и друго в 2 значения сделать одну в 5 значений
-
да всъ норм с типами, просто нет функции подходящей
-
нет, матвью пишет один раз, если запись в распределенную таблицу поверх реплицированных
-
ну, не факт, покажите исходные данные
-
а какую функцию вы предлагаете использовать?
-
без вида исходных данных - никакую
-
вот к сожалениею с дистрибутивной таблицей это похоже не так. Если таблица с двумя репликами, на каждой реплике матвью со вставкой в дистрибутивную таблицу. Туда куда идет вставка, данные задублированы.
-
Убедитесь, что кластер верно создан
-
-
в мапах ключи не могут повторяться. вот вы берете {a:1,b:2} + {a:11,c:13,d:14} что должно получиться в результате? 5 пар точно не не будет. Будет 4. Какое значение будет у ключа a?
Вам нужна какая-та аггрегирующая функция. Для чисел это относительно просто - sum/max/avg. Для дат сложнее, хотя если вас устроит max/min, то можно. -
ну это нелогично. ведь вот такая штука работает:
cast((groupArray(10)(run_state_message_type),
groupArray(10)(sla_event_log_publish_time)),
'Map(String,Datetime)'
) -
-
как работает? попробуйте дать в первом массиве повторяющиеся ключи - посмотрите что получится.
-
а зачем её ломать? она работает же. по аналогии с assumeNotNull
ровно так же можно и две мапы контатинировать. полагаясь на пользователя -
Всем бодрейшего!
Есть задача запрятать креды соединения с базой postgres в конфиг-файл, используя named_collections (пробовал двумя способами, как на скриншоте). Сервер кликхауса перезапускал после этого. При этом, при попытке подключиться к этому соединению, например, engine = PostgreSQL('pg_conn'), всегда получаю ошибку
Storage PostgreSQL requires from 5 to 6 parameters: PostgreSQL('host:port', 'database', 'table', 'username', 'password' [, 'schema'] (version 21.8.12.29 (official build)) -
21.8 - статовата для этого.
https://github.com/ClickHouse/ClickHouse/pull/28577
конец сентября, наверное 21.10 должна быть -
Приветствую всех,
подскажите как развернуть массив туплей в колонки?
WITH [('col_1', 1),('col_2', 2),('col_3', 3)] as arr
SELECT ...
чтобы получилось что-то такое ↑ -
Он запрашивает 6 обязательных параметра. У вас в конфиге 5 параметров да ещё вопрос к формату host:port
-
WITH [('col_1', 1),('col_2', 2),('col_3', 3)] as arr
SELECT untuple(arrayJoin(arr));
(спасибо за правильно поставленный вопрос с исходными данными) -
а он их в строки ведь разворачивает, а мне нужно в столбцы
-
Ну он вроде как просит от 5 до 6 параметров. Вероятно, действительно, версия старовата
-
Добрый день. Есть вопрос по materialized view.
1. Есть базовая таблица stat_event, куда довольно нагруженно пишутся события (~20 млн/день).
2. Довольно часто требуется анализ этих событий за большой период в разрезе сессий.
3. Для сбора информации по сессии требуется группировка некоторого количества строк, в том числе есть события, по которым требуется не min/max/count, а конкретные значения (access_token)
3. Написанный запрос выбирает корректные данные, но упирается в память на больших объёмах
4. Для анализа сессий было создано MV с группировкой сессионных данных на основе того же запроса.
5. MV отображает корректные данные при вставке в тестовую таблицу значительного количества строк при помощи INSERT SELECT из "боевой" таблицы в консоли (TCP-соединение).
6. MV отображало некорректные данные при вставке в тестовую таблицу значительного количества строк при помощи INSERT SELECT из "боевой" таблицы в IDE (http соединение). После обновления сервера воспроизвести не получается.
7. Переписали боевое использование под TCP-соединение.
8. В настоящий момент MV всё равно отображает некорректные данные при реальном использовании:
- не все события учитываются в MV (видно по значению поля event_count)
- периодически появляется несколько строк с одним PK и всё равно суммарно меньшим, чем должно быть значением event_count.
Подозреваю, что проблема не в CH, а просто я создаю MV с неправильными параметрами или, возможно, неправильно понимаю что-то ещё. Что поправить, чтобы избежать этой ошибки? Ссылки приветствуются.
Спасибо!CREATE MATERIALIZED VIEW metrics_v3.stat_event_sessionENGINE = AggregatingMerg - Pastebin.comPastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
-
столбцы - это как переменные в компилируемом языке. Тут вам не питон, а что-то типа C++, поэтому динамического порождения столбцов из данных не получится сделать.
-
т.е. чего-то обратного к tupleToNameValuePairs не существует?)
-
MV не работает с данными из таблицы. Указанный вами запрос получает только один блок данных, который вставляется в таблицу прямо сейчас.
Вам нужно пройтись по архиву чата и найти бесчисленные ссылки на статью Денни и видео от Миловидова про работу MV. -
-
Миловидова смотрел, но видимо, не всё, буду искать, спасибо. А Дэнни - это Denis Zhuravlev?
-
Denny Crane [Starship Captain at Altinity (NB,Canada)] in ClickHouse не тормозит
https://youtu.be/1LVJ_WcLgF8?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597 https://den-crane.github.io/Everything_you_should_know_about_materialized_views_commented.pdf потому что mat view это не то что вы думаете
-
Да, ее и нашёл, еще раз спасибо, буду разбираться...
-
среди его обязательных параметро есть например table. А у вас она не определена. И еще раз он вот хочет параметр вида host:port. Возможно он задается не отдельными host и port, а как host_port (видел такое например для RabbitMQ engine)
-
Я просто здесь не указал, я пробовал указывать table, schema и другие параметры. Попробую указать host:port, спасибо!
-
вы добивались работы когда все указывали в DDL без использования named_collection?
Я например в named_collection вынес только username/password остальное оставил в DDL - т.к. это гибче для меня было -
Да, без named_collection все работает, если просто креды засунуть в DDL. Думаю, дело действительно в версии Ch, подожду пока девопсы обновят, перепроверю
-
так попробуйте повторить, только убрав один креды в named_collection. Все остальное в DDL
-
судя по тексту ошибки всеж похоже поддержа named_collection есть уже, хотя не исключена какая-то бага конечно
-
Хорошо, попробую поднять локально CH и потестировать, спасибо
-
Всем привет!)
Есть задача - динамически создавать таблицы в ClickHouse из JSONString, с условием, что в JSONString будет лежать схема.
Что-то не могу найти примеры, как можно в ClickHouse выполнить запрос с динамическими параметрами (а-ля EXECUTE query в постгре, где query это какая-то стринга-команда с динамическими параметрами).
То есть план был такой:
1. Прилетает JSONString в таблицу в ClickHouse
2. Юзерская функция смотрит на строку, выбирает оттуда часть со схемой, преобразует в DDL, сравнивает есть таблица или нет, сравнивает изменился DDL или нет
3. Парсит часть с данными в той же JSONString строке и вставляет в таблицу из п.2
Понимаю, что это может быть не самый оптимальный вариант, цель именно протестировать и сравнивать скорости. -
-
Всем привет!
Есть задача настроить стриминг событий из ga в клик, был бы благодарен если подскажете в какую сторону рыть, а то по прямым запросам выдает в основном платные сервисы 🙂 -
Привет!
Подскажите, пожалуйста, почему даты-время по по разным часовым поясам совпадают?
Это же бред... -
возможно ваш клиент принудительно переводит все
-
А если выполнить этот же запрос в родном клиенте? Могут быть настройки клиента, согласно которым он приводит все даты к местному часовому поясу.
Вот пример, у меня нормально работает:
select
toDateTime('2001-02-03 04:05:06', 'Asia/Yakutsk') as ts0
, toDateTime(ts0, 'Europe/Moscow') as ts1
, toDateTime(ts0, 'UTC') as ts2
; -
А как тогда объяснить этот вывод?
Здесь проблема в том, что my_date оказывается больше, чем second -
Я здесь сам привожу все даты к местному, почему тогда сравнение происходит неправильно?
-
Мне кажется, у вас тут чётное количество проблем. :)
1. Клиент у вас отображает Date как DateTime, причём ставит странное время (24:00 - это 00:00 следующего дня? если так, то это некорректно, ибо toDateTime(toDate(now())) - это 2022.03.17 00:00:00)
2. Клиент у вас скорее всего принудительно приводит DateTime к какой-то своей таймзоне, поэтому проверять сравнение на основе _отображаемой_ в клиенте даты - неправильно.
Я бы посоветовал повторить сравнения, выводя дату, приведённую через toInt32() к числу. А ещё лучше - через родной clickhouse-client (или через стандартный веб-клиент КХ).
Как вариант можете проверить вызывающие у вас вопросы сравнения и тестовые примеры (например тот, что я выше кидал) у себя, а потом на открытом веб-клиенте тестового сервера КХ https://play.clickhouse.com/ -
1 - 24:00 то же, что и 00:00 (например, 17 марта 24:00 это 00:00 17 марта);
2 - да, действительно, приводит в UTC -
Я попробую переводить даты в числа, спасибо!
-
Что такое ga
-
-
да, google analytics 4
-
-
-
А это не последние версии метабэйза случайно?
Последний драйвер клика некорректно работает с таймзонами. Есть issue.Clickhouse timezone query is not effective · Issue #81 · enqueue/metabase-clickhouse-drivermetabase version: 0.41.2 metabase clickhouse driver version: 0.8.0 metabase REPORT TIMEZONE set Asia/Shanghai using clickhouse CLI query is normal
-
Всем привет. Подскажите пожалуйста при переносе одной партиции через clickhouse-copier количество данных отличается в большую сторону, как такое возможно? К примеру: перенес партицию за 2022-02-01 в новый кластер, делаю запрос:
SELECT date, sum(count) from develop.TrackersAggregated where date='2022-02-01' group by date order by date desc;
Получаю
543452167 - в новом
497858799 - в старом
Не понимаю как такое может произоти. В новом кластере более свежая версия CH (22001003) в старом 20012008 -
всем привет подскажите пожалуйста как правильно менять формат хранения данных?
есть таблица, в ней много колонок, подобрал более оптимальный способ хранить данные (поправил сжатие)
могу ли я в существующей таблице сделать просто ALTER TABLE и указать новый тип сжатия? при этом запросы к таблице все будут работать как надо? и со временем все данные переедут на новый тип сжатия? или надо заведомо делать две копии данных и полностью переливать?
можно ли делать постепенно? перелить одну партицию в новый формат а потом сделать exchange partition? -
Один шард две реплики. Вроде все корректно
-
если просто сжатие поменять, то можно. новое сжатие будет применяться только к новым данным. пережатие старых надо отдельно запускать
-
4 ноды на одном шарде, и при этом две реплики?
-
ну и новым мержам ес-но
-
у нас два кластера и в каждом по одному шарду с двумя репликами
-
а exchange partition будет тоже корректно работать? если отличия между таблицами только в сжатие?
-
А инстансов клика 2 или 4?
-
-
Добрый день, подскажите, пожалуйста, что делать, когда при селект запросе выскакивает ошибка Response entity too large?
-
Это что же там за такой огромный запрос?
-
Ошибка HTTP 413 (Request Entity Too Large Error) означает, что клиент отправил слишком большой запрос на сервер. В Nginx максимальный размер запроса регулируется параметром client_max_body_size. Не ваш случай?
-
не нашел, но вдруг кто нить знает, можно ли с одного сервера, на другой аттачить, без копирования данных? типа Attach FROM Remote()?
-
Не "Request", а 'Response". То есть ответ не может быть обработан.
-
-
-
что-то около 500к строк в ответе
-
Я так понимаю, клиент, которым Вы пользуетесь, просто не может получить такой большой ответ и его обработать. Тогда либо найти клиента, который сможет, либо разбить результат на части с помощью LIMIT.
-
не то , у меня выходит ['aa,'aab'] а надо ('aa,'aab') ошибся нужна не строка , а тупл(кортеж)
-
тупл -- это типизированный объект, известный до момента выполнения запроса
поэтому либо (arr[1], arr[2],. ..., arr[N]) либо никак не преобразовать массив в тупл -
-
А почему хочется это делать прямо на уровне кликхауса? Мб лучше отдельный какой-нибудь сервис для такого запилить, который будет читать сообщеньки из очереди со схемами, парсить в DDL, и выполнять в Clickhouse уже готовые query?
-
Вот как раз хотела сравнить разницу в скорости парсинга и разложения по таблицам:
КХ
Флинк
Спарк -
Вам необходимо будет писать скрипт, не припоминаю возможности динамического создания таблиц в КХ.
-
Я не уверен, что в клике есть что-то типа eval или EXECUTE :) Но проверить как быстро парсятся JSON'ки вполне можно при помощи функций для JSON. https://clickhouse.com/docs/en/sql-reference/functions/json-functions/JSON | ClickHouse Documentation
Functions for Working with JSON ClickHouse has special functions for working with this JSON. The visitParam functions ma
-
Как вариант, вы можете с помощью clickhouse-local вначале посмотреть структуру JSON, разложенную в таблицу, и уже смотреть оттуда, но структура вашего JSON неизвестна
-
Вот и я не нашла)
Видела возможность написать на питоне функцию и ее использовать, но вот это уж мне точно кажется медленнее спарка или флинка) -
Парсить - да)))
Я хотела create/alter table ещё динамически писать)) -
Ну, ClickHouse это не подобие, а уж тем паче и не альтернатива спарка или флинка, это разные инструменты, если мне опять же не изменяет моя память.
-
-
Всем привет! Может кто-то подскажет, пожалуйста, есть CH сервер версии 21.4.6.55 в котором нормально создается бд с engine postgresql
CREATE DATABASE b2b ENGINE = PostgreSQL('10.10.17.2:6432', 'b2b', 'login', 'password', 1)
но на версии сервера 21.10.2.15 выдает ошибку (собственно такую ошибку словил при обновлении на эту версию) вот что в логах:
2022.03.17 15:57:50.538248 [ 2485308 ] {616fbfcc-dc7d-4bfc-9379-10661b8c7967} <Error> TCPHandler: Code: 170. DB::Exception: Bad get: has UInt64, requested String. (BAD_GET), Stack trace (when copying th
is 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) @ 0x944bdda in /usr/bin/clickhouse
1. auto& DB::Field::safeGet<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >() @ 0x95458f6 in /usr/bin/clickhouse
2. ? @ 0x109e293c in /usr/bin/clickhouse
3. DB::DatabaseFactory::getImpl(DB::ASTCreateQuery const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<DB::Context const>) @ 0x109e
1529 in /usr/bin/clickhouse
4. DB::DatabaseFactory::get(DB::ASTCreateQuery const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<DB::Context const>) @ 0x109df118
in /usr/bin/clickhouse
5. DB::InterpreterCreateQuery::createDatabase(DB::ASTCreateQuery&) @ 0x109c60f9 in /usr/bin/clickhouse
6. DB::InterpreterCreateQuery::execute() @ 0x109da46c in /usr/bin/clickhouse
7. ? @ 0x110732e1 in /usr/bin/clickhouse
8. 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) @ 0x11071
1a3 in /usr/bin/clickhouse
9. DB::TCPHandler::runImpl() @ 0x1195ea24 in /usr/bin/clickhouse
10. DB::TCPHandler::run() @ 0x11971b19 in /usr/bin/clickhouse
11. Poco::Net::TCPServerConnection::start() @ 0x1453bf2f in /usr/bin/clickhouse
12. Poco::Net::TCPServerDispatcher::run() @ 0x1453d9ba in /usr/bin/clickhouse
13. Poco::PooledThread::run() @ 0x1466fdf9 in /usr/bin/clickhouse
14. Poco::ThreadImpl::runnableEntry(void*) @ 0x1466c08a in /usr/bin/clickhouse
15. start_thread @ 0x817a in /usr/lib64/libpthread-2.28.so
16. __clone @ 0xfcdc3 in /usr/lib64/libc-2.28.so
может кто-то подскажет, пожалуйста, что с этим можно сделать или куда копать? -
Можно на чем угодно написать так-то. Гошка, плюсы. На мой взгляд для такой задачи будет больше контроля и легче всякие ошибочки будет отлавливать в собственном коде, а не в бд искать в логах что не так
-
+
-
Поддерживаю, хотела у общества уточнить тоже))
Спасибо) -
PARTITION | ClickHouse Documentation
Manipulating Partitions and Parts The following operations with partitions are available: DETACH PARTITION — Moves a par
-
обновитесь еще, может уже починено
-
попробовал сейчас с версией 22.2.2, тоже самое(
2022.03.17 16:39:28.016678 [ 2576399 ] {6d63377f-22fc-4f9b-bb0b-a505bbdf46a7} <Error> executeQuery: Code: 170. DB::Exception: Bad get: has UInt64, requested String. (BAD_GET) (version 22.2.2.1) (from 12
7.0.0.1:61682) (in query: CREATE DATABASE b2b ENGINE = PostgreSQL('10.10.17.2:6432', 'b2b', 'login', 'password', 1)), 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) @ 0xaebed1a in /usr/bin/clickhouse
1. DB::Exception::Exception<std::__1::basic_string_view<char, std::__1::char_traits<char> >, DB::Field::Types::Which const&>(int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allo
cator<char> > const&, std::__1::basic_string_view<char, std::__1::char_traits<char> >&&, DB::Field::Types::Which const&) @ 0xafdf5a0 in /usr/bin/clickhouse
2. auto& DB::Field::safeGet<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >() @ 0xba85663 in /usr/bin/clickhouse
3. ? @ 0x14bcd930 in /usr/bin/clickhouse
4. DB::DatabaseFactory::getImpl(DB::ASTCreateQuery const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<DB::Context const>) @ 0x14bc
b7eb in /usr/bin/clickhouse
5. DB::DatabaseFactory::get(DB::ASTCreateQuery const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<DB::Context const>) @ 0x14bc8f47
in /usr/bin/clickhouse
6. DB::InterpreterCreateQuery::createDatabase(DB::ASTCreateQuery&) @ 0x14bb0237 in /usr/bin/clickhouse
7. DB::InterpreterCreateQuery::execute() @ 0x14bc5e1b in /usr/bin/clickhouse
8. ? @ 0x14ee8a79 in /usr/bin/clickhouse
9. 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) @ 0x14ee65f5 in
/usr/bin/clickhouse
10. DB::TCPHandler::runImpl() @ 0x159ef43a in /usr/bin/clickhouse
11. DB::TCPHandler::run() @ 0x15a03419 in /usr/bin/clickhouse
12. Poco::Net::TCPServerConnection::start() @ 0x18667a0f in /usr/bin/clickhouse
13. Poco::Net::TCPServerDispatcher::run() @ 0x18669e61 in /usr/bin/clickhouse
14. Poco::PooledThread::run() @ 0x1881a549 in /usr/bin/clickhouse
15. Poco::ThreadImpl::runnableEntry(void*) @ 0x18817c40 in /usr/bin/clickhouse
16. start_thread @ 0x817a in /usr/lib64/libpthread-2.28.so
17. __clone @ 0xfcdc3 in /usr/lib64/libc-2.28.so -
https://thehackernews.com/2022/03/multiple-flaws-uncovered-in-clickhouse.html
А подскажите, в последнем LTS эти уязвимости исправлены? Который 21.3.20.1? -
насколько мне не изменяет, уязвимость не было в версии точно в 21.10
-
и сами jfrog советуют в своей статье обновиться до версии 21.10: https://jfrog.com/blog/7-rce-and-dos-vulnerabilities-found-in-clickhouse-dbms/Security Vulnerabilities Found in ClickHouse Open-Source Software
JFrog’s Security Research team discovered 7 vulnerabilities in the ClickHouse database management software. Learn about the issues and how to mitigate the risks.
-
-
У нас не смотрят наружу, но у нас Clickhouse часть нашего продукта. Окей, спасибо, тогда будем думать и смотреть. Правда детали уязвимостей как я понимаю пока не раскрыты
-
А нет вижу, в вашей статье раскрыты. Спасибо
-
-
Запустил пачку запросов drop table/create table с директивой on cluster - все упали по таймауту. В system.distributed_ddl_queue они висят со статусом Inactive. Таблицы новые, никем не используются.
Как интерпретировать статус Inactive и почему вообще так может быть? -
д
-
-
Всем привет.
version 21.8.13.1.altinitystable (altinity build).
Пишу данные по http в кх из сжатого файла:
curl -T "файл.gz" -X POST "хост_прокси:порт/?query=insert+into+база+.+таблица+format+TabSeparated" -H 'Content-Encoding: gzip' -H 'X-ClickHouse-User: юзер' -H 'X-ClickHouse-Key: пароль'
Команда в консоли спустя нек-е время падает на curl: (55) Send failure: Connection reset by peer.
Ошибка в кх (из query_log): Code: 354, e.displayText() = DB::Exception: inflateReset failed: buffer error
Тот же самый curl при указании хоста самого кликхауса а не прокси отрабатывает успешно.
В качетсве прокси используется chproxy.
Кто-то встречал? Какой воркараунд? -
Увеличить таймаут в chproxy пробовали?
-
Нет ещё, передам инфу
-
Ещё раз спасибо! Очень помогло понять, в какую сторону думать и что искать. До нужного "прямща" уровня разобрался, лишний раз убедился, насколько интересный продукт!
-
Добрый день,
Выбираем для хранения детального слоя (3NF) движок, остановились на Greenplum и ClickHouse.
Количество данных ~ 15TB.
Что можете посоветовать со своей стороны? -
-
Пока нет возможности увеличить но сообщают что текущие настройки такие
read_timeout: 5m
idle_timeout: 20m
write_timeout: 60m
Есть смысл пробовать с увеличенными read_timeout и idle_timeout? -
а вы замеряли через сколько запрос отваливается? я бы сначала посмотрел на это время для пониманимая, ещё смотрел бы на эту настройку - max_execution_time, задана у вас или нет
-
Я правильно понимаю что в обычном кликхаусе тоже есть это исправление не только в вашем дистрибутиве?
-
д
-
-
Там определенно есть куда расти ещё.
-
Что с ним сейчас не (до конца) так?
-
Например никак не доделаем отдельный пакет, перфоманс можно ещё улучшать и улучшать. Возможно добавим какие-то более интересные команды чем в ZK. А так
зависит от ваших целей. Если вы планируете поверх него какую-то высконагруженную систему построить, где вы постоянно будете добавлять и убирать ноды кипера, то там всё не до конца проверенно. Если вы его планируете как замену зукипера использовать, то всё в порядке. -
Понятно, спасибо, пусть тогда еще у кого-нибудь еще поработает 🙂
-
Имхо запускать keeper внутри процесса кх щас смысла мало, тк рестарт сервера для настроек в случае если это лидер приведет к потере кворума.
-
-
ну переизберётся, что такого)
-
Люди не любят и боятся table in readonly :)
Так что отдельный кластер clickhouse-keeper самый оптимальный вариант кмк на сейчас. -
ClickHouse/ClickHouse description changed: v22.3.2.2-lts
Link: https://github.com/ClickHouse/ClickHouse/releases/tag/v22.3.2.2-lts
Release notes:
Release v22.3.2.2-lts -
Release 22.3, видео:
https://www.youtube.com/watch?v=GzeANZzPras
Презентация:
https://presentations.clickhouse.com/release_22.3/ -
None
- 18 March 2022 (142 messages)
-
Всем добрый день.
Есть такой вопрос: нужно переделать отчёт, который строится сейчас на PostgreSQL.
Суть в том, что используется функция crosstab подробнее тут
Есть ли в ClickHouse подобный функционал? Чтобы сделать некое подобие сводной таблицы?
Возможно это сделать как-то через массивы? -
Всем привет!
Кто-то может подсказать как делать оптимизацию запроса в кх? С чего начинать, на что обратить внимание, какие инструменты можно использовать? -
-
Спасибо. Гляну.
-
Secrets of ClickHouse Query Performance
Here's the link to the updated webinar: https://youtu.be/1TGGCIr6dMY #ClickHouse is famous for speed. That said, you can almost always make it faster! In this webinar (September 2019), Robert Hodges and Altinity Engineering Team use examples to teach you how to deduce what queries are actually doing by reading the system log and system tables. We then explore standard ways to increase Query Speed: Data types and encodings, filtering, join reordering, skip indexes, materialized views, session parameters, to name just a few. In each case, we circle back to query plans and system metrics to demonstrate changes in ClickHouse behavior that explain the boost in #performance. We hope you enjoy the first step to becoming a ClickHouse performance guru! If you have any questions or suggestions, email us at info@altinity.com. #DataManagement ----------------- Enjoy more value-packed Altinity webinars here: https://www.altinity.com/webinarspage Or check out ClickHouse community events here: https://www.altinity.com/events ----------------- Learn more about Altinity! Site: https://www.altinity.com LinkedIn: https://www.linkedin.com/company/altinity/ Twitter: https://twitter.com/AltinityDB Join us on Slack: https://bit.ly/34vnPLs
-
Спасибо, а какие нибудь короткие советы есть?)
-
Использовать PRIMARY KEY в where. Отслеживать запросы как работают через tracer log в clickhouse-client
-
А план запроса или explain как в постгре?
-
EXPLAIN | Документация ClickHouse
EXPLAIN Выводит план выполнения запроса. Синтаксис: EXPLAIN [AST | SYNTAX | PLAN | PIPELINE] [setting = value, ...] SELE
-
Видел, но вы не упомянули, насколько это применимо? В отличии от постгреса он кажется только с планом работает
-
Я не использую. Думаю не использую потому что не понимаю что там написано.
-
если вы пришли с какой-то OLTP базы типа постгреса, то оптимизировать надо в первую очередь не запросы, а схему данных. Она выглядит совсем иначе. Вместо пачки связанных реляциями таблиц у вас будет 1-2-3 широких таблицы с вложенностями (Nested) с тщательно продуманными primary key/partition by. Плюс словари в памяти. Плюс трюки с материализованными агрегациями. Итд.
Оптимизация отдельного запроса обычно не дает значимого эффекта. -
А что по удобству работы, что лучше, несколько столбцов одинаковой длинны или Nested? Накладывает ли Nested какие-то ограничения?
-
Будет ли какие-то избыточное чтение если берутся лишь пару столбцов из Nested?
-
Что смущает в ручном хранении столбцов в виде массивов одинаковой длинны - это возня с arrayZip, arrayJoin и untuple
-
> что лучше, несколько столбцов одинаковой длинны или Nested
это одно и тоже, просто Nested - удобнее -
Уже почитал, спасибо Boris
-
> Будет ли какие-то избыточное чтение если берутся лишь пару столбцов из Nested
это отдельные независимые столбцы.
> arrayZip, arrayJoin и untuple
untuple тут не при чем, это другое
arrayJoin - прекрасен, но надо его прочуствовать, и вобще любить функциональное программирование :) -
arrayJoin крут, не спорю
-
Добрый день.
Помогите понять как работают индексы пропуска в СН. Документацию уже несколько раз перечитал, но понимание происходящего так и не пришло.
Для тестов использую простую таблицу из 3-х колонок - id (int32), value (int32), dt (datetime). Для чистоты эксперимента таблица создана без ключа сортировки. Естественно, любой запрос к такой таблице выполняет фул-скан. Дальше создаю индекс пропуска на колонку value, материализую его и пробую сделать какой-то запрос с условием на равенство по этой колонке. В результате СН в статистике запроса выводит информацию, что были просмотрены все строки, то есть выполнен фул-скан.
Если выполнить EXPLAIN indexes=1, то сообщается, что будут использованы все парты, но лишь 1/10 часть гранул.
Что не так с созданным мной индексом? Почему сообщается что просмотрены все строки? Почему наличие индекса никак не влияет на это и на скорость выполнения? -
Ну так если таблица не партиционирована все парты и будут использованы. А 1/10 это уже очень хороший результат для клика
-
В кх другой поход, хранить данные отсортировав по ключам выборки. Зачастую приходится несколько таких копий иметь отсортированных по разным ключам, ну или проекций.
-
-
Попробуйте сначала создать индекс, а потом залить данные .
-
Да, экспериментальная функция
-
Вот кстати про оптимизацию
https://habr.com/ru/company/yandex/blog/459198/Анализ производительности запросов в ClickHouse. Доклад ЯндексаЧто делать, если ваш запрос к базе выполняется недостаточно быстро? Как узнать, оптимально ли запрос использует вычислительные ресурсы или его можно ускорить? На последней конференции HighLoad++ в...
-
Это я понимаю. И понимаю как хранятся данные. Но не могу понять ценность дополнительных индексов (индексов пропуска данных). Ведь, если верить статистике запроса, эти индексы вообще не влияют на то, как происходит чтение данных и сокращение количества гранул, отображаемых в EXPLAIN, по факту также ни на что не оказывает влияния.
В каких случаях целесообразно использовать такие дополнительные индексы? -
Это не всегда возможно. Да и для создания индекса по уже существующим данным должно быть достаточно выполнить MATERIALIZE INDEX, который как раз выполнит его построение. Но ради эксперимента попробую и так
-
Skip индексы точно будут применяться для новых патров/партиций, а вот для старых. Я не уверен
-
Я сейчас попробовал создать таблицу, навесить на нее индекс и после заполнить данными - результат тот же - выполнен фул-скан
-
насколько я понял, это зависит от разряженности данных в партах и собственно их кол-ва на диске?
-
Ну там есть настройка Granularity, которая отвечает как часто ставить отметки в мета данных столбцов
-
у вас прочиталось 1/10 гранул - это хороший результат. Значит индекс работает. Не всем так везет с данными. Бывает и 1/2. Вы не пугайтесь фразы про фулскан, смотрите на гранулы - это важно.
Любой запрос изначально хочет прочитать все гранулы. Но можно и не все через отсечки по:
- первичный ключ
- партиции
- скип индексы -
При создании таблицы используется дефолтная гранулярность и отсутствие какой-либо сортировки, то есть данные сохраняются в порядке их поступления гранулами по 8192 записи.
Индекс создается с гранулярностью 10. -
Ваша задача уменьшить нагрузку на диск. Если у вас достаточно RAM и не петабайты данных - уменьшайте размер гранулы. Можно и 256 поставить. И коэффициент 2-3 для индекса. Пока не упретесь в размер памяти (индексы там) можно и не повышать.
-
Сейчас все это тестируется на тестовой таблице с искусственно созданными данными.
Я понимаю, что делать с первичным ключем и партициями.
Но в упор не пойму что дают индексы пропуска.
Да, explain сообщает что количество используемых гранул становится меньше, но итоговое время запроса и количество обработанных строк вообще никак не меняются, что с индексом, что без индекса.
Вот как понять, когда этот индекс работает на самом деле, а когда не оказывает никакого эффекта? -
Да, правильно, стремимся снизить нагрузку на диск. Правильно ли понимаю, что если в первичном ключе не используются колонки, по которым строится индекс пропуска, то этот индекс не будет работать?
-
разумеется смотреть надо на время запроса. скип индексы - так себе инструмент, не возлагайте на него больших надежд.
Более перспективным является дублирование данных с другим order by через проекции. Ну или сделать обратный индекс в отдельной табличке. Я так делал полнотекстовый поиск. -
неправильно. первичный индекс сам по себе, а дополнительные индексы пропуска - на то они и дополнительные, работают отдельно. Но правильно настроить их под конкретные данные - непросто. У меня получалось некоторое ускорение - полнотекст по википедии работал за 5 сек. Лучше чем ничего, но.....
-
Если в транзакционных БД есть первичный ключ, который смотрит на конкретное смещение данных в файле и на него (на первичный индекс) уже указывают вторичные индексы, то как это работает с индексами пропуска в СН?
Если мы не указываем при создании таблицы ключ сортировки и данные у нас храняться разрозненно, то при создании индекса пропуска как он будет связываться с данными?
При наличии первичного ключа, в котором есть колонка, используемая в индексе пропуска, можно привязаться к этому индексу и по нему уже ориентироваться. Но как оно на самом деле? -
конечно тут совсем не те индексы, которые в транзакционных БД. Это четко сказано в документации. Тут скип индексы.
Если брать блум, то это некоторое подобие хешей с большой долей коллизий. Т.е. если вы не попали в первичный индекс и получили фуллскан, то по сохраненным в памяти "типа хешам" можно принять решение что вот эту конкретную гранулу читать не надо - там ничего точно не найти. Но обратное неверно - может и прочитает, но все равно не найдет. -
Знаю, что по другому. Но может можете подсказать, как именно индексы пропуска ссылаются на данные на диске, особенно если говорить про тип minmax, как самые простые (как мне кажется)? Если правильно понял, то minmax полностю аналогичен по структуре первичным индексам. И есть ожидания, что будет работать аналогично.
-
minmax индекс пропуска так работает - в ренже данных гранулярность индекса * гранулярность таблицы такой-то минимум и максимум
-
первичный индекс основан на сортировке данных на диске. Имея в руках подходящее значение сразу понятно куда делать seek и какую гранулу читать. С вторичным иначе - перед чтением гранулы принимается решение - читать её или нет. В случае minmax в индексе прописаны верхние-нижние значения для конкретной группы гранул.
-
-
Тогда не пойму такого поведения:
Таблица:
CREATE TABLE skip_idx
(
`value` UInt32, `id` UInt32, `ts` DateTime
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(ts)
ORDER BY tuple();
Добавляю индекс:
ALTER TABLE skip_idx ADD INDEX test_idx `value` TYPE minmax GRANULARITY 1;
ALTER TABLE skip_idx MATERIALIZE INDEX test_idx;
Заполняю данными:
INSERT INTO skip_idx SELECT
rand(), number, now() + intDiv(number, 10)
FROM numbers(1000000000);
Делаю поиск по ключу value:
SELECT count() FROM skip_idx WHERE value = 214678225
Результат:
1 rows in set. Elapsed: 0.191 sec. Processed 1.00 billion rows, 4.00 GB (5.25 billion rows/s., 20.99 GB/s.)
Почему при имеющемся индексе, выполняется просмотр всех данных таблицы?
А также почему при гранулярности 1, выполняется просмотр всех гранул, а не остановка после первого вхождения, ведь дальше должны идти значения заведомо больше искомого:
Expression ((Projection + Before ORDER BY)) │
│ Aggregating │
│ Expression (Before GROUP BY) │
│ Filter (WHERE) │
│ SettingQuotaAndLimits │
│ ReadFromMergeTree │
│ Indexes: │
│ MinMax │
│ Condition: true │
│ Parts: 232/232 │
│ Granules: 122097/122097 │
│ Partition │
│ Condition: true │
│ Parts: 232/232 │
│ Granules: 122097/122097 │
│ Skip │
│ Name: id_idx │
│ Description: minmax GRANULARITY 1 │
│ Parts: 232/232 │
│ Granules: 122097/122097 │ -
>А также почему при гранулярности 1, выполняется просмотр всех гранул, а не остановка после первого вхождения, ведь дальше должны идти значения заведомо больше искомого
Там нет никакой последовательности. Данные у вас никак не отсортированы. Гранулы идут в случайном порядке, поэтому нужно проверять minmax для всех. -
Так во время построения индекса это условие и должно проверяться и сохраняться в индексе. А после, при поиске значения в индексе и его обнаружении, брать из него положение этих данных, например номер куска и смещение в нем, и читать. Или как-то иначе?
-
Какое условие?
-
-
Всем привет! Никто не сталкивался с такой ситуацией с правами:
выдаю права командой grant ALL ON database.* TO user
а в выводе show access у этого пользователя вот такой набор прав:
GRANT SHOW, SELECT, INSERT, ALTER, CREATE DATABASE, CREATE TABLE, CREATE VIEW, CREATE DICTIONARY, DROP DATABASE, DROP TABLE, DROP VIEW, DROP DICTIONARY, TRUNCATE, OPTIMIZE, CREATE ROW POLICY, ALTER ROW POLICY, DROP ROW POLICY, SHOW ROW POLICIES, SYSTEM MERGES, SYSTEM TTL MERGES, SYSTEM FETCHES, SYSTEM MOVES, SYSTEM SENDS, SYSTEM REPLICATION QUEUES, SYSTEM DROP REPLICA, SYSTEM SYNC REPLICA, SYSTEM RESTART REPLICA, SYSTEM RESTORE REPLICA, SYSTEM FLUSH DISTRIBUTED, dictGet ON database.* TO user
почему такой набор вместо ALL? в этом наборе просто не хватает нужных мне прав, в частности SOURCE -
Нет, он про то что вроде каждой грануле было сказано, какое максимальное, а какое минимальное число, в ней и они должны быть отсечены
-
-
При построении индекса minmax должен формироваться упорядоченный список значений колонок по которым этот индекс строится. Соответственно, если делать запрос с использованием этого индекса на равенство, то при совпадении, даже если просто просматривать весь индекс, поиск должен заканчиваться при первом большем, чем запрошенное, значении.
Этого не происходит в примере, что я скинул. -
Гранулярность используется - 1. Одна запись в индексе равна одной записи в таблице.
-
Гранулярность 1 это значит что гранула равна одной грануле таблицы, это 8192 строки по-умолчанию
-
О, спасибо за такое уточнение
-
Нет. В этом ваше заблуждение, идущее корнями к индексам постгреса. Тут не так, мы про это сказали уже не раз. Попробуйте от него отказаться.
-
Так вот я и пытаюсь понять фундаментальные отличия, на которые можно будет опираться при планировании индексов.
Но так и или иначе, любой индекс должен на что-то ссылаться. На что ссылается индекс пропуска, как он адресует искомые данные? -
Ренж гранул
-
MergeTree | Документация ClickHouse
MergeTree Движок MergeTree, а также другие движки этого семейства (*MergeTree) — это наиболее функциональные движки табл
-
Читайте и поймите основы MergeTree хранения
-
Записи индекса пропуска ни на что не ссылаются. В них есть информация, которую можно проверить и принять решение о пропуске набора гранул.
-
Не так просто читать в поисках чего-то, чего не увидел за, неверно, 10-ок раз прочтения этой страницы.
-
Спасибо всем огромное за разъяснения! :)
-
Подскажите, сделал интеграцию с ад, юзеров и пароли тянет. А мапинг ролей не проходит, может быть связано с тем что путь до юзеров и групп с русскими буквами?
-
Добрый день. Мелкая ошибка в КХ:
SELECT toDate('2022-02-31')
возвращает
2022-03-03
Последний день месяца не контролируется при преобразовании строки в дату -
Хммм ну то есть у вас неправильная дата, а виноват КХ ? что не понял что вы имеете ввиду ?
-
При преобразовании строки в дату должен быть контроль корректности.
Например SELECT toDate('2022-02-32') возвращает дату 1970-01-01 и это правильно, т.к. строка не соответствует дате. Поведение должно быть одинаковым при задании неверного значения даты строкой.
Почему SELECT toDate('2022-02-32') возвращает 1970-01-01,
а SELECT toDate('2022-02-31') - 2022-03-03 ?
Можно, конечно, и на прикладном уровне контролировать, но большинство систем делает это самостоятельно -
В любом случае о таком поведении системы нужно знать. Для меня это было новостью
-
Всем привет, пытаюсь выкачать данные из монги через встроенный енджин
CREATE TABLE test.mongo_table
(
_id String
) ENGINE = MongoDB('mongodb:27017', 'test', 'currency', '', '');
Такой запрос возвращает строки
select * from test.mongo_table;
Дальше хочу выкачать сами данные в кликхаус
CREATE TABLE IF NOT EXISTS test.currency_rates AS test.mongo_table
ENGINE MergeTree()
PARTITION BY _id
ORDER BY _id
SETTINGS index_granularity = 8192;
CREATE MATERIALIZED VIEW IF NOT EXISTS test.currency_rates_mv TO test.currency_rates AS
SELECT *
FROM test.mongo_table;
Но сама таблица test.currency_rates пустая
select * from test.currency_rates;
В логах вижу только ошибки DB::Exception: default: Not enough privileges. To execute this query it's necessary to have grant SHOW ROLES ON *.*. (ACCESS_DENIED), кажется это не относится к mv
Что может быть не так? кликхаус и монгу запускаю в докер компоузе -
Подскажите когда ждать билд 22.3 на докерхабе?
-
Ну я предположу, что движок это просто прокси, для передачи запросов в монго ( не пользовался никогда). То есть сам кликхаус не знает как вставляются данные в монго, ну и то есть MV не будет работать априори
-
Вы на каком смотрите ?
-
-
-
Он переехал после создание компании сюда https://hub.docker.com/r/clickhouse/clickhouse-server/tags
-
Движок таблиц MongoDB позволяет читать данные из коллекций СУБД MongoDB. В таблицах допустимы только плоские (не вложенные) типы данных. Запись (INSERT-запросы) не поддерживается.
-
Ух, спасибо большое
-
Kafka позволяет:
Публиковать/подписываться на потоки данных.
Организовать отказоустойчивое хранилище.
Обрабатывать потоки по мере их появления. -
Вроде в первом предложение заметна разница, не ?
-
у меня нет вложенных структур + я не пытаюсь делать insert
все что мне нужно - чтобы данные из монги скопировались в кликхаус таблицу as is -
INSER INTO table SELECT * FROM mongo ну так сделайте так ?
-
-
-
-
Сделайте ETL
-
Подскажите, есть какая-то настройка для ReplacingMergeTree относительно операции дедубликации.
или есть хоть какая-то оценка, когда должна пройти финализация?
дубликаты висят уже минут 30, а там всего-то две строки на пробу -
может никогда не пройти
-
а в чём прикол? зачем тогда движок этот
-
это фича. дедупликация происходит только при мерже партов.
-
-
В документации есть движок для интеграции S3. Подскажите, пожалуйста, можно ли забирать напрямую из бакета яндекса json в CH?
-
я не понимаю логики, везде написано не использовать final
-
мб там про OPTIMIZE FINAL?
-
Оно должно быть, ага
-
т.е. SELECT FINAL будет работать круто и быстро? Я просто не понимаю, нафига тогда этот движок
-
Две строки могут в одном куске быть. Вставить ещё пару и посмотреть, что будет. Или OPTIMIZE сделать
-
помогло увеличние read_timeout, спасибо!
-
вам же пояснили уже что "дедупликация происходит только при мерже партов". А последний мердж партов может произойти "никогда", потому что у КХ нет задачи домердживать парты до конца - они ему нужны отдельные, чтобы загружать разные ядра процессора (MPP - massively parallel processing)
Или не пишите дубликаты в таблицу, или используйте Replaced/FINAL. Если ваш запрос не точечный, а аналитический (длинный), то замедление не такое уж и ужасное. -
всё понял, спасибо
-
-
set allow_experimental_window_funciton = 1;
-
Setting allow_experimental_window_function is neither a built in setting not started with the prefix 'custom_' registered for user-defined settings
-
А версия какая у вас ?
-
21.3.20.1
-
Добрый день.
Есть такая функция file, которая в подобной конструкции
SELECT * FROM file(...) не будет работать без гранта TEMPORARY TABLE и FILE.
Но при этом:
SELECT file(...) работать будет и без гранта, и любой юзер может читать файлы из user_files_path
Вопрос:
Есть ли какой-то способ и во втором случае юзеру запретить так делать? -
Дак они вроде в 5 появились как эксперементальные
-
-
А нет вру в 21.3
-
-
Получается что в конце любого запроса добавлять SETTINGS allow_experimental_window_funciton = 1 и всё будет работать
-
Есть ли в словарях возможность использовать тип данных DateTime?(словарь к PostgreSQL если это важно, не ODBC) В описаниях такого нет, те на первый взгляд поле д. быть string если дата типа "2022-03-18 00:00:00". Но говорится, что есть тэг expression для модификации . Может быть, кто -то его использовал для превращения строки в дату - или в int64 для unix datetime?
-
Ну вот не хочет почему-то
-
о, проверила. есть DateTime и dictGetDateTime к ней. А в доке нет..
-
Этот движок предназначен для автоматической оптимизации дискового пространства для хранения данных и уменьшения количества строк.
-
-
всем привет. К графане подключен кликхаус и нужно, чтобы в поле сервис были уникальные значения service_name в зависимости от поля Folder, даже если в Folder выбраны несколько значений. Сейчас если в Folder ставлю Multi-value, то в Service отображается None, если Multi-value убрать, то показывает нормально, но для одного Фолдера. Как сделать, чтобы в service был уникальный список сервисов при множественном выборе Folder?
Для service запрос такой
SELECT DISTINCT service_name
FROM billing
WHERE
(billing_account_name = '${billing_account}')
AND (cloud_name = '${cloud_name}')
AND (folder_name = '${folder}')
для Folder такой
SELECT DISTINCT service_name
FROM billing
WHERE
(billing_account_name = '${billing_account}')
AND (cloud_name = '${cloud_name}')
AND (folder_name = '${folder}')
SELECT DISTINCT folder_name
FROM billing
WHERE
(billing_account_name = '${billing_account}')
AND (cloud_name = '${cloud_name}')
ORDER BY REPLACE(folder_name, 'fx', ''); -
-
Добрый день!
Исходные данные:
Есть кластер Clickhouse, 6 нод.
На каждой ноде кластера есть MergeTree-таблица и поверх неё Distributed-таблица для запросов со всего кластера.
Авторизация в Clickhouse осуществляется через AD. Юзеры успешно входят по AD учеткам, роли мапятся.
Проблема:
Юзер заходит на ноду-1, делает Select * from Distributed-table и выпадает ошибка "Authentification failed...".
Ошибка из-за того, что гранты проливаются только на ту ноду, куда юзер зашел (это видно через SHOW ACCESS).
Т.е. для того чтобы юзер мог выполнять запрос со всего кластера, ему нужно авторизоваться на каждой ноде.
Есть ли к-н решение, чтобы этого не делать? -
а в полном тексте ошибки CH ругается на доступ к локальным таблицам, на которые distributed смотрит?
-
если да, то GRANT ON CLUSTER <cluster> SELECT ON <local table> TO .. должен помочь
-
Если запустить запрос от дефолтного пользователя
-
Все будет работать?
-
Вывод SHOW ACCESS:
CREATE ROLE appusers
GRANT SELECT ON *.* TO appusers
CREATE USER ad_user IDENTIFIED WITH ldap SERVER 'ad-server'
GRANT appusers TO ad_user -
От дефолтного работает. Но нужно от AD-шного
-
я как понимаю, это на той ноде, на которой запущен запрос (и на которой, видимо, права и назначались)
-
На остальных нодах (где ad-user ещё не входил) следующий SHOW ACCESS:
CREATE ROLE appusers
GRANT SELECT ON *.* TO appusers -
значит, нужен CREATE USER ON CLUSTER
-
Вчера вечером вышла 22.3 где Миловидов торжественно объявил его в production ready. Но см. дисскуссию чуть выше. Есть разные мнения.
В любом случае если вы поставите на маленькую инсталяцию и расскажете нам - будет весьма любопытно. -
Это решение для заранее известных учеток.
Clickhouse же не знает, какой юзер зайдет из AD, в этом суть авторизации через внешний каталог LDAP -
Подскажите пожалуйста что может быть такое. Был кластер, был ребут двух серверов подряд, теперь пишет в логах вот такое -
Table is in readonly mode (zookeepe
r path: /clickhouse/monitoring/vsphere_mon/vsphere_cluster_cpu/01). (TABLE_IS_READ_ONLY),
при этом в самом zookeeper есть только вот такой путь -
/clickhouse/monitoring/vsphere_mon/vsphere_cluster_cpu/1
Хотелось бы понять как поднять обратно -
Был измен макрос для создания реплик. Не заметил этого в конфигах. Проблема решена.
-
Повторю свой вопрос
-
потому что functionS. settings allow_experimental_window_functions = 1
-
folder_name in (${folder})
-
Здравствуйте, arrayDifference странно работает
на массиве [6,6,5,5,5,5,5,5,5,5]
результат [0,0,4294967295,0,0,0,0,0,0,0]
а ожидаю [0,0,-1,0,0,0,0,0,0,0]
CREATE TABLE test_diffs
(
`event_date` Date,
`event_datetime` DateTime,
`tm` UInt64,
`num` UInt64,
`events` UInt32
)
ENGINE = ReplacingMergeTree
PARTITION BY toYYYYMM(event_date)
ORDER BY (event_date, event_datetime, tm, num)
SETTINGS index_granularity = 8192;
INSERT INTO test_diffs FORMAT JSONEachRow
{"event_date":"2021-07-01","event_datetime":"2021-07-01 16:09:54","tm":"1","num":"1","events":6}
{"event_date":"2021-07-01","event_datetime":"2021-07-01 19:14:57","tm":"1","num":"1","events":6}
{"event_date":"2021-07-02","event_datetime":"2021-07-02 08:12:32","tm":"1","num":"1","events":5}
{"event_date":"2021-07-02","event_datetime":"2021-07-02 12:10:19","tm":"1","num":"1","events":5}
{"event_date":"2021-07-02","event_datetime":"2021-07-02 16:14:55","tm":"1","num":"1","events":5}
{"event_date":"2021-07-02","event_datetime":"2021-07-02 19:12:19","tm":"1","num":"1","events":5}
{"event_date":"2021-07-03","event_datetime":"2021-07-03 08:11:55","tm":"1","num":"1","events":5}
{"event_date":"2021-07-03","event_datetime":"2021-07-03 12:12:27","tm":"1","num":"1","events":5}
{"event_date":"2021-07-03","event_datetime":"2021-07-03 16:12:10","tm":"1","num":"1","events":5}
{"event_date":"2021-07-03","event_datetime":"2021-07-03 19:15:10","tm":"1","num":"1","events":5}
SELECT num
, groupArray(events) as events_data
, arrayDifference(events_data) as diffs
FROM test_diffs
GROUP BY num; -
-
точно
спасибо) -
Здравствуйте! CH не хочет есть параметры max_server_memory_usage* из переменных окружения, так и должно быть?
$ cat custom_config.xml
<yandex>
<max_server_memory_usage from_env="CH_MAX_MEMORY_USAGE" />
</yandex>
...
$ export CH_MAX_MEMORY_USAGE=100
...
$ clickhouse-server
[ 50 ] {} <Error> Application: Syntax error: Not a valid unsigned integer
При этом не работает также для max_server_memory_usage_to_ram_ratio, но работает для max_memory_usage.
Если задавать в том же конфиге руками, а не из переменных — всё тоже работает. -
Попробуйте в экспорт переменной добавить кавычки ='100'
Не сталкивался с такой проблемой, просто как идея, вдруг поможет... -
Не помогло. А для max_memory_usage работает и без кавычек, что смущает больше всего)
- 19 March 2022 (33 messages)
-
Попробуйте тогда 100.0 :)
-
-
что вы хотели сказать, когда указали 100 для max_memory_usage? Там указывается в байтах. Добавьте 9 нулей или напишите '100G'
-
Показать, что не работает, не нагружая сообщение нулями. Думаете, я не проверял на нормальных значениях?)
-
То есть 100G не работает ?
-
Не работает. Даже если вообще не задавать переменную, всё равно будет абстрактное Not a valid unsigned integer. Зато если не задавать её для max_memory_usage — то будет адекватное Attempt to read after eof: while parsing value '' for setting 'max_memory_usage'
-
c
-
Добрый день!
Недавно наша компания начала пытаться в кликхаус.
И у меня возник вопрос - а правильно ли мы его используем?
Суть такова:
(упрощённо) У нас есть рейсы по заказам с мунициаплитетом и назначенными на них машинами (municipality_uuid -> order_uuid -> run_uuid -> vehicle_uuid)
vehicle_uuid может меняться.
Мы создали таблицу с сырыми данными по изменениям order_runs_raw с полями municipality_uuid, order_uuid, run_uuid, vehicle_uuid, updated_at
Для этой таблицы матвьюху order_runs с полями municipality_uuid, order_uuid, run_uuid, argMaxState(vehicle_uuid, order_runs_raw.updated_at), maxState(updated_at) ORDER BY municipality_uuid, order_uuid, run_uuid
для того чтобы иметь актуальный vehicle_uuid для каждого рейса в соответствии с последними изменениями
Далее возникла задача выводить изменения по разным часам
матвьюха order_runs_hourly с полями municipality_uuid, order_uuid, run_uuid, toStartOfHour(updated_at) as updated_at_hour, argMaxState(vehicle_uuid, order_runs_raw.updated_at), maxState(updated_at) ORDER BY municipality_uuid, order_uuid, run_uuid, updated_at_hour
Далее необходимо для различных уровней агрегации выводить список используемых в рейсах за час машин (при чём за последний updated_at в часу, а не все машины вместе с заменёнными)
Т.е. нужна матвьюха типа municipality_uuid, order_uuid, updated_at_hour, массивМашин ORDER BY municipality_uuid, order_uuid, updated_at_hour
Не могу понять как реализовать последнюю вьюху да и правильный ли вообще подход -
> (упрощённо) У нас есть рейсы по заказам с мунициаплитетом и назначенными на них машинами (municipality_uuid -> order_uuid -> run_uuid -> vehicle_uuid)
Вы обеспечиваете рейсами муниципалитеты небольшой галактики?) если вам необходимо использовать 16 байтовый айди?
> для того чтобы иметь актуальный vehicle_uuid для каждого рейса в соответствии с последними изменениями
Почему не replacingMergeTree
И сколько у вас вообще строк в таблице? -
юиды с легаси пошли
replacingMergeTree если я правильно понимаю - удаляет записи в фоне, а не сразу. Таким образом можем получить дубликаты, что не подходит учитывая что по этой табличке будем потом составлять отчёты и машины которые были заменены на рейсе не должны попасть в пересчёт -
MV и тд это тоже просто insert trigger и удаляет в фоне
https://kb.altinity.com/altinity-kb-schema-design/materialized-views/ -
выбирайте последние данные всегда, и у вас не будет дубликатов
-
используйте SELECT ... FINAL
дубликаты будут удаляться из результатов выборки -
а FINAL сильно влияет на производительность запроса ?
-
а сколько строк у вас в таблице? может вам clickhouse вообще не нужен?
-
https://kb.altinity.com/altinity-kb-queries-and-syntax/altinity-kb-final-clause-speed/
https://kb.altinity.com/engines/mergetree-table-engine-family/replacingmergetree/
Зависит от обстоятельств -
от нескольких сотен до пара тысяч ордеров в день, в каждом из них по сотне рейсов
-
у меня около трёх миллиардов, но вопрос не про меня. Я тоже использую MV у которых данные схлопываются. и почему-то FINAL не использую, хотя наверное можно было бы попробовать.
-
спасибо, проверим на наших кейсах после обновления до свежей lts
-
я не про MV я про ReplacingMergeTree
выборка из этой таблицы если у вас возможны дубликаты в разных вставках, должна быть с FINAL
либо всякие там any, argMin , argMax функции использовать -
да, я как раз использую argMax.
-
В моём случае проблема в том что запросы для вьюх работают в рамках вставляемых данных, т.е. если у меня есть вьюха с массивом машин для ордера - в него будут попадать все изменения по vehicle_uuid
-
А нужно чтобы попадали только последние по updated_at
-
т.е. сначала нужно argMaxState(vehicle_uuid, updated_at) GROUP BY order_uuid, run_uuid и результаты этого в массив groupUniqArrayMerge(vehicle_uuid) GROUP BY order_uuid
-
что-то типа такого
-
А чем собственно может помочь ReplacingMergeTree?
Из-за того что запрос во вьюхах выполняется только в рамках вставляемых данных - в массив во вьюхе будут попадать все значения, т.к. массив то сам из себя старые значения удалять не будет -
Коллеги, приветствую
Мб невнятно сформулирую - прошу строго не судить
ВОПРОС: как сформировать запрос по переменному числу полей таблицы в зависимости от значения полей этой таблицы
типа (фантазирую):
SELECT a_1, a_2 , ..., а_{TOT}, TOT from T where TOT<5 -
может, эта функция поможет
https://clickhouse.com/docs/en/sql-reference/statements/select/#columns-expressionSELECT QuerySELECT Query SELECT queries perform data retrieval. By default, the requested data is returned to the client, while in c
-
спс большое - буду пробовать
-
ага, в результате такого запроса вы получите разное количество столбцов в разных строках. Нет, так оно не работает.
Все операторы вычисления колонок (columns, untuple, etc) - работают при компиляции запроса, как будто вы компилируете программу на C++ с её классами, структурами и директивами препроцессора. Во время выполнения запроса вычисляются строки, а набор колонок уже не меняется. -
можно все колонки собрать в array, а потом для каждой строки передать значение TOT в arrayResize
-
да, массивы - верный путь. Они полностью динамичны, можно слайсить, ресайзить, объединять, разделять, и вобще делать все что угодно :)
-
Для пользователей tabix.io, сейчас домен может работать не стабильно.
Reg.Ru сейчас его разделегировал без внятных объяснений. - 20 March 2022 (17 messages)
-
-
Коллеги, подскажите пожалуйста, что делаю не так:
-
к кролику приконнектился, вроде всё норм. Из доки следует, что после создания мат. представления данные должны потечь из кролика в таблицу api_requests, но этого не происходит
-
в очередь сообщения идут, консюмер есть. Но сообщения копятся
-
-
Всем привет!
Подскажите пожалуйста, есть-ли ещё какие-нибудь операторы или способы для управления операциями (запросами) кроме KILL QUERY/MUTATION?
Спасибо! -
UPDATE: посмотрел логи clickhouse, увидел ошибку формата. Поменял на JSONEachRow, данные пошли. Теперь новая проблема. Любой SELECT выдаёт всегда ровно 9 записей..
-
А каким образом хотите влиять на запросы? Kill query не так сильно влияет
-
На данный момент больше интересует именно остановка текущих и запланированных (если есть) запросов, мутаций. Возможно есть какое-то изменение действий "на ходу".
-
Kill query не обязательно убьёт запрос(
Не на всех этапах выполнения запроса он может остановиться -
В документации этого не описано. Где можно подробнее почитать об этом? А какой способ гарантированно "убьёт" запрос?
-
Только рестарт сервера гарантированно убъёт запрос)
-
Ага понял, но не в случае KILL MUTATION, так?) Судя по документации, даже после рестарта он продолжит выполнение)
-
Если сделать kill mutation + рестарт, в теории не должно продолжить, но я с таким ещё не сталкивался в реальности. Только kill query не работающий видел)
-
Понял, спасибо!)
-
Привет. Обратил внимание, что на ноде CH начало расти занятое место на диске. Обнаружил, что максимальный размер (35Гб+) имеет /var/lib/clickhouse/store/1c5/1c5c7529-7891-4ea1-b091-96c89353e5ff
В самом CH:
SELECT database,name,data_paths,total_bytes FROM system.tables WHERE has(data_paths,'/var/lib/clickhouse/store/1c5/1c5c7529-7891-4ea1-b091-96c89353e5ff/') FORMAT Vertical;
...
Row 1:
──────
database: system
name: trace_log
data_paths: ['/var/lib/clickhouse/store/1c5/1c5c7529-7891-4ea1-b091-96c89353e5ff/']
total_bytes: 19907854
1 rows in set.
То есть, если я правильно понимаю - упомянутая директория используется только для данных таблицы system.trace_log, на диске она занимает 35Гб, а CH размер таблицы видит как ~ 20 Мб.
Вопросы:
1. Правильно ли я трактую те данные, что вижу?
2. Если да - могу ли я исправить эту проблему без перезапуска CH? -
UPDATE: никакой мистики, просто там реально было только 9 сообщений. Смутило то, что они всё выбирались в разном порядке - создало иллюзию движения
- 21 March 2022 (71 messages)
-
Select from columns('a\_[0-5]) from t
-
Всем привет, есть ли возможность конвертировать string в название колонки? Или как нибудь использовать string как название колонки?
-
columns
-
Спасибо
-
Всем привет, пытаюсь выгрузить данные из логс апи в ch (в облаке). использую это решение: https://github.com/yndx-metrika/logs_api_integration/blob/master/README_RU.md
на этапе запуска программы сразу вылетает такая ошибка:
'import sitecustomize' failed; use -v for traceback
Traceback (most recent call last):
File "metrica_logs_api.py", line 2, in <module>
import logs_api
File "/home/jupyter/work/resources/logs_api_integration/logs_api.py", line 4, in <module>
import requests
ImportError: No module named requests
С чем это может быть связано?logs_api_integration/README_RU.md at master · yndx-metrika/logs_api_integrationScript for integration with Logs API. Contribute to yndx-metrika/logs_api_integration development by creating an account on GitHub.
-
Добрый день, требуется установить модуль requests
-
Добрый день. Настраиваем проброс данных из MSSQL в CH. Наладили ODBC драйвер и создали несколько словарей, которые берут данные из запросов в MSSQL.
Таблицы в источнике большие, поэтому словари сделали только для подтягивания GUID-ов, а сбор данных, по задумке, должен был быть в материализованном представлении по джойна табличной функции ODBC и значений словаря, содержащим те же GUID-ы из той же таблицы.
В итоге видим: словари обновляются, а материализованное представление не реагирует на пополнение таблиц на движке Dictionary и потому не обогащается новыми данными из MSSQL.
Что не так? В чем мы просчитались? Может что-то забыли? -
не очень понятный вопрос. чтобы не гадать - лучше покажите как вы создаете MV
-
Если не изменяет память, матвью реагирует на инсерт только в самом кликхаусе. А у вас внешний источник, который подключен как Dictionary.
-
Привет! Ребят, подскажите, пожалуйста, какой интерфейс лучше всего установливать для кликхауса? И какой визуализотор(для графиков) используете?
-
Если у вас источник, то он не будет реагировать, mv: after insert trigger
-
redash
-
благодарю
-
CREATE MATERIALIZED VIEW thanatos.OrderHeadersAzure2V2
ENGINE = ReplacingMergeTree
PARTITION BY toYYYYMM(OrderTime)
ORDER BY
(***)
SETTINGS index_granularity = 8192 AS
SELECT
***
FROM
thanatos.Orders_SERVICE_DICT AS o --это словарь, который обновляется
INNER JOIN odbc('DSN=Thanatos;Uid=***;Pwd=***',
'Documents',
'OrderHeadersAzure2V2') AS oha ON
toUUIDOrZero(oha.OrderId) = o.OrderId -
но ведь словарь обновляется и это видно в таблице sysnem.dictionary. Или тут по-другому работает?
-
прошу прощения, не понимаю. Можно чуть подробней?
-
вам правильно сказали - первая таблица в MV/select - должна быть нормальной таблицей, куда идут обычные инсерты. MV работает над строками в одном инсерте, а вовсе не данными из таблицы. Смотрите выше по чату мильен вопросов и ответов что такое MV и как оно работает
-
ну, смотрите в SELECT count(), active system.parts WHERE table='trace_log' GROUP BY active
может там старые данные какие то которые скоро удаляться сми
\ -
Насколько я знаю, представление словаря в виде таблице Dictionary это что-то вроде синтаксического сахара. Обычно со словарем работают через dictget. У вас данные обновляются во внешнем источнике, вставки в самом кликхаусе не было, именно поэтому триггер не срабатывает.
-
правильно ли я понимаю, что мне никак не получится автоматизировать этот процесс (добавление данных из MSSQL) внутри кликхауса, не прибегая к внешним скриптам?
-
Точно не знаю состояние дел в новых версия, но в 21.8 - нельзя.
-
Только, если Вы будете данные из MSSQL сами добавлять в CH. А через словари CH может только читать данные, кешируя их на своей стороне для более быстрого доступа к ним через словарные функции.
-
@bralbral @bvt123 @vvvjhaq Спасибо.
-
Может кто-то знает сегодня? 👉🏻👈🏿
-
думаю стоит написать Issue на гитхаб о неконсистентном поведении и привести минимально воспроизводимый SQL
-
Может кто-нибудь дать статью и видео по построению HA (High Availability) кластера Clickhouse. В документации я нашёл только описание репликации, да и то не для всех движков таблиц. Те несколько первых статей что я сходу нашёл в инете, опять же описывают настройку репликации. Но репликация - это не HA.
-
репликация - это значимая часть HA.
У вас есть привычный всем haproxy, keepalived и репликация - чего ещё не хватает? -
спасибо, а вот это сообщение можно понимать, как факт успешной установки модуля?
-
программу выполнить не дает все равно
-
всего хватает, но хотелось бы готовую инструкцию поиметь, которую быстрее под себя подогнать, чем с нуля разбиратся, т.к. репликацию на Clickhouse я никогда не настраивал, всё что до этого ставил , обычный standalone А еще может быть есть какие-то другие интересные варианты, не haproxy, keepalived
-
Я бы попробовал установить реквест сразу в Анаконду.
В "Anaconda Prompt" установить через pip -
Я в облаке через datasphere, там вроде так не получится
-
материалов в интернете навалом. Начиная с документации. Если любите видео можно попробовать тут - https://www.youtube.com/watch?v=4DlQ6sVKQaAIntroduction to the Mysteries of ClickHouse Replication
Built-in replication is a powerful #ClickHouse feature that helps scale #DataWarehouse performance as well as ensure high availability. In this webinar (July 31, 2019), Robert Hodges and Altinity Engineering Team introduce how replication works internally, explain the configuration of clusters with replicas, and show you how to set up and manage #ZooKeeper, which is necessary for replication to function. We finish off by showing useful replication tricks, such as utilizing replication to migrate data between hosts. Join us to become an expert on this important subject! Speaker Bio: Robert Hodges is CEO of Altinity, which offers enterprise support for ClickHouse. He has over three decades of experience in #DataManagement spanning 20 different #DBMS types. ClickHouse is his current favorite. ;) Presentation slides for this webinar can be found here: https://bit.ly/2KO9lIY #OpenSource ----------------- Enjoy more value-packed Altinity webinars here: https://www.altinity.com/webinarspage Or check out ClickHouse community events here: https://www.altinity.com/events ----------------- Learn more about Altinity! Site: https://www.altinity.com LinkedIn: https://www.linkedin.com/company/altinity/ Twitter: https://twitter.com/AltinityDB
-
Добрый день. Подскажите, когда можно ожидать релиз 22.3 в https://repo.yandex.ru/clickhouse/? На гитхабе уже есть :)
-
-
благодарочка! вот этого вообще не знал
-
https://clickhouse.com/docs/en/getting-started/install/
заодно и образы docker переехали на https;//hub.docker.com/r/clickhouse/clickhouse-serverInstallation | ClickHouse DocumentationInstallation System Requirements ClickHouse can run on any Linux, FreeBSD, or Mac OS X with x86_64, AArch64, or PowerPC6
-
Всем привет, у меня есть набор триггеров (скажем, выручка упала на 30%), я хочу чтобы по этому триггеру и ему подобным информация вида - дата, значение и описание триггера сыпалась в другую таблицу кх, как это сделать?
-
Подскажите, как можно ускорить выборку из SummingMergeTree? В сутки примерно +1 млрд записей в таблицу. ORDER BY достаточно большой, поэтому задал PRIMARY KEY по первым двум полям (типы DateTime и IPv4), т.к. выборка по ним идёт больше всего.
Знаю, что можно добавить индексов в таблицу, но не особо помогают. Может, я их неправильно готовлю, не пойму.
В среднем, запросы выполняются от 4-5 секунд, в зависимости от выбранного интервала времени. Почему грешу на индекс - вижу в SELECT count(), что вытаскивается 150 тысяч строк, а в запросе Processed 5.21 million rows, т.е. индекс явно не используется. -
нужны детали, например ДДЛ таблицы и запрос
-
Всем привет, кто то пользовался tablum или holistics как bi для CH? Что устраивает что нет?
-
Тут вопрос в том, как Вы будете определять, что какое-то событие наступило? Если по какому-то срезу уже имеющихся данных в таблице, то средствами CH сделать не получится.
-
В питоне
-
Просто с помощью проверки условия
-
Тогда в чем вопрос? Получаете нужные данные из одной таблицы и заливаете нужные данные в другую таблицу.
-
Ну как корректно создавать и класть данные в питон через кх
-
ClickHouse and Python: Getting to Know the Clickhouse-driver Client
Python is a force in the world of analytics due to powerful libraries like numpy along with a host of machine learning frameworks. ClickHouse is an increasingly popular store of data. As a Python data scientist you may wonder how to connect them. This post contains a review of the clickhouse-driver client. It’s a solidly engineered module that is easy to use and integrates easily with standard tools like Jupyter Notebooks and Anaconda. Clickhouse-driver is a great way to jump into ClickHouse Python connectivity.
-
И тут еще гляньте ссылки на клиентские библиотеки - https://clickhouse.com/docs/ru/interfaces/third-party/client-libraries/Клиентские библиотеки от сторонних разработчиков | Документация ClickHouse
Клиентские библиотеки от сторонних разработчиков Disclaimer Яндекс не поддерживает перечисленные ниже библиотеки и не пр
-
Спасибо большое!
-
Привет!
Подскажите, пожалуйста, как безопасно обновить Enum колонку? Схема такая: Distributed -> Buffer -> ReplicatedMergeTree. Пытался обновлять сначала Buffer, потом Replicated и наоборот – ловил кучу ошибок из-за неконстистентности данных, и помогал только рестарт сервера, чтобы сбросить Buffer. -
Коллеги есть кейс:
Существует некая таблица (engine = MergeTree), куда мы записываем все события приходящих сообщений и их атрибутный состав. Таблица 85 столбцов. Данные могут обновляться не инкрементно, ввиду этого для каждой строки выделен tx_id числовой идентификатор сессии в рамках которой была вставлена строка И есть отдельная таблица с 2мя столбцами - сущность 1ой таблицы и актуальный идентификатор сессии tx_id (таблица событий).
Над таблицей событий словарь в памяти (автообновление выставлено - в целом тянет).
При выборке из основной таблицы неактуальные строки отфильтровываются при неявном соединении со словарем событий (dictGet по ключу - сущности основной витрины, где tx_id - атрибут).
Проблемы:
- Поскольку данные могут быть обновлены/удалены, по существующей в таблице сущности, просто дописывать данные в таблицу нельзя.
- Поскольку точечные обновления и удаления данных тяжелая операция, + асинхронная операция - тяжело поддерживать с таким механизмом консистентность данных
- При размере словаря 34 млн+ значений и схеме хранения complex_key_hashed, поскольку ключ UUID наблюдается задержка 3-4 секунды на стадии фильтрации.
- Смена ключей сортировки и партиционирования основной таблицы (+ индексы по ключевым полям) результата не дало, поскольку кейс использования - выбрать все, изредка фильтрация по территориям.
- Более быстрой Схемы без словаря событий пока не придумал.
Что можете посоветовать по способам обновления таблицы? -
2022.03.21 14:05:23.728342 [ 883 ] {} <Error> void DB::MergeTreeBackgroundExecutor<DB::MergeMutateRuntimeQueue>::routine(DB::TaskRuntimeDataPtr) [Queue = DB::MergeMutateRuntimeQueue]: Code: 76. DB::ErrnoException: Cannot open file /data/fast/store/367/367d6e41-2e10-4abb-814b-14e01734da21/tmp_merge_20220318_46336_50378_112/sumahodekiruphp ... и тут длинное название файла
errno: 36, strerror: File name too long. (CANNOT_OPEN_FILE), Stack trace (when copying this message, always include the lines below):
уточните плз как убить этот запрос ? -
-
добрый день, у кого есть идеи, как можно применить аггрегатные функции с двумя аргументами используя синтаксис COLUMNS() APPLY()
?
что можно написать в APPLY?
например для spark_bar
https://github.com/ClickHouse/ClickHouse/blob/e835671c881438ab37d619d04e07b40edc6c05bf/tests/queries/0_stateless/02016_aggregation_spark_bar.sql -
Там же можно лямбду передать
-
с версии 21.10 можно через лямбду
WITH number DIV 50 AS k, number % 50 AS value SELECT k, COLUMNS(value) APPLY x -> sparkbar(50, 0, 99)(number, x) FROM numbers(100) GROUP BY k ORDER BY k; -
спасибо ) век живи век учись!
-
Коллеги, подскажите. Вижу в system таблицы (metric|query|query_thread)_log_0.
Откуда берутся таблицы с суффиксом "_0"? -
после апдейта версии кх
-
Получается, при смене схемы таблицы она так ротируется?
-
После каждого обновления всем системным таблицам подписывается _число и больше не используются они, кроме последней цифры
-
@rasstr0en @konnectrl - спасибо!
-
С технической точки зрения почему кликхаус не любит джоины?
-
не было CBO, тк это тяжелая и сложная задача.
Но уже сделали некий задел под ней -
Только из-за этого?
-
Во многом.
даже банальная перестановка таблиц в JOIN требует сбора статистики.
Плюс раньше оптимизации делали на переписывании AST дерева, что было сложным делом и создавало кучу корнер кейсов -
ну ещё реализация joinа пока только базовый хеш join заточенный
только на скорость и кушащий много памяти. в этом случае он очень любит join.
partition-wise join /grace hash join нет.
merge join нет
там много всего делать... а сделать правильно ещё и сложно... -
Всем привет!
Подскажите, пожалуйста, как написать функцию, чтобы оставить только те кортежи в example, до которых был кортеж, первый элемент которого равен 1? -
arrayFilter(x -> x.1=1)
-
WITH [(1, 3), (1, 4), (2, 3), (2, 4)] AS ex
SELECT arrayFilter((x, i) -> (((ex[i - 1]).1) = 1), ex, arrayEnumerate(ex))
Query id: d2ccaf3f-7018-401e-a4c5-318c8d652b01
┌─arrayFilter(lambda(tuple(x, i), equals(tupleElement(arrayElement(ex, minus(i, 1)), 1), 1)), ex, arrayEnumerate(ex))─┐
│ [(1,4),(2,3)] │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -
Спасибо большое!
- 22 March 2022 (130 messages)
-
Всем привет.
Расскажите плиз, как в докере сделать команду, чтобы развернуть клихаус на другом порту. у меня 9000 уже php-fpm занят -
docker run -d --name clickhouse_1 --ulimit nofile=262144:262144 -v /opt/clickhouse/log:/var/log/clickhouse-server -v /opt/clickhouse/data:/var/lib/clickhouse yandex/clickhouse-server -p 9008:9000
-
не але. просто ничего не запускает
-
exitCode=2, image=yandex/clickhouse-server, name=clickhouse_1
-
Всем привет
Одновременное выполнение ALTER TABLE system.query_log MODIFY TTL event_date + INTERVAL 7 DAY; на всех нодах положило весь клайстер ClickHouse, Chproxy отвалился с connection timeout.
Чтобы можно переконфигурить, чтобы такого больше не было при одновременной чистке логов? -
-
-
how to disable logging in clickhouse?
I want disable logging in clickhouse. I tried disable sections query_log and query_thread_log in config.xml, but it didn't help me. I tried run sql query: ALTER TABLE system.settings UPDATE log_qu...
-
-
а, вот что помогло https://clickhouse.com/docs/ru/operations/server-configuration-parameters/settings/#server_configuration_parameters-loggerКонфигурационные параметры сервера | Документация ClickHouse
Конфигурационные параметры сервера builtin_dictionaries_reload_interval Интервал (в секундах) перезагрузки встроенных сл
-
какая версия clickhouse?
ALTER TABLE ... MODIFY TTL SETTING materialize_ttl_after_modify=0
доступно с версии 20.5
судя по тому что у вас поперло все старые парты обновлять само, то это более раняя версия? -
Всем привет , может немного оффтоп , никто не юзал яндекс танк ? чем сгенерить ammo для теста ?
-
сильно оффтоп
но там вроде тесты прямо на питоне можно писать
https://yandextank.readthedocs.io/en/latest/core_and_modules.html#bfg
лично я предпочитаю locust.io
там как то понятнее как тесты пишутся -
спасибо !🙏
-
привет
при попытке создать таблицу с ch (из logs api метрики) вылетает ошибка:
OverflowError: string longer than 2147483647 bytes
что мне можно указать в settings, чтобы, например, исключать такие строки из формирования целевой таблицы -
Приветствую!
из командной строки на сервере запускаю команду:
clickhouse-client --user default --password default --query="insert into DWH.TEST (TEST) FROM INFILE '/etc/clickhouse-client/temp/TEST.CSV' FORMAT TabSeparatedWithNames;" > /etc/clickhouse-client/temp/TEST.LOG
Ожидал, что в лог попадет результат выполнения команды, или ошибка, если данные не вставлены.
По факту TEST.LOG пустой. Как перенаправить результата выполнения команды в TEST.LOG? -
При вставке чтобы ответ дал ? А он даёт какой то ответ в консоль ?
-
в консоль выводит сколько записей вставлено и время выполнения,
либо содержимое строки с ошибкой и сообщение об ошибке (в случае ошибки) -
может вы не в том формате грузите?
вам не кажется странным что у вас строка в 2 гигабайта длинной? -
&>/log.log
чтобы все потоки переводились а не только stdout -
это урл, тип string
-
и что? действительно 2 гигабайта внутри строки?
-
ну получается что так, данные из логс апи же, значит так записалось (возможно как-то цели аффектят, в 1 строке вижу: "goal://url..." например )
-
поле ym:pv:URL
-
данные вставлены, лог пустой
-
ну скачайте данные из Logs api и проверьте
-
--verbose добавьте в параметры
или
--progress -
Привет.
Столкнулся с тем что clickhouse постоянно подъедает память - за месяц вырос с 6Гб до 15 как понять в чем причина такого поведения ? Скоро сожрет вся память на сервере ... -
не хочет
-
-
-
не работает ни одна из них...
-
-
Ну вот я об этом вас сразу и спросил, потому что как я помню clickhouse-client ничего не выводил в консоль у меня ....
-
работает без пробелов сразу после --stacktrace:
&>/etc/clickhouse-client/temp/TEST.LOG
Еще бы в случае успеха научится кол-во вставленных записей выводить... -
судя по документации можно выводить только время выполнения или сообщение об ошибке в случае исключения:
-
этих параметров нет в документации...
-
--print-profile-events
-
-
На английской версии доки больше написано
-
Добрый день. Может кто знает...
Вылезает ошибка:
DB::Exception: Alter of type 'MODIFY_QUERY' is not supported by storage MaterializedView. (NOT_IMPLEMENTED) (version 22.1.3.7 (official build))
Хотя в документации явно указано что запрос должен работать для материализованных представлений. В чем может быть дело? Заранее спасибо. -
Всем привет
Я правильно понимаю что из-за того как формируется mongodb uri, нет возможности подключаться к кластеру монги
Получаю ошибку когда указывают список серверов
Code: 36. DB::Exception: Illegal port passed to function parseAddress: 27017,mongo2:27017,mongo3:27017. (BAD_ARGUMENTS) (version 22.1.2.2 (official build))
https://github.com/ClickHouse/ClickHouse/blob/master/src/Storages/StorageMongoDB.cpp#L48ClickHouse/StorageMongoDB.cpp at master · ClickHouse/ClickHouseClickHouse® is a free analytics DBMS for big data. Contribute to ClickHouse/ClickHouse development by creating an account on GitHub.
-
Используйте его если при создании материализованного представления не использовалась секция TO [db.]name. Настройка allow_experimental_alter_materialized_view_structure должна быть включена.
-
clickhouse-client --help
это документация? -
Добрый день.
Эксплуатируем КХ в lxc-контейнере под управлением Proxmox 6.2 (5.4.44-2-pve) на zfs
Настройки контейнера:
* отдельный маунт для /var/lib/clickhouse (30% used)
* cores: 8
* memory: 32G
* swap: 2G
Версия КХ: version 21.3.2.5 (official build)
На хосте установлено 196G RAM
В логах:
2022.03.21 13:25:10.204986 [ 246 ] {} <Information> Application: Setting max_server_memory_usage was set to 169.72 GiB (188.58 GiB available * 0.90 max_server_memory_usage_to_ram_ratio)
<…>
2022.03.21 13:25:10.255529 [ 247 ] {} <Trace> BaseDaemon: Received signal 11
В конфиге:
root@at-clickhouse1-main:~# grep -nRH mem /etc/clickhouse-server/
<…>
/etc/clickhouse-server/config.xml:250: <max_server_memory_usage>0</max_server_memory_usage>
Я правильно понимаю что КХ неверно определяет объем памяти и падает при попытке откусить больше, чем разрешено? -
Ну вы указали 0, обычно это означает бесконенчость
-
Например укажите 20G
-
Это конфиг дефолтный, наши правки в config.d/
Спасибо -
2022.03.21 13:25:10.255529 [ 247 ] {} <Trace> BaseDaemon: Received signal 11
это вообще с памятью доступной не связано, это сегфолт, когда процесс пытается обратиться по адресу, который процессу не принадлежит
там дальше в логе stacktrace
покажите его полностью -
2022.03.21 13:25:10.255529 [ 247 ] {} <Trace> BaseDaemon: Received signal 11
2022.03.21 13:25:10.262745 [ 364 ] {} <Fatal> BaseDaemon: ########################################
2022.03.21 13:25:10.262828 [ 364 ] {} <Fatal> BaseDaemon: (version 21.3.2.5 (official build), build id: 179BDBBF228667883DFCD900B8CD498272FC044F) (from thread 344) (no query) Received signal Segmentation fault (11)
2022.03.21 13:25:10.264261 [ 364 ] {} <Fatal> BaseDaemon: Address: 0x7f1400007f24 Access: read. Address not mapped to object.
2022.03.21 13:25:10.264305 [ 364 ] {} <Fatal> BaseDaemon: Stack trace: 0xf6063e3 0xf605fd7 0xf6057f6 0xf5d13f5 0xf5cd510 0xf393478 0xf7c05ad 0xf30d849 0xe9cfd96 0xe9cef21 0x8652408 0x86543bf 0x864f9df 0x8653473 0x7f14c0c1bfa3 0x7f14c0b4c4cf
2022.03.21 13:25:10.264961 [ 364 ] {} <Fatal> BaseDaemon: 1. boost::multi_index::detail::ordered_index_impl<boost::multi_index::global_fun<std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, DB::MergeTreePartInfo const&, &(DB::MergeTreeData::dataPartPtrToInfo(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&))>, std::__1::less<DB::MergeTreePartInfo const>, boost::multi_index::detail::nth_layer<1, std::__1::shared_ptr<DB::IMergeTreeDataPart const>, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::tag<DB::MergeTreeData::TagByInfo, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::global_fun<std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, DB::MergeTreePartInfo const&, &(DB::MergeTreeData::dataPartPtrToInfo(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&))>, mpl_::na>, boost::multi_index::ordered_unique<boost::multi_index::tag<DB::MergeTreeData::TagByStateAndInfo, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::global_fun<std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, DB::MergeTreeData::DataPartStateAndInfo, &(DB::MergeTreeData::dataPartPtrToStateAndInfo(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&))>, DB::MergeTreeData::LessStateDataPart>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeDataPart const> > >, boost::mpl::v_item<DB::MergeTreeData::TagByInfo, boost::mpl::vector0<mpl_::na>, 0>, boost::multi_index::detail::ordered_unique_tag, boost::multi_index::detail::null_augment_policy>::in_place(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::null_augment_policy, boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::null_augment_policy, boost::multi_index::detail::index_node_base<std::__1::shared_ptr<DB::IMergeTreeDataPart const>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeDataPart const> > > > >*, boost::multi_index::detail::ordered_unique_tag) const @ 0xf6063e3 in /usr/bin/clickhouse
одним куском не вставляется, вставлю блоками -
2022.03.21 13:25:10.265074 [ 364 ] {} <Fatal> BaseDaemon: 2. boost::multi_index::detail::ordered_index_impl<boost::multi_index::global_fun<std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, DB::MergeTreePartInfo const&, &(DB::MergeTreeData::dataPartPtrToInfo(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&))>, std::__1::less<DB::MergeTreePartInfo const>, boost::multi_index::detail::nth_layer<1, std::__1::shared_ptr<DB::IMergeTreeDataPart const>, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::tag<DB::MergeTreeData::TagByInfo, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::global_fun<std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, DB::MergeTreePartInfo const&, &(DB::MergeTreeData::dataPartPtrToInfo(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&))>, mpl_::na>, boost::multi_index::ordered_unique<boost::multi_index::tag<DB::MergeTreeData::TagByStateAndInfo, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::global_fun<std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, DB::MergeTreeData::DataPartStateAndInfo, &(DB::MergeTreeData::dataPartPtrToStateAndInfo(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&))>, DB::MergeTreeData::LessStateDataPart>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeDataPart const> > >, boost::mpl::v_item<DB::MergeTreeData::TagByInfo, boost::mpl::vector0<mpl_::na>, 0>, boost::multi_index::detail::ordered_unique_tag, boost::multi_index::detail::null_augment_policy>::modify_(boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::null_augment_policy, boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::null_augment_policy, boost::multi_index::detail::index_node_base<std::__1::shared_ptr<DB::IMergeTreeDataPart const>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeDataPart const> > > > >*) @ 0xf605fd7 in /usr/bin/clickhouse
-
2022.03.21 13:25:10.265127 [ 364 ] {} <Fatal> BaseDaemon: 3. bool boost::multi_index::multi_index_container<std::__1::shared_ptr<DB::IMergeTreeDataPart const>, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::tag<DB::MergeTreeData::TagByInfo, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::global_fun<std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, DB::MergeTreePartInfo const&, &(DB::MergeTreeData::dataPartPtrToInfo(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&))>, mpl_::na>, boost::multi_index::ordered_unique<boost::multi_index::tag<DB::MergeTreeData::TagByStateAndInfo, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::global_fun<std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, DB::MergeTreeData::DataPartStateAndInfo, &(DB::MergeTreeData::dataPartPtrToStateAndInfo(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&))>, DB::MergeTreeData::LessStateDataPart>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeDataPart const> > >::modify_<DB::MergeTreeData::getStateModifier(DB::IMergeTreeDataPart::State)::'lambda'(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&)>(DB::MergeTreeData::getStateModifier(DB::IMergeTreeDataPart::State)::'lambda'(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&)&, boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::null_augment_policy, boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::null_augment_policy, boost::multi_index::detail::index_node_base<std::__1::shared_ptr<DB::IMergeTreeDataPart const>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeDataPart const> > > > >*) @ 0xf6057f6 in /usr/bin/clickhouse
-
2022.03.21 13:25:10.265127 [ 364 ] {} <Fatal> BaseDaemon: 3. bool boost::multi_index::multi_index_container<std::__1::shared_ptr<DB::IMergeTreeDataPart const>, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::tag<DB::MergeTreeData::TagByInfo, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::global_fun<std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, DB::MergeTreePartInfo const&, &(DB::MergeTreeData::dataPartPtrToInfo(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&))>, mpl_::na>, boost::multi_index::ordered_unique<boost::multi_index::tag<DB::MergeTreeData::TagByStateAndInfo, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::global_fun<std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&, DB::MergeTreeData::DataPartStateAndInfo, &(DB::MergeTreeData::dataPartPtrToStateAndInfo(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&))>, DB::MergeTreeData::LessStateDataPart>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeDataPart const> > >::modify_<DB::MergeTreeData::getStateModifier(DB::IMergeTreeDataPart::State)::'lambda'(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&)>(DB::MergeTreeData::getStateModifier(DB::IMergeTreeDataPart::State)::'lambda'(std::__1::shared_ptr<DB::IMergeTreeDataPart const> const&)&, boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::null_augment_policy, boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::null_augment_policy, boost::multi_index::detail::index_node_base<std::__1::shared_ptr<DB::IMergeTreeDataPart const>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeDataPart const> > > > >*) @ 0xf6057f6 in /usr/bin/clickhouse
2022.03.21 13:25:10.265173 [ 364 ] {} <Fatal> BaseDaemon: 4. DB::MergeTreeData::modifyPartState(boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::null_augment_policy, boost::multi_index::detail::index_node_base<std::__1::shared_ptr<DB::IMergeTreeDataPart const>, std::__1::allocator<std::__1::shared_ptr<DB::IMergeTreeDataPart const> > > > >, DB::IMergeTreeDataPart::State) @ 0xf5d13f5 in /usr/bin/clickhouse -
2022.03.21 13:25:10.265641 [ 364 ] {} <Fatal> BaseDaemon: 5. DB::MergeTreeData::loadDataParts(bool) @ 0xf5cd510 in /usr/bin/clickhouse
2022.03.21 13:25:10.265696 [ 364 ] {} <Fatal> BaseDaemon: 6. DB::StorageMergeTree::StorageMergeTree(DB::StorageID const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, DB::StorageInMemoryMetadata const&, bool, DB::Context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, DB::MergeTreeData::MergingParams const&, std::__1::unique_ptr<DB::MergeTreeSettings, std::__1::default_delete<DB::MergeTreeSettings> >, bool) @ 0xf393478 in /usr/bin/clickhouse
2022.03.21 13:25:10.265731 [ 364 ] {} <Fatal> BaseDaemon: 7. ? @ 0xf7c05ad in /usr/bin/clickhouse
2022.03.21 13:25:10.265780 [ 364 ] {} <Fatal> BaseDaemon: 8. DB::StorageFactory::get(DB::ASTCreateQuery const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, DB::Context&, DB::Context&, DB::ColumnsDescription const&, DB::ConstraintsDescription const&, bool) const @ 0xf30d849 in /usr/bin/clickhouse
2022.03.21 13:25:10.265829 [ 364 ] {} <Fatal> BaseDaemon: 9. DB::createTableFromAST(DB::ASTCreateQuery, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, DB::Context&, bool) @ 0xe9cfd96 in /usr/bin/clickhouse
2022.03.21 13:25:10.265852 [ 364 ] {} <Fatal> BaseDaemon: 10. ? @ 0xe9cef21 in /usr/bin/clickhouse
2022.03.21 13:25:10.265891 [ 364 ] {} <Fatal> BaseDaemon: 11. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0x8652408 in /usr/bin/clickhouse
2022.03.21 13:25:10.265936 [ 364 ] {} <Fatal> BaseDaemon: 12. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda1'()&&...)::'lambda'()::operator()() @ 0x86543bf in /usr/bin/clickhouse
2022.03.21 13:25:10.265962 [ 364 ] {} <Fatal> BaseDaemon: 13. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x864f9df in /usr/bin/clickhouse
2022.03.21 13:25:10.265985 [ 364 ] {} <Fatal> BaseDaemon: 14. ? @ 0x8653473 in /usr/bin/clickhouse
2022.03.21 13:25:10.266016 [ 364 ] {} <Fatal> BaseDaemon: 15. start_thread @ 0x7fa3 in /lib/x86_64-linux-gnu/libpthread-2.28.so
2022.03.21 13:25:10.266053 [ 364 ] {} <Fatal> BaseDaemon: 16. clone @ 0xf94cf in /lib/x86_64-linux-gnu/libc-2.28.so -
Все
-
для этого есть pastebin.com, на будущее
-
Забыл про него, каюс.
В clickhouse.err.log дополнительно есть такое:
2022.03.21 13:25:10.198344 [ 246 ] {} <Warning> Application: Failed mlock: errno: 12, strerror: Cannot allocate memory
2022.03.21 13:25:10.262745 [ 364 ] {} <Fatal> BaseDaemon: ########################################
2022.03.21 13:25:10.262828 [ 364 ] {} <Fatal> BaseDaemon: (version 21.3.2.5 (official build), build id: 179BDBBF228667883DFCD900B8CD498272FC044F) (from thread 344) (no query) Received signal Segmentation fault (11)
2022.03.21 13:25:10.264261 [ 364 ] {} <Fatal> BaseDaemon: Address: 0x7f1400007f24 Access: read. Address not mapped to object.
2022.03.21 13:25:10.264305 [ 364 ] {} <Fatal> BaseDaemon: Stack trace: 0xf6063e3 0xf605fd7 0xf6057f6 0xf5d13f5 0xf5cd510 0xf393478 0xf7c05ad 0xf30d849 0xe9cfd96 0xe9cef21 0x8652408 0x86543bf 0x864f9df 0x8653473 0x7f14c0c1bfa3 0x7f14c0b4c4cf -
И дальше очень пожее на простынку из основногог лога
-
сервер создает какую то таблицу таблицы
9. DB::createTableFromAST
потом начинает читать данные
5. DB::MergeTreeData::loadDataParts
у вас что-то с данными
4. DB::MergeTreeData::modifyPartState
проверьте dmesg
диски точно впорядке?
к сожалению по стектрейсу не понять какую именно таблицу пытается читать
как вариант если таблиц не очень много
то переносите файлы из /var/lib/clickhouse/metadata/<ваша_бд>/имя_таблицы.sql
по одной и пытайтесь запустить сервер
как запустится будет понятно что за таблица сломана
дальше пытайтесь эти sql файлы через
clickhouse-client --database=имя_бд < /tmp/имя_таблицы.sql исполнить -
Приветствую, как сделать, чтобы сначала выполнялся WHERE, а только потом обращения к PostgreSQL
К примеру мне нужно взять 100 id'шников из базы PostgreSQL, телефон и т.д, которые упоминаются в таблице clickhouse.
SELECT id, phone FROM postgresql() WHERE id in (SELECT id_user FROM clickhouse_table)
Такой запрос отправляется в PostgreSQL и пытается выгрести всю таблицу, а потом сделать WHERE
Если сделать такой запрос:
SELECT id,phone FROM postgresql() where id in (10,12,15,78842342,123123)
То он не пытается выгрузить, он сразу передаёт запрос с where.
Я попытался через WITH, но не получилось. -
Имеется таблица pg_stats на движке PostgreSQL.
Задача сливать данные из ClickHouse в таблицу PostgreSQL, в агрегированном виде.
Сырые данные в ClickHouse в течение дня пополняются, поэтому записи в PostgreSQL нужно апдейтить при возникновении ON CONFLICT при инсерте.
Вопрос: Есть ли возможность сделать ON CONFLICT DO UPDATE при инсерте в таблицу на движке PostgreSQL из ClickHouse? Или может быть есть какие-нибудь другие решения для такой задачи?
Ниже SQL который хотелось бы чтобы работал:
INSERT INTO pg_stats (
stream_id,
date_day,
request,
response,
show,
click
) SELECT
stream_id,
date_day,
sum(request) as request,
sum(response) as response,
sum(show) as show,
sum(click) as click
FROM stats
GROUP BY stream_id, date_day
ON CONFLICT (stream_id, date_day) DO UPDATE
SET
request = request + sum(request),
response = response + sum(response),
show = show + sum(show),
click = click + sum(click); -
dmesg на диски/контроллер не жалуется
zpool scrub завершился успешно
Меня смущает то, что с тем же таймстемпом оно таки говорит Application: Failed mlock: errno: 12, strerror: Cannot allocate memory.
Сделал клона, клон стартует нормально.
Таблица ровно одна в default базе -
Всех приветствую, подскажите как сделать двойной перебор вложенных массивов Array(Array(Int16))?
что-то типа:
WITH [[-1,2,-3],[-4,5,6]] as d_arr
SELECT
arrayFilter( (for y in d_arr) -> y > 0,
d_arr) as res_arr
arrayJoin - не предлагать -
А тебе обязательно сохранить вложенность массивов?
-
да
-
Ну можно тогда сделать arrayMap + arrayFilter внутри него, но это не очень эффективно
-
map?
-
map к сожалению не получится. Я немног оупросил пример, на самом деле там вот такой массив: Array(Tuple( String, String, Array(Tuple( Nullable(String), Nullable(String), Nullable(String)))))
как вы видите мне нужно перебирать вложенный массив -
В смысле не получится? Тебе нужно мутировать список, в котором лежат списки. Суть мутации - фильтрация вложенных списков.
map
(\subArray -> filter predicate subArray)
arrayWithSubArrays -
при чтении какого то парта в /var/lib/clickhouse/data/default/table/
происходит косяк -
Список, вложенный в кортеж из списков?
-
-
Это не небольшое упрощение, это буквально две разные задачи.
Но тут надо брать напрямую через мап по основному списку обращаться к элементу кортежа и его фильтровать с предикатом -
Что-то вроде:
map
(\tuple ->
filter
predicate
(getArrayFromTuple tuple)
)
arrayWithTupleWithArray -
для кого, роли или юзера?
-
вот что-то не так делаю
JSONExtract(_airbyte_data, 'changelog', 'histories',
'Array(
Tuple(
author String,
created String,
items Array(
Tuple(
field Nullable(String),
fromString Nullable(String),
toString Nullable(String) ))))') as histories,
arrayMap( (x) ->
Tuple(
author x.author,
created x.created,
items arrayFilter( (y) ->
y.field = 'status',
x.items)),
histories) as res_arr -
целиком :) для всех партиций
-
всем привет, такой вопрос хочу в питоне делать так чтобы записи поадали в табличку кх, но для этого её надо создать, как на каждом этапе проверять есть ли эта табличка и если нет (для первой итерации) то создать?
-
Сложно читать и тем более синтаксический разбор делать - не работал с этим в клике. Это паттерн матчинг такой? Логически ход мысли правильный
-
типа того,
ок, очевидно это слишком наверченно, нужно упростить всё. Потом фиг разберёшься, если сломается -
либо заглянуть в system.tables, либо CREATE TABLE IF NOT EXISTS
-
А что вообще в этом json'е нужно? Почему не распарить его в строчки и со столбиками отдельно работать?
-
это changelog жиротаски. Хотел сделать массив изменения статусов таски. Гранулярность таблицы: таска. Не хотелось делать лишние развороты в строки. Т.к. это будет уже другая размерность (хотя можно через cte оформить и потом приджойнить по ключу таски)
-
Зарядка для мозку ⚡️⚡️⚡️
Цікавий канал для тих хто любить перевірити свої знання ,та для розвитку вашого інтелекту @Y_o_u_BOX та до менеджера @Kapitan_dopomoga
-
Привет. Вопрос про clickhouse-copier
Есть у меня кластер 1 реплика 4 шарда
Хочу сделать 2 реплики 2 шарда, параллельно для новых таблиц поменяв сторадж полиси и указав TTL вытеснения на медленный сторадж
Сделал новую таблицу table_new ReplicatedMergeTree и дистрибьютед для нее distributed_table_new
Для относительно мелких таблиц (десятки Гб) делал insert into distributed_table_new from select distributed_table_old , в принципе все проходило успешно, потом подливал данные которые успели записаться в старую (по дате) и переименовывал дистрбьютед таблицы чтобы запросы смотрели в "новые" данные
На больших таблицах (5-10Тб) этот способ не очень хорош, так как тянет все данные на один из 4 серверов и потом раскидывает обратно. Можно было бы как-то пережить, но есть еще таймауты и разрывы соединения, так что insert from select через какое-то время обрывается с ошибками
Вот как раз для этого придумали clickhouse-copier подумал я. Сделал таску и ... сутки стоит вынимая список партишнов и копирование не начинается
Checking shard N1 (having a replica 1.1.1.1:9000, pull table store.keywords of cluster keywords for partition (201911,'gb','iphone') piece 2 existence, executing query:
SELECT 1 FROM _local.`.read_shard_0.cluster.store.keywords_new` WHERE ((toYYYYMM(date), location, type) = ((201911,'gb','iphone') AS partition_key)) AND (cityHash64(`id`, `keyword`, `date`) % 3 = 2 ) LIMIT 1
Partition (202002,'de','iphone') piece number 0 is PRESENT on shard N4 (having a replica 1.1.1.1:9000, pull table store.keywords of cluster keywords
Ранее не пользовался копиром, не понятно почему так долго. Это нормально?
Перенес копиром табличку поменьше, Checking прошел естественно намного быстрее и данные скопировались
Сутки на Checking shard для таблицы мне кажется очень много. Или это нормально? А сколько в таком случае копирование займет? Или я делаю что-то не так? rsync-ом я за сутки-полтора весь клихаус переливал -
Всем привет, всегда удалял бекапы с помощью rm. А тут вот чего завезли. https://github.com/ClickHouse/ClickHouse/pull/21142
Может кто подсказать что значит 'propely' в этом контексте?Add ALTER TABLE UNFREEZE command. by Jokser · Pull Request #21142 · ClickHouse/ClickHouseI hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en Changelog category (leave one): New Feature Changelog entry (a user-readable short description of the cha...
-
-
я по простому, без имен:
with [('a1','c1',[('f11','fs11','ts11'),('status','fs12','ts12')]),('a2','c2',[('f21','fs21','ts21'),('fs22','fs22','ts22')])] as data
select arrayFilter(z->length(z.3) > 0, arrayMap( x -> (x.1,x.2, arrayFilter(y->y.1 = 'status',x.3)), data)); -
А новое странное поведение cli в новом кликхаусе (22.3) это баг или фича?
В частности — копипаста многострочных sql запросов ломает отображение,
enter теперь переносит курсор на новую строку, вместо того чтобы разделить запрос на две части как бы (приглашение :-] больше не появляется) -
Всем привет, как узнать от какой кафка таблицы летят ошибки, если в самой ошибке нет этой информации?
2022.03.22 12:30:23.723911 [ 91395 ] {} <Error> void DB::StorageKafka::threadFunc(): Code: 72, e.displayText() = DB::Exception: Unsigned type must not contain '-' symbol: (while read the value of key age): (at row 1)
, Stack trace (when copying this message, always include the lines below):
0. Poco::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0x18bbe140 in /usr/bin/clickhouse
1. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) @ 0xe61432d in /usr/bin/clickhouse
2. void DB::readIntTextImpl<char8_t, void, (DB::ReadIntTextCheckOverflow)0>(char8_t&, DB::ReadBuffer&) @ 0x1553f705 in /usr/bin/clickhouse
3. DB::DataTypeNumberBase<char8_t>::deserializeTextJSON(DB::IColumn&, DB::ReadBuffer&, DB::FormatSettings const&) const @ 0x1554acf0 in /usr/bin/clickhouse
4. DB::JSONEachRowRowInputFormat::readField(unsigned long, std::__1::vector<COW<DB::IColumn>::mutable_ptr<DB::IColumn>, std::__1::allocator<COW<DB::IColumn>::mutable_ptr<DB::IColumn> > >&) @ 0x163b795e in /usr/bin/clickhouse
5. DB::JSONEachRowRowInputFormat::readJSONObject(std::__1::vector<COW<DB::IColumn>::mutable_ptr<DB::IColumn>, std::__1::allocator<COW<DB::IColumn>::mutable_ptr<DB::IColumn> > >&) @ 0x163b7b91 in /usr/bin/clickhouse
6. DB::JSONEachRowRowInputFormat::readRow(std::__1::vector<COW<DB::IColumn>::mutable_ptr<DB::IColumn>, std::__1::allocator<COW<DB::IColumn>::mutable_ptr<DB::IColumn> > >&, DB::RowReadExtension&) @ 0x163b8bc6 in /usr/bin/clickhouse
7. DB::IRowInputFormat::generate() @ 0x16358b21 in /usr/bin/clickhouse
8. DB::ISource::work() @ 0x162d477b in /usr/bin/clickhouse
9. ? @ 0x15f2534d in /usr/bin/clickhouse
10. DB::KafkaBlockInputStream::readImpl() @ 0x15f264b4 in /usr/bin/clickhouse
11. DB::IBlockInputStream::read() @ 0x1546d29d in /usr/bin/clickhouse
12. DB::copyData(DB::IBlockInputStream&, DB::IBlockOutputStream&, std::__1::atomic<bool>*) @ 0x1549022e in /usr/bin/clickhouse
13. DB::StorageKafka::streamToViews() @ 0x15f005b7 in /usr/bin/clickhouse
14. DB::StorageKafka::threadFunc() @ 0x15f01049 in /usr/bin/clickhouse
15. DB::BackgroundSchedulePoolTaskInfo::execute() @ 0x15623cf9 in /usr/bin/clickhouse
16. DB::BackgroundSchedulePool::threadFunction() @ 0x15624182 in /usr/bin/clickhouse
17. ? @ 0x156242b2 in /usr/bin/clickhouse
18. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0xe641b47 in /usr/bin/clickhouse
19. ? @ 0xe640093 in /usr/bin/clickhouse
20. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so
21. clone @ 0xfe8dd in /usr/lib64/libc-2.17.so
(version 20.8.7.15 (official build)) -
Коллеги, добрый день! Проясните, пожалуйста, момент. Иногда в кликхаус клиенте запускаю какой-нить запрос с несколькими полями для поиска, да ещё и с регулярками, и случается такая вот ситуация: ставлю лимит на выдачу например 100 строк, запрос начинает отрабатывать и уже вывел мне нужный результат, но какое-то время (несколько секунд) на чём-то раздупляется, никакой активности не происходит, но управление ещё не возвращено. несколько секунд проходит и без добавление чего бы то ни было к выдаче скрипт завершает работу и возвращает мне управление. У кого были похожие ситуации и кто разобрался, с чем такие "зависания" связаны?
-
clickhouse-client зависает?
-
выглядит как будто да, но по факту скорее всего он что-то "досчитывает"
-
т.е. я могу его прервать и всё ок
-
-
можно узнать комментарий по монге?
-
привет. не подскажете, как ограничить количество активных запросов от одного юзера?
-
возможно есть более изящный вариант, но можно сдвинуть точку отсчёта и просто прибавить к каждой дате интервал в 100 лет )
-
А по другому никак. 1970 - минимальный год )
-
не для datetime64 (там 1925)
-
Да, но все равно приведение вернет -65535.
Но с интервалом прокатит
select dateDiff('day', cast ('1969-12-31' as DateTime64)+interval 10 year, cast('1970-01-01' as DateTime64)+interval 10 year)
вернет 1 -
с 10 годами есть вероятность сдвинуться между годами високосными, так что может выдать неправильный результат для других дат
-
Большое спасибо, все работает
-
подскажите, а JSON_QUERY поддерживает фильтрацию?
судя по документации самого JSON_QUERY синтаксис должен выглядеть как-то так:
JSON_QUERY(jsonex, '$.histories[*].items[*][?field==`status`]') as items
но так не работает.
———пример———--
with '{"histories": [
{
"items": [
{
"field": "Story Points",
"fieldtype": "custom"
}
]
},
{
"items": [
{
"field": "resolution",
"fieldtype": "jira"
},
{
"field": "status",
"fieldtype": "jira"
}
]
}
]}' as jsonex
SELECT
JSON_QUERY(jsonex, '$.histories[*].items[*][?field==`status`]') as items -
Подскажите пжл, можно ли как-то использовать макросы при выполнении распределённого DDL?
Например, вместо
CREATE DATABASE test ON CLUSTER my_cluster_name;
хотелось бы написать что-то вроде
CREATE DATABASE test ON CLUSTER {cluster}; -
CREATE DATABASE test ON CLUSTER ‘{cluster}’;
-
привет, подскажите пожалуйста, как лучше решить задачу?
Есть табличка, где 2 столбца домен и дата размещения. Домены могут повторяться, нужно добавить столбец, где ставить 1, если ранее этот домен не появлялся и 0 если домен уже был ранее. За одну дату может быть несколько раз встрачаться один домен, нужно поставить 1 только у одного -
сделать вьюху с row_number over (partition by domain order by publucationDate)
и создать вторую колонку, которая равна 1, если этот row_number равен 1
только тут перформанс придется смотреть, как быстро на лету сможет такая колонка считаться -
-
пока решил так, насколько это коряво?
with t as (select
domain (link) d,
arraySort(groupArray((publicashionDate, title, category, link))) ardata
from MedialogyRaw mr
group by d)
select
d,
if(num=1,1,0) as firstAccurience,
ardata[num].1 publicashionDate,
ardata[num].2 title,
ardata[num].3 category,
ardata[num].4 link
FROM t
array join arrayEnumerate (ardata) as num
order by publicashionDate -
Можно к секундам привести 2 даты и вычесть
-
как посчитать разницу между элементами в массиве Date/DateTime?
with today() as today,
yesterday() as yesterday,
[today, yesterday] as arr
select arrayDifference(arr) -
with today() as today,
yesterday() as yesterday,
[today, yesterday] as arr
select arrayDifference(arrayMap(x -> toUInt64(x), arr)) -
-
Всем привет! А как кто выкручивается для хранения дат в CH? Допустим, нужно хранить дату рождения. При этом иногда попадаются долгожители, которым 100 и даже более лет. Минимальная дата в CH - это 1925-01-01 (для типа Date32). Ждать, пока умрут долгожители - не вариант. Хранить в числовом виде практически бесполезно, так как при преобразовании опять упремся в ограниченный по низу диапазон. Остается только хранить в виде текста? Но в этом случае будет сложно посчитать, например, возраст или вообще произвести какие-либо расчеты с использованием таких дат.
-
Смотря что вы планируете считать, можно разделить дату на столбцы год, месяц, день. Можно хранить целочисленно в виде 19050131. Можно хранить дельту до 1970-01-01.
-
Например, нужно посчитать возраст. Также могут понадобиться разбивки людей по годам и месяцам, например. Или нужно посчитать всех, у кого через неделю день рождения. В общем во всех случаях посчитать можно и через пользовательскую функцию, но очень жаль, что штатные функции становятся бесполезными. Единственный простой вариант - хранение дат с добавлением 1 столетия. Это легко считается и обеспечивает корректность високосных лет.
-
Нахрена тут этот офтоп?
-
Сорри не туда бросил. Спасибо.
-
-
-
Так удалил же, не?
-
-
-
-
Похоже нужно админа на помощь звать :) @miptgirl удали плиз не релевантный контент
-
Я не вижу его сообщения
-
Я не вижу. Значит, удалил.
-
есть таблица table1 2 реплики 2 шарда и дистрибьютед таблица d1 которая "смотрит" в эти таблички
делаю копирование через clickhouse-copier из table1 в table2 тоже 2 реплики 2 шарда, прямо на этих же нодах
дистрибьютед таблица d2 смотрит в таблицы table2
select count() from d1 выдает одну цифру, например 64000000
select count() from d2 выдает , например 59000000
дропаю table2 on cluster и повторяю процедуру
select count() from d2 выдает 63000000 (снова не 64000000)
дропаю table2 on cluster и повторяю процедуру
select count() from d2 выдает 58000000 (снова не 64000000)
это нормальная ситуация , не должно быть воспроизводимости? или зависит от данных? -
- 23 March 2022 (113 messages)
-
Константин, настройку в users.xml добавлял. Без изменений..(
-
Ребят а greenplum и vertica это же тоже МРР системы, но почему кликхаус всё равно быстрее в определённых местах?
-
просто заморочились с производительностью больше для основных кейсов, больше чем с функционалом
ну например LZ4 сжатие в clickhouse свое
сканирование String через Intel Vector - лучший на рынке движок
много где старались сделать через SSE
конвейер запуска переписали
попробовали два разных подхода к SQL парсерам (парсер ANTLR вроде непонятно жив или нет сейчас)
каркас в MergeTree действительно хорош и его стараются улучшить в 22.3 например улучшили скорость вставки за счет умной сортировки
и в чем то clickhouse той же вертике может проигрывать -
А какие у кликхауса основные минусы?
-
с чем сранивать если. если с big query то в том что это нужно самим поднимать базу и масштабировать руками
-
Ну сравнивать с гринпламом тем же например
-
У Greenplum ущербная архитектура поверх постгреса. С кликхаусом по скорости только вертика может конкурировать, да и то не всегда. Но по удобности для "конечного пользователя" , кликхаусу еще очень даже есть куда рости
-
-
Как-нибудь можно использовать словарь cache для PostgreSQL ? https://clickhouse.com/docs/ru/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-layout/#cacheХранение словарей в памяти | Документация ClickHouse
Хранение словарей в памяти Словари можно размещать в памяти множеством способов. Рекомендуем flat, hashed и complex_key_
-
Привет. Я обновил jdbc драйвер.
-
да вот не помогло. странно что http тоже отвалился
-
привет
https://play.clickhouse.com/?file=welcome планируют вернуть к жизни? -
-
А можно раскрыть тезис про ущербную архитектуру гринплама поверх постгреса?
-
sudo apt-get install -y apt-transport-https ca-certificates dirmngr
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754
echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \
/etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
sudo apt-get install -y clickhouse-server
Потому что вам нужно сделать вот так вот -
Ошибки почему-то. Не подскажете как быть?
-
Это зависит только от архитектуры? Тоесть почему именно кликхаус быстрее гринплама, а вертика почти такая же по скорости не очень понимаю
-
Introduction to Greenplum Architecture
This is the first article of the Greenplum Kernel series. There are a total of ten articles in this series, which will explain in depth the different modules of Greenplum. Today I’m going to …
-
В первую очередь от системы хранения. Кликхаус и Вертика изначально разрабатывались как column store снизу до верху. И сразу оптимизировались для колоночного хранения. А гринпламовцам пришлось эмулировать column store средствами постргеса — в первых версиях они вообще только row-store поддерживали.
-
Собственно, там прям даже выделено в статье, которую я прислал:
Greenplum is an open source distributed database based on Postgres. From the topological structure, it is a database cluster composed of stand-alone Postgres. -
Привет, а что с repo.clickhouse.tech? Он не отвечает, а у нас на нем завязано многое. Я вижу что в документации поменяли на .com, но сделайте хотя бы переадресацию :(
-
user=play надо добавлять в запрос
-
Ну гринплам изначально создавался как mpp система (поддерживающая редистрибуцию датасетов во время исполнения), чего в КХ нет до сих пор.
Касательно эмуляции column store - тут не понятно, что вы имеете в виду. Колоночное расположение данных таблиц в гп реализовано физически как отдельная опция хранения. Единственное только, экзекъютор унаследован от постгреса и работает только со строками - почему ГП тормозит по сравнению с той же Вертикой. Но технически добавить векторный экзекъютор в ГП (или встроить какие-то его элементы) не представляется невозможным - вопрос в ресурсах на такой сдвиг, ибо править придётся ещё и планировщики, которых у гринплама два и оба cost-based.
Т.е. можно заключить, что Гринплам не нативная column store СУБД, но про ущербность всей архитектуры в целом я бы не говорил, ибо не всё завязывается на эффективную обработку колонок. -
+1
-
Спасибо за развернутый ответ. Но вопрос топик стартера был не про колонки, а про MPP. Как сейчас MPP реализовано в гринплюм, учитывая указанные выше ограничения, пришедшие от постгреса?
В КХ MPP в рамках одного сервера работает через чтение отдельных партов разными ядрами с финальным мерджем. Без лишнего оверхида на редистрибуцию данных. -
спасибо
-
Извиняюсь, но я не увидел ни в треде, ни в статье по ссылке никакую критику в адрес постгреса со стороны MPP реализации гринплама. В целом, в статье неплохо объясняется, как происходит параллельный процессинг в гринпламе: общий план разбивается на части (слайсы), которые взаимодействуют между собой через узлы редистрибуции плана, каждый слайс выполняется в отдельном воркере на сегментах (шардах) и на координирующей ноде. Единственное, процесс генерации распределённого плана на постгресовом оптимизаторе кмк не совсем структурированный. Зато в другом планировщике ORCA это сделано по науке - как property enforcement стадия поверх memo структуры альтернатив физического локального плана.
> В КХ MPP в рамках одного сервера работает через чтение отдельных партов разными ядрами с финальным мерджем. Без лишнего оверхида на редистрибуцию данных.
Редистрибуция между сегментами нужна, если джоин (или group by) у нас происходит не по ключу джоина (или group by), чтобы добиться параллельности на сегментах и при этих операциях. В простейшем случае, конечно, вся дистрибуция сводится к заливке датасетов на координирующий узел и завершению операций там. -
Как установить источник данных PostgreSQL для словаря типа cache ?
-
Добрый день
собственно вопрос
у нас было 3 реплики кликхауса в шарде ... надо сделать 2
1 реплику выключили
на 2х других в конфигах прописали что теперь их 2
но смотрим в таблицу system.replicas и там все равно показывается что их 3
что нужно еще сделать чтобы они забыли про третью реплику ? -
правильно было дропать ReplicatedMT на той 3-й реплике сначала
теперь придется удалять её из ЗК -
ну в теории мы ее можем запустить
-
а что значит дропнуть ReplicatedMT ?
-
все таблицы дропать котоыре реплицируются ?
-
просто их больше млн ..... как-то шибко муторно
-
drop table table1; (На 3-й реплике)
-
да
-
Alexey Milovidov in ClickHouse не тормозит
Если какой-то сервер исчез и не будет восстановлен, то запись о реплике потребуется удалить из ZK самостоятельно.
-
жжжесть
-
-
как то не админфрендли (
-
-
это нормально. описание кластера может не совпадать на хостах, может случится беда, если нечаянно неверно сконфигурировать... а так - бронебойно. не сломать.
-
SYSTEM DROP REPLICA
-
а да ) виноват...
-
ну с одной стороны согласен, с другой стороны сейчас тратить на это кучку времени чтобы написать скрипт и кучу таблиц задропать .... причем в данной ситуации тоже ни как нельзя ошибится ... а то можно и косячнуть ... подцепится не к той реплике по случайке и т.д.
-
оопа
-
-
спасибо добр ты челвоек
-
самое забавное что я страницу где есть описание этой ыункции 5 раз пересмотрел и в упор не увидел ...
-
это аж 1.5 года как есть с 20.5 оказывается, надо обновлять "методички"...
-
+1
-
я один или https://clickhouse.com/ лёг?ClickHouse - Fast Open-Source OLAP DBMS
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
вы один
-
спасибо, буду разбираться, в какой-то список попало наверно
-
-
Привет! Тестирую функцию s3Cluster на all-replicas кластере (1 шард, 3 реплики), в логах вижу, что запрос исполняется только на initiator ноде, так должно быть, или я что-то делаю неправильно?
Запрос, который я выполняю:
INSERT INTO <null_engine_table> SELECT * FROM s3Cluster('all-replicas', ...) -
https://t.me/clickhouse_ru/262131
так вот же, должно сработать...Alexander Zaitsev in ClickHouse не тормозитSYSTEM DROP REPLICA
-
если таблица сама есть, просто DROP TABLE xxx; (он чистит ЗК за собой)
-
-
Коллеги, здравствуйте, как сделать в clickhouse? Дан массив чисел [2,5,1,4,9]. На выходе должен массив быть отсортирован + сохранен индекс элемента в старом массиве
На входе
[2,5,1,4,9]
На выходе
[[9,4], [5,1], [4,3],[2,0],[1,2]] -
Да. там есть проблемы с INSERT INTO SELECT * FROM s3Cluster
Вот ту мы их обходили
https://altinity.com/blog/loading-100b-rows-in-minutes-in-altinity-cloudLoading 100B rows in minutes in Altinity.CloudInspired by SingleStore research, this benchmark shows how to scale data loading from S3 to a ClickHouse cluster and load 100B rows dataset in just 4 minutes.
-
SELECT
[2, 5, 1, 4, 9] AS arr,
arrayZip(arr, range(length(arr))) AS res,
arrayReverseSort(x -> (x.1), res) AS d
Query id: bca85383-a86b-45bf-aabc-c481e4a1fc8d
┌─arr─────────┬─res─────────────────────────────┬─d───────────────────────────────┐
│ [2,5,1,4,9] │ [(2,0),(5,1),(1,2),(4,3),(9,4)] │ [(9,4),(5,1),(4,3),(2,0),(1,2)] │
└─────────────┴─────────────────────────────────┴─────────────────────────────────┘ -
спасибо большое проверю
-
Коллеги, добрый день, а есть ли способ с помощью clickhouse-local создавать файлы для native формата чтобы потом их быстрее загружать на сам сервер? (то есть по сути конвертировать из одного формата в native через clickhouse-local)?
-
DROP TABLE xxx SYNC вроде как чтобы сразу ЗК почистило, без SYNC данные в ЗК останутся
-
Добрый день, подскажите по поводу поведения команды ATTACH PARTITION.
Допустим, есть таблица, сначала выполнил команду DETACH PARTITION 20220323 (текущий день). При этом данные в эту таблицу продолжают писаться => создается новая attached партиция 20220323.
Когда я выполню команду ATTACH PARTITION 20220323, то данные в таблице перезатрутся или объединятся?
Спасибо! -
attach partition - объединить
replace partition - заменить -
спасибо!
-
https://kb.altinity.com/altinity-kb-setup-and-maintenance/precreate_parts_using_clickhouse_local.sh/
Не совсем оно, но идею можно использоватьPrecreate parts using clickhouse-localPrecreate parts using clickhouse-local.
-
добрый день
на сервере на одной из реплик остановился СН
последние ошибки в журнале ошибок от вчерашнего дня: что-то там про то, что не может закоммитить смещение в кафку (на этой реплике идёт чтение из кафки, возможно, вчера были проблемы с кафкой, сейчас вроде всё ок)
попытка рестарта кончается неудачно:
systemctl status clickhouse-server
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: exit-code) since Wed 2022-03-23 15:06:43 MSK; 3s ago
Process: 5630 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.pid (code=exited, status=233/RUNTIME_DIRECTORY)
Main PID: 5630 (code=exited, status=233/RUNTIME_DIRECTORY)
при этом в журнале ошибок новых сообщений не появляется. в обычном журнале тоже
как провести диагностику проблемы, куда копать? -
"отмонтировался" диск с данными
-
Кроме всего прочего, что написали, в ГП больше уделяется внимания консистентности - синхронная wal-репликация и т.п.
-
привет
пытаюсь из логс апи залить данные в ch
интересует вопрос настройки атрибуции - https://yandex.ru/dev/metrika/doc/api2/logs/param.html
это актуальная дока? пробовал различные типы написания - каждый раз скрипт валится с ошибкой (без задротства с атрибуцией все отрабатывает норм)Параметризация. Справочник разработчикаLogs API Метрики поддерживает механизм задания параметров — параметризацию. Возможность доступна для большинства полей.
-
Всем здравия желаю!
Есть таблица системная с перечнем всех функций system.functions
А нет ли возможности получить не только перечень, но и список параметров функции ? -
-
А попробуйте может привести к decimal ? и тогда вроде всегда будет указываться определённое количество чисел https://clickhouse.com/docs/ru/sql-reference/data-types/decimal/Decimal | Документация ClickHouse
Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S), Decimal256(S) Знаковые дробные числа с сохранением точности оп
-
мне нужно ещё слева нолики дописать(
-
Всем привет.
Сегодня столкнулся с непонятной ситуацией.
Есть подзапрос (не важно какой, он в экран не влезает) который прекрасно работает, но как только оборачивается в select COUNT(*) from (subquery) падает с ошибкой: Not found column sample_id in block
Я не понимаю, что ему нужно. Подзапрос рабочий, почему он просто не может посчитать кол-во строк из подзапроса? -
lpad/rpad
-
select * from subquery - там точно есть столбец sample_id в перечне?
-
да:
```
select COUNT(*) FROM (
SELECT *
FROM (SELECT "id",
"cpra",
"sample_id",
``` -
у вас join таблиц, скорей всего и совпадают столбцы из-за этого их нету
-
Это не ответ ) Надо сделать select * и посмотреть на итоговые имена столбцов, иначе будет как Константин написал, совпадение столбцов.
-
-
перепишите запрос, чтобы все подзапросы select были отдельными CTE выражениями через WITH, так же проще отладку проводить, можно каждый промежуточный результат отслеживать. Когда куча select from (select from (select from..))) - это же ужас для отладки )
-
Полностью согласен. Данная портянка генерируется через питон (pypika) и там все по уму.
Просто для меня странно, что я не могу подсунуть все, что угодно в подзапрос для select count(*). Первый раз в подобной ситуации) -
ну тут скорее всего именно подмена имен столбцов и итоговый результат непредсказуем...
-
всем добрый день
может кто-то подсказать, может я не так что-то понимаю
у меня есть задача, при каждой вставке в таблицу с сырыми данными обновлять материализованное представление данными, формируемыми запросом с большим кол-вом аггрегаций
пробовал использовать движки aggregationMergeTree и ReplacingMergeTree, но есть ощущение, что данные, которые вставляются в mv формируются запросом на основе того единственного инсерта, который пришел, а не всего, что есть в таблице, из которой селектим -
матвью обновляется по факту нечто вроде триггера after insert, так что да, на основе инсерта, что пришел.
-
поэтому если была какая то агрегация, то она "добавится" к mv, а не пересчитается все то, что было ДО.
-
а если мне надо с каждым инсертом брать все, что вот теперь есть в таблице, можно ли такое реализовать?
или это проще обычную вьюху завести -
тогда проще обычную вьюху, если она быстро отбирает данные агрегированные..
-
вечно она не будет отбирать их быстро
нет ли способа в кх с каждым инсертом брать новые данные и где-то их складировать в уже готовом виде? -
Обычно после этого видео нету вопросов про MV https://www.youtube.com/watch?v=1LVJ_WcLgF8&list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ&t=7597s
-
Ну с каждым инсертом это жестоко же )
-
ага классный видос!
-
А если их 50 000 за минуту? :)
-
да, тут проблема есть, я согласен
-
скорее хочу саму задачу обозначить
-
нежели продвинуть именно это решение
-
Проще тогда сделать вьюху и над ней dictionary, если данных немного, и поставить время обновления раз в N минут... Все зависит от задачи и необходимости видеть реальные данные.
-
понял, спасибо
-
Всем привет! Скажите, пожалуйста, почему запрос все равно выдает значения с шагом в одну секунду а не 18000 секунд? (ClickHouse 22.3.2.1)
# timestamp Int64 -- unix timestamp
SELECT timestamp, count() FROM table_name
GROUP BY timestamp
ORDER BY timestamp WITH FILL STEP 18000; -
видимо, потому что там есть такие времена с шагом в одну секунду. with fill добавляет значения, если их нет, но не группирует имеющиеся. Если надо шаг крупнее имеющегося в таблице, то надо сам timestamp преобразовывать в нужные значения
-
-
Добрый день. Подскажите, пожалуйста, как написать условие запроса, чтобы serviceId=1?