
Tima
26.09.2017
13:06:58
optimaze запускает неочередной раунд фонового слияния. который сливает парты (или не сливает). Я экспериментировал на таблице в 1кк записей, вливая по несколько сотен изменений (пар изменений). Запуск optimaze не помог

Vladimir
26.09.2017
13:07:04
Но хочется подтверждения экспертов

Nikolai
26.09.2017
13:08:37

Google

Vladimir
26.09.2017
13:08:41
Очень жаль, думал нашёл решение..

Дмитрий
26.09.2017
13:08:43
optimize table лучше не делать, если у вас данные за много месяцев лежат. Лучше запускать именно на измененные партиции. optimize partition final - как раз форсит это слияние. После слияния через final дубликатов не останется.

N
26.09.2017
13:09:49

Nikolai
26.09.2017
13:11:35

N
26.09.2017
13:12:10

Nikolai
26.09.2017
13:12:45
тогда вам правильно посоветовали сделать конфигурацию, в которой каждая нода - это отдельный шард

Ilya
26.09.2017
13:13:09

Nikolai
26.09.2017
13:15:33
возможно, добавть в конфигурацию другое описание кластера, если исходный уже используется

Vladimir
26.09.2017
13:15:39

N
26.09.2017
13:16:23
кажется понял к чему вы все клоните... Что кластер -> два шарда -> 4и ноды. Distributed запрос "как-то не так" ходит, собирает данные и что-то возвращает, если указатель на индивидуальные таблицы этой же схемы... Не баг, а фича :)
Попробую в 4и шарда собрать, посмотреть, спасибо!

Konstantin
26.09.2017
13:17:40

Vladimir
26.09.2017
13:18:22
Так это же долго каждый раз таблицу переписывать, ещё дольше, наверное

Konstantin
26.09.2017
13:18:55
каждый раз естественно не надо, поэтому сделал 1 раз и больше мы не записываем одни и теже данные больше одного раза)))

Google

Vladimir
26.09.2017
13:19:22
А мне вот надо( мне надо визиты из метрики писать

Kirill
26.09.2017
13:20:20

N
26.09.2017
13:21:00


Дмитрий
26.09.2017
13:21:53
У меня лежат за много месяцев. Я добавляю за 1 дату и сделать что-то, чтобы дубликаты пропали. При этом, возможно данных за эту дату раньше не было в таблице. optimize отрабатывает в 5 раз быстрее, чем optimize final, но его не всегда достаточно, верно?
Раз вы добавляете одну дату - вам нужно перетряхнуть только конкретную партицию, в которую эта дата попала, это должно быть быстрее чем OPTIMIZE на всей таблице. Как под капотом отработает optimize partition и optimize partition final - я не могу подсказать, но знаю по опыту, что optimize partition final достаточно, чтоб следующие за ним селекты не увидели дубликатов
можно и не дергать запрос optimize вручную, а хранить где-то рядом номер последней версии данных. И в запросах учитывать эту версию.

Vladimir
26.09.2017
13:24:17
А у меня версия - это поле materialized now() я его и не знаю сам

Дмитрий
26.09.2017
13:27:22
После обновления вы можете выбирать данные с version > 'дата-обновления'

Nataliya
26.09.2017
13:43:49
Dear all,
Registration for the ClickHouse Meetup in Berlin is still open. Please, share the information with your colleagues and friends in social networks https://events.yandex.com/events/meetings/05-10-2017/

Андрей Михайлович
26.09.2017
14:03:31
на кой берлин, если большинство сидят и работают в своём замкадье?

Nikita
26.09.2017
14:08:29

Vladimir
26.09.2017
14:10:15

Roman
26.09.2017
14:10:46
uniq неточная функция

Vladimir
26.09.2017
14:11:07
А есть возможность точную посчитать?

Roman
26.09.2017
14:11:11
uniqCombined получше кстати работает
uniqExact, но на нее ресурсов надо побольше
и времени сильно больше )

.
26.09.2017
14:13:07
regions_hierarchy*.txt: TabSeparated (no header), columns:
- Region ID (UInt32)
- Parent region ID (UInt32)
- Region type (UInt8): 1 - continent, 3 - country, 4 - federal district, 5 - region, 6 - city; other types don't have values.
- Population (UInt32) - Optional column.
а для континентов что parent region id?

Vladimir
26.09.2017
14:13:48

.
26.09.2017
14:36:48

Vladimir
26.09.2017
14:49:04
Подскажите, как можно обновить список внешних словарей

Google

