Size: a a a

ClickHouse не тормозит

2020 June 22

AT

Al T in ClickHouse не тормозит
Dj
naming convention guru =)
правильно было dzhoin
источник
2020 June 23

DC

Denny Crane (I don't... in ClickHouse не тормозит
мне просто было лень писать distributed
источник

AR

Alexander Ryzhenko in ClickHouse не тормозит
Есть схема
Table1 (A1, A2, A3)
Table 2 (Nullable(A1), Nullable(A2), Nullable(A3), Nullable(A4), Nullable(A5), ...)
Materialized View MV TO Table2 AS select A1, A2, A3 from Table 1

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

Cannot find column `A4` in source stream: while pushing to view MV (version 19.15.3.6 (official build))

Есть
ли какая-то настройка, которая влияет на такое поведение& (подразумеваю, что если не указывать nullable поля, то они должны быть null )
источник

FW

Fuzzi Wuzzi in ClickHouse не тормозит
Добрый день. У меня есть таблица с вложенной структурой (Nested).  Движок kafka, формат сообщений protobuf. Появляется ошибка о том, что у двух массивов разные длины из-за чего нельзя вставить их в таблицу. Можно ли просмотреть полностью запрос которым он пытается вставить эти данные в таблицу? Т.к. данные которые уходят в кафку корректные и я  не пойму, где ошибка.
источник

D

Dj in ClickHouse не тормозит
Alexander Ryzhenko
Есть схема
Table1 (A1, A2, A3)
Table 2 (Nullable(A1), Nullable(A2), Nullable(A3), Nullable(A4), Nullable(A5), ...)
Materialized View MV TO Table2 AS select A1, A2, A3 from Table 1

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

Cannot find column `A4` in source stream: while pushing to view MV (version 19.15.3.6 (official build))

Есть
ли какая-то настройка, которая влияет на такое поведение& (подразумеваю, что если не указывать nullable поля, то они должны быть null )
Если выражение для значения по умолчанию не указано, то в качестве значений по умолчанию будут использоваться нули для чисел, пустые строки для строк, пустые массивы для массивов, а также 0000-00-00 для дат и 0000-00-00 00:00:00 для дат с временем. NULL-ы не поддерживаются.
https://clickhouse.tech/docs/ru/sql-reference/statements/create/

а вообще сделайте  AS select A1, A2, A3,null, null from Table 1
источник

D

Dj in ClickHouse не тормозит
ih-tam-net
источник

VT

Vladimir Tretyakov in ClickHouse не тормозит
Добрый день.
Добрались потестить LowCardinality

Взяли 2 версии нашей таблицы

1.
CREATE TABLE default.OriginalMetrics (`appId` UInt32, `metricId` UInt32, `timestamp` UInt32, `value` Float64, `tags.name` Array(UInt32), `tags.value` Array(UInt32), `savedTimestamp` UInt32 DEFAULT toUInt32(now()) CODEC(DoubleDelta)) ENGINE = ReplicatedMergeTree('/clickhouse/tables/metrics/shard1/OriginalMetrics', 'replica1') PARTITION BY floor(timestamp / 86400) ORDER BY (appId, metricId, timestamp) SETTINGS index_granularity = 8192;


Эти значения UInt32 но в другой подсистеме есть маппинг String -> UInt32 (вместо строк в КХ храним инты для экономии места и скорости запросов)
metricId UInt32
tags.name Array(UInt32)
tags.value Array(UInt32)


2.
CREATE TABLE default.MetricsLowCardinality (`appId` UInt32, `metricId` LowCardinality(String), `timestamp` UInt32, `value` Float64, `tags.name` Array(LowCardinality(String)), `tags.value` Array(LowCardinality(String)), `savedTimestamp` UInt32 DEFAULT toUInt32(now()) CODEC(DoubleDelta)) ENGINE = ReplicatedMergeTree('/clickhouse/tables/metrics/shard1/MetricsLowCardinality', 'replica1') PARTITION BY floor(timestamp / 86400) ORDER BY (appId, metricId, timestamp) SETTINGS index_granularity = 8192;



Решили попробовать без нашего внешнего маппинга


metricId LowCardinality(String)  
tags.name Array(LowCardinality(String))
tags.value Array(LowCardinality(String)),

Что получилось?

1. По месту на диске с LowCardinality есть даже выигрыш в 8-10%, круто.

2. А вот по скорости запросов просадка в 2 раза где-то.


Запросы вида

Наш маппинг
select * from OriginalMetrics where tags.value[indexOf(tags.name, 3)]=4 or tags.value[indexOf(tags.name, 25)]=6 or tags.value[indexOf(tags.name, 6)]=7 or tags.value[indexOf(tags.name, 7)]=8  or tags.value[indexOf(tags.name, 8)]=9;

localhost:9000, queries 8159, QPS: 195.443, RPS: 27743076.974, MiB/s: 1147.484, result RPS: 0.000, result MiB/s: 0.000.

LowCardinality

select * from MetricsLowCardinality where tags.value[indexOf(tags.name, '3')]='4' or tags.value[indexOf(tags.name, '25')]='6' or tags.value[indexOf(tags.name,' 6')]='7' or tags.value[indexOf(tags.name, '7')]='8'  or tags.value[indexOf(tags.name, '8')]='9';


localhost:9000, queries 7874, QPS: 90.795, RPS: 10249710.351, MiB/s: 225.113, result RPS: 0.000, result MiB/s: 0.000.



Как я понимаю LowCardinality внитри работает как и наш маппинг, где-то внутри партиции храниться словарь

Почему работает в 2 раза медленнее? Может материализация Стринги происходит перед выполнением where? В некоторых случаях наверное можно этого избежать?
Как ускорить? Или скорости которая у нас с нашим маппингом все равно не достичь?
источник

AK

Alexey Kostarev in ClickHouse не тормозит
Добрый день, коллеги!
Создал внешний словарь
<yandex>
 <dictionary>
     <structure>
         <id>
             <name>id</name>
         </id>
         <attribute>
             <name>name</name>
             <type>String</type>
             <null_value></null_value>
         </attribute>

         <attribute>
             <name>parent_id</name>
             <type>UInt64</type>
             <null_value>0</null_value>
             <hierarchical>true</hierarchical>
         </attribute>
     </structure>
     <source>
       <odbc>
         <db>dw</db>
         <table>dim_exec_state</table>
         <connection_string>DSN=postgresConnection</connection_string>
         <!--invalidate_query>SQL_QUERY</invalidate_query-->
       </odbc>
     </source>

 </dictionary>
</yandex>

При его загрузке в /var/log/clickhouse-server/clickhouse-server.log вижу
Failed to load config file '/etc/clickhouse-server/exec_dictionary.xml': Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Not found: dictionary.name, Stack trace (when copying this message, always include the lines below)
О каком dictionary.name идет речь?
Сама таблица из ClickHouse доступна
SELECT *
FROM odbc('DSN=postgresConnection;Servername=postgres', 'dim_exec_state')

┌─id─┬─name────────────────────────┬─parent_id─┐
│  1 │ На исполнении               │      ᴺᵁᴸᴸ │
│  2 │ На исполнении с нарушением  │         1 │
│  3 │ На исполнении с переносом с │         1 │
│  4 │ На исполнении без нарушени�  │         1 │
│  5 │ Исполнено                   │      ᴺᵁᴸᴸ │
│  6 │ Исполнено с нарушением сро�  │         5 │
│  7 │ Исполнено с переносом срок�  │         5 │
│  8 │ Исполнено без нарушения ср�  │         5 │
└────┴─────────────────────────────┴───────────┘
источник

S

Shazo in ClickHouse не тормозит
источник

AK

Alexey Kostarev in ClickHouse не тормозит
Я не вижу в этом джокументе как указать название словаря...?
источник

S

Shazo in ClickHouse не тормозит
<dictionary>
   <name>dict_name</name>
источник

AK

Alexey Kostarev in ClickHouse не тормозит
Вау
Слона-то я н заметил 😊
источник

VA

Vasilij Abrosimov in ClickHouse не тормозит
Привет!
А есть сценарий, как гигантской таблице подключить политику хранения? В документации написано, что `В данный момент менять политику хранения после создания таблицы нельзя.`
Создавать аналогичную таблицу с политикой и делать вставки из предыдущей? Но это мы полгода провозимся...
источник

DA

Dima Admin in ClickHouse не тормозит
Vasilij Abrosimov
Привет!
А есть сценарий, как гигантской таблице подключить политику хранения? В документации написано, что `В данный момент менять политику хранения после создания таблицы нельзя.`
Создавать аналогичную таблицу с политикой и делать вставки из предыдущей? Но это мы полгода провозимся...
как вариант: можно попробовать детачить куски из старой таблицы, мувать в папку новой таблицы и атачить
источник

Д

Данияр in ClickHouse не тормозит
А размер какой?
источник

VA

Vasilij Abrosimov in ClickHouse не тормозит
4 Tb, если о дисковом.
источник

AK

Alexandr Kondratev in ClickHouse не тормозит
Привет!
Я же правильно понимаю что пример в доке должен выглядеть так:
curl -sS "http://localhost:8123/?param_id=2&param_phrase=test" -d "SELECT * FROM table WHERE int_column = {id:UInt8} and string_column = {phrase:String}"
?
источник

AR

Alexander Ryzhenko in ClickHouse не тормозит
Подскажите еще такое.

Хотим обновить КХ на проде до самой последней стабильной.

Есть v20.4.5.36-stable 13 дней назад и
v20.1.14.107-stable 12 дней назад

Где можно посмотреть различия между версиями?
А еще есть LTS - в чем профит использование версии ниже, но LTS?
источник

Д

Данияр in ClickHouse не тормозит
Есть в CH документация о работе ключа шардирования?  Какие бывают ключи и как он распределяет?
источник

AK

Alex Krash in ClickHouse не тормозит
Данияр
Есть в CH документация о работе ключа шардирования?  Какие бывают ключи и как он распределяет?
магии нет - остаток от деления значения хеша на число шардов даёт номер шарда ;)
источник