Nikolai
26.09.2017
14:49:54

Vladimir
26.09.2017
14:50:35
а как то это можно сделать из clickhouse-client?

Nikolai
26.09.2017
14:51:30
кажется, что пока нет. но через какое-то время они должны сами обновиться

Vladimir
26.09.2017
14:53:57
понял, спасибо.
А вот в описании последнего релиза есть строка:
Запросы SYSTEM для административных действий с сервером: SYSTEM RELOAD DICTIONARY, SYSTEM RELOAD DICTIONARIES, SYSTEM DROP DNS CACHE, SYSTEM SHUTDOWN, SYSTEM KILL
Где эти команды нужно выполнять?

Nikolai
26.09.2017
14:56:05
а, значит, все-таки, уже есть :)
как раз в clickhouse-client

Stas
26.09.2017
15:00:34

N
27.09.2017
06:19:20
Подскажите, пожалуйста, что может приводить к такого рода ошибкам и как их их избежать:
"When looking for smaller parts, that is covered by xxxxxxx_444, we found just 2024 of 2025 blocks.
<Error> TABLENAME (StorageReplicatedMergeTree, PartCheckThread): Part xxxxxx_444 is lost forever.
Won't add nonincrement_block_numbers because part spans too much blocks ()"

Andrey
27.09.2017
07:16:21
Всем привет. Подскажте как реализовать отправку данных в кликхаус, если оптимально отпарвлять пачками раз в секунду. Писать в файлы и отдвать их кликхаусу или использовать «коллектор» вроде https://github.com/nikepan/clickhouse-bulk
Или есть еще варианты?

Vladimir
27.09.2017
07:17:23
Научить отправителя пачками слать

Andrey
27.09.2017
07:18:22
Научить отправителя не вариант, т.к. это клиентски js, может просто быть закрыта страница до отправки статистики
Писать в файлы и отдавать кликхаусы сильно медленнее чем использовать коллектор?
Как сам яндекс то делает? =)
Может тесты есть
Господа, поделитесь опытом!

Tima
27.09.2017
07:25:47

Igor
27.09.2017
07:26:52
Господа, поделитесь опытом!
Сделали год назад в лоб -> шлем в PHP он пишет в файлики по 10 секунд -> отправляем в CH
Работает и кода оч мало

Kirill
27.09.2017
07:27:37

Google

Vladimir
27.09.2017
07:33:04

Kirill
27.09.2017
07:34:10
В английском чатике Алексей говорил что его и используют

Andrey
27.09.2017
07:34:35
У вас клиентский js шлёт данные сразу в КХ?
Пока в стадии разработки, еще не шлет. Планирую использовать коллектор на golang, но не уверен что нужно использовать еще прослойку. Т.е. принимать http запросы, формировать SQL запросы и отправлять в коллектор, а он уже в кликхаус
Лучше наверное свой коллектор писать, или в файлы… вот и спрашиваю)

Tima
27.09.2017
07:35:31
Если у вас js будет напрямую слать в КХ - значит сам КХ торчит наружу, что очень сильно не рекомендуется

Andrey
27.09.2017
07:35:32
С файлами проще, но не уверен что будет достаточно быстро

Vladislav
27.09.2017
07:36:22

Vladimir
27.09.2017
07:36:37

Nikita
27.09.2017
07:39:40
Оффтоп : Возможно кто-то уже прочел с утра эту печальную новость.
https://nplus1.ru/material/2017/09/25/vladimir-levenshtein?utm_source=oldlentach&utm_medium=social&utm_term=citation&utm_campaign=v-sentyabre-skonchalsya-vladimir-levenshteyn

Konstantin
27.09.2017
07:43:14
подскажите, добавляю новый вычисляемый столбец из словаря, как максимально быстро проставить значения в таблице? сделать OPTIMIZE или есть что то быстрее?

Kirill
27.09.2017
07:46:12
вроде это довольно старая штука и не факт что используется в той же метрике)
We use "LogBroker" (internal persistent queue service, something like Kafka; recently it was a wrapper on Kafka, but now internal implementation was rewritten). For some part of logs, we use just batches in files + rsync.
Then we pull and process data from LogBroker or just files with custom C++ daemons. That daemons process data and save temporary data in small ClickHouse cluster located in three datacenters.

GithubReleases
27.09.2017
08:11:37
https://github.com/yandex/ClickHouse/releases/v1.1.54292-stable was tagged

?
27.09.2017
08:16:25
☺️

Vladimir
27.09.2017
08:17:05
Всем привет!
Подскажите пожалуйста.
Добавил внешний словарь из PostgreSQL со строковым ключом.
Он подключился, но при просмотре таблицы system.dicionaries в колонке last_exception выводится ошибка "Exception: RecordSet contains 0 columns while 2 expected". И соответственно, при попытку забора значения из него возвращается значение по умолчанию.
Может кто-то сталкивался с таким?

Vladimir
27.09.2017
08:20:32

Vladimir
27.09.2017
08:20:53
Можно указать комплексный ключ, состоящий из одного поля
https://clickhouse.yandex/docs/ru/dicts/external_dicts_dict_structure.html#id4

Tima
27.09.2017
08:26:33

Konstantin
27.09.2017
08:28:44
Нужно больше деталей
все просто: ALTER TABLE table_name ADD COLUMN ccolumn_name String DEFAULT dictGetString(\'clip\', \'meganame\', tuple(resource))
добавляется в таблицу с движком ReplacingMergeTree

Google

Tima
27.09.2017
08:34:59


Konstantin
27.09.2017
08:37:23
А разве не сразу идёт применение? Попрбуйте прочитать значение из колонки
"Добавление столбца всего лишь меняет структуру таблицы, и не производит никаких действий с данными - соответствующие данные не появляются на диске после ALTER-а. При чтении из таблицы, если для какого-либо столбца отсутствуют данные, то он заполняется значениями по умолчанию (выполняя выражение по умолчанию, если такое есть, или нулями, пустыми строками). Также, столбец появляется на диске при слиянии кусков данных (см. MergeTree)."
При чтении значение проставляется, но до момента запроса его нет, и даже после чтения в структуре партиции не появлятся файлов вида: column_name.bin и column_name.mrk.
если делать OPTIMIZE то значения проставляются, но интересует есть ли более быстрые варианты


Vladimir
27.09.2017
08:39:22
<dictionaries>
<dictionary>
<name>bookings_extensions</name>
<source>
<odbc>
<connection_string>DSN=forecast</connection_string>
<table>bookings_extensions</table>
</odbc>
</source>
<lifetime>
<min>300</min>
<max>360</max>
</lifetime>
<layout>
<complex_key_hashed />
</layout>
<structure>
<key>
<attribute>
<name>id</name>
<type>String</type>
</attribute>
</key>
<attribute>
<name>amount</name>
<type>Float64</type>
<null_value>0</null_value>
</attribute>
</structure>
</dictionary>
</dictionaries>
Вот результат запроса select * from system.dictionaries
Исключение почему-то пропало, но всегда отдаются нули

Konstantin
27.09.2017
08:53:52
isql -v ODBC что говорит?

Edya
27.09.2017
08:54:02
В КХ инлайн селекты ведут себя странно, а вернее, не учитывают условие, которое туда вписали (inline_select.id = main_table.id).
Например, этот запрос:
select id, (select sum(amount) from (select 1 id, 0 amount union all select 2 id, 1 amount) inline_select where inline_select.id = main_table.id)
from (
select 1 id
union all
select 2 id
) main_table
Результат ожидается такой (например, postgres его и возвращает):
id |sum |
---|----|
1 |0 |
2 |1 |
А КХ возвращает такой:
id |_subquery1 |
---|-----------|
1 |1 |
2 |1 |
Печально.

Александр
27.09.2017
08:55:34
Блин, лог усыпан Couldn't remove 20170927_20170927_271329_271329_0 from ZooKeeper: no node
Кто-то недавно был с такой проблемой. Решилась она?

Vladimir
27.09.2017
09:00:28

Michal
27.09.2017
09:03:45
"Добавление столбца всего лишь меняет структуру таблицы, и не производит никаких действий с данными - соответствующие данные не появляются на диске после ALTER-а. При чтении из таблицы, если для какого-либо столбца отсутствуют данные, то он заполняется значениями по умолчанию (выполняя выражение по умолчанию, если такое есть, или нулями, пустыми строками). Также, столбец появляется на диске при слиянии кусков данных (см. MergeTree)."
При чтении значение проставляется, но до момента запроса его нет, и даже после чтения в структуре партиции не появлятся файлов вида: column_name.bin и column_name.mrk.
если делать OPTIMIZE то значения проставляются, но интересует есть ли более быстрые варианты
Тоже интересна тема - как "накормить" новосоздаваемый стобец данными для уже существующих строк. Причем в идеале - чтоб можно было и "из вне".

Konstantin
27.09.2017
09:04:46