@clickhouse_ru

Страница 398 из 723
?
23.01.2018
11:45:41
спасибо, сейчас попробую

а примера использования ни у кого нет под рукой?

Roman
23.01.2018
11:48:31
https://github.com/valyala/chclient/blob/master/chclient_test.go#L28

?
23.01.2018
11:49:34
спасибо

Google
Vadim
23.01.2018
11:53:12
Привет всем! Хочу кликхаус в класере с зукипером, но при добавлении карты метрик получаю: CREATE TABLE graphite_tree ( Date Date, Level UInt32, Path String, Deleted UInt8, Version UInt32 ) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/hits', '{replica}', Date, (Level, Path), 8192, Version) Received exception from server (version 1.1.54337): Code: 342. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Existing table metadata in ZooKeeper differs in mode of merge operation. Stored in ZooKeeper: 6, local: 5. 0 rows in set. Elapsed: 0.065 sec.

кто-то сталкивался?

Oleg
23.01.2018
11:57:09
что можно получить внятные сообщения об ошибках JDBC ? я получаю типа такого ru.yandex.clickhouse.except.ClickHouseException: ClickHouse exception, code: 27, host: ..., port: 8123; =#�MO��\u0018j��Y�\u000b�\u0011�\u0013\u0004\u0000\u0000- \u0000\u0000��!Code: 27, Cannot parse input: expected \t before: -710274372\t2\n2017\t12\t21\td70d4d074d687a01b0d0c574a4affd18158e1cfc26d7af8928d2c03e50a90ad9\t3-3c451f7f4289a6becb76f0ff8bcd5f80faed706eb09ed4b19f5d7b9ac67f324d\t1513: (at row 1519) я такое получаю после отправки prepared statement

Vadim
23.01.2018
11:57:28
хотя до того CREATE TABLE graphite ( Path String, Value Float64, Time UInt32, Date Date, Timestamp UInt32 ) ENGINE = ReplicatedGraphiteMergeTree('/clickhouse/tables/{shard}/hits', '{replica}', Date, (Path, Time), 8192, 'graphite_rollup') Ok.

Ivan
23.01.2018
12:04:23
Коллеги, Есть MergeTree и Distributed поверх MergeTree. Есть AggregatingMergeTree поверх этого MergeTree и Distributed таблица поверх AggregatingMergeTree. Записи делаются в MergeTree. В MergeTree есть поле event_type типа Enum8 ('clicks' = 1, итд). В AggregatingMergeTree делаются такие аггрегации countIfState(event_type = 'clicks') AS clicks_count. Потом делаю запросы с доаггрегациям countIfMerge(clicks_count). Но дело в том что данных в таких счетчиках как-то совсем не хватает, такое ощущение что он их просто пропускает. Если делаю запросы из MergeTree то все хорошо данные совпадают с другой нашей БД

Vadim
23.01.2018
12:05:52
/stat@combot

Combot
23.01.2018
12:05:52
combot.org/chat/-1001080295593

Felixoid
23.01.2018
12:11:10
хотя до того CREATE TABLE graphite ( Path String, Value Float64, Time UInt32, Date Date, Timestamp UInt32 ) ENGINE = ReplicatedGraphiteMergeTree('/clickhouse/tables/{shard}/hits', '{replica}', Date, (Path, Time), 8192, 'graphite_rollup') Ok.
у Вас УЖЕ есть таблица в ЗК, вы пытаетесь создать новую. КХ ругается именно на то, что в ЗК уже лежит таблица, отличная от того, что Вы пытаетесь создать

Vadim
23.01.2018
12:11:48
таблицы разные, graphite / graphite_tree

каждую же можно реплицировать, нет?

@Felixoid спасибо за отклик

Felixoid
23.01.2018
12:12:25
каждую же можно реплицировать, нет?
тогда почему у Вас адрес ноды в ZK один и тот же для обеих? =) /clickhouse/tables/{shard}/hits

Vadim
23.01.2018
12:12:46
ок, сек

Google
Vadim
23.01.2018
12:13:32
теперь все ОК, спасибо

Mikhail
23.01.2018
12:50:46
Коллеги, а из опыта - никогда не сталкивались с обрывом соединения CH с mysql (получение словарей) при загрузке исходящей сети на 100% репликацией? Есть несколько серверов, свежеобновленных. На одном - ошибки связи с mysql, на остальных все ок. Отличие - нагруженная сеть.

Oleg
23.01.2018
13:46:40
как заставить драйвер JDBC присылать более осмысленный текст ошибки ? ru.yandex.clickhouse.except.ClickHouseExceptionSpecifier: Unsupported ClickHouse error format, please fix ClickHouseExceptionSpecifier, message: �� ��k��}?��~��� A ��Code: 27, e.displayText() = DB::Exception: Cannot parse input: expected \t before: -1662207888\t1\n2016\t10\t11\t816893574f48e019e4c0aabfcb0949aa535f49e8c5083341da003d02cef9cf78\t3-81da85cce9ad0a99478bb33c17eb3fad1f3103f78db1d37177f3d580f3f47781\t201: (at row 11) R � 0: Column 0, name: year �type: UInt16 �d text: "2017"E 1 E Pmonth E 8 C %21C 36 C �field_id,C `String% �33-288aa4025f14b84a5f1b40cd4f4acf5744f4d06723c430e239a6d2a5c943b49d� 5� �field2_date G D � G-12-O � � �field3,K O t<EMPTY> 7| F �field6 � F �"field4� ? H �field5� � 5"USC 9y C � Tfield7� RTime,� � � 19:51:0� @ T ens % T " O T �field8� � � 30 � U54976� 1" F Ffield9E � F #1"$ 1$ �} � 6 $ �M000: 9� $ /w21:19:3x $ aERROR:� & "P" is Alike� @32 ;wha Ption , error: For input string: "��k��}?��~��� A ��Code: 27" <groupId>ru.yandex.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>0.1.34</version>

Dmitry
23.01.2018
13:50:56
у меня без кракозябр, но тоже непонятно

2018.01.23 15:30:20.061130 [ 15 ] <Error> ExternalDictionaries: Failed reloading 'managedobject' dictionary: Code: 27, e.displayText() = DB::Exception: Cannot parse input: expected \t before: \n2694955293548476466\t3\tC3560-8\t10.111.0.8\n8141130780283766859\t4\tC3560-15\t10.111.0.15\n4864262177964422856\t5\tJuniper MX5-T\t10.111.0.21\n4403641040019216150\t6\tRB301: (at row 1) Row 1: Column 0, name: bi_id, type: UInt64, parsed text: "534697644907619486" Column 1, name: id, type: String, parsed text: "2" Column 2, name: name, type: String, parsed text: "C3560-16" Column 3, name: address, type: String, parsed text: "10.111.0.16" ERROR: Line feed found where tab is expected. It's like your file has less columns than expected. And if your file have right number of columns, maybe it have unescaped backslash in value before tab, which cause tab has escaped.

Maxim
23.01.2018
14:06:31
такое сыпется когда у вас размерность поля не совпадает с описанным типом в базе (ну суете -1 в uint8)

Vsevolod
23.01.2018
14:07:15
kdb style

Natalya
23.01.2018
14:39:39
Всем привет! кто-нибудь пробовал дружить комбинаторы -If и -Array? как правильно указать условие? в качестве второго аргумента почему-то просит UInt8...

Oleg
23.01.2018
14:39:40
-Dfile.encoding=utf-8 в целом помогло, спасибо, но есть отдельные непонятки типа m����{�: � )US_j�} ~ �

Nikolai
23.01.2018
14:50:38
Всем привет! кто-нибудь пробовал дружить комбинаторы -If и -Array? как правильно указать условие? в качестве второго аргумента почему-то просит UInt8...
можно как-то так: SELECT sumArrayIf(a, length(a) = 2) FROM ( SELECT arrayJoin([[0, 1, 2], [3, 4]]) AS a ) ┌─sumArrayIf(a, equals(length(a), 2))─┐ │ 7 │ └─────────────────────────────────────┘ а что нужно получить?

Nikolai
23.01.2018
14:54:13
SELECT length(arrayFilter(x -> (x > 3), a)) FROM ( SELECT arrayJoin([[1, 2], [3, 4], [5, 6]]) AS a ) ┌─length(arrayFilter(lambda(tuple(x), greater(x, 3)), a))─┐ │ 0 │ │ 1 │ │ 2 │ └─────────────────────────────────────────────────────────┘

Mariya
23.01.2018
14:59:47
думала, это возможно реализовать комбинаторами...
Комбинаторами тоже можно, но будет сложнее :) Например, можно разбить массивы по строкам с помощью arrayJoin, затем сгруппировать по id строки и использовать countIf(a > 3)

papa
23.01.2018
15:02:24
Всем привет! кто-нибудь пробовал дружить комбинаторы -If и -Array? как правильно указать условие? в качестве второго аргумента почему-то просит UInt8...
uint8 это такая разновидность bool в clickhouse. выражение в where тоже имеет такой тип. а количество элементов в массиве это вообще не агрегатная функция.

Дмитрий
23.01.2018
15:03:24
-Dfile.encoding=utf-8 в целом помогло, спасибо, но есть отдельные непонятки типа m����{�: � )US_j�} ~ �
А может быть такое, что у вас исходные строки, которые вы заливаете, тоже в какой нибудь специфичной кодировке? Не очень помню, можно ли в ch-jdbc клиенте указать кодировку источника для apache http client, кажется что нет.

Google
pavel
23.01.2018
15:30:12
Привет. Есть CREATE MATERIALIED VIEW .. AS SELECT ... FROM t1 Но хочется чтобы оно только создалось, а данные туда не сыпались по инсерту в связанную t1. Может это делается так? CREATE TABLE ... AS SELECT ... FROM t1 ?

Nikolai
23.01.2018
15:34:18
а как это MATERIALIED VIEW должно себя вести? почему просто VIEW не подходит?

pavel
23.01.2018
15:36:39
Хочется сделать табличку на движке MergeTree, но нормального CREATE для неё нет. Есть вот такой - от вьюшки. Но табличка должна быть материальная и жрать место. Просто авто-инсерты отрубить. Хочу фичу умертвления MV короче)

Natalya
23.01.2018
15:39:18
а почему нельзя просто создать таблицу и сделать в нее insert select?

Nikolai
23.01.2018
15:40:57
Oleg
23.01.2018
16:25:58
Вечер добрый! Прошу прощения если уже обсуждалось тыщу раз, но как кто борется с дублями записей? ReplacingMergeTree вполне справляется, если дубли балансить шард кеем на одну ноду, но вот существует окно пока не произошло слияние, когда обе записи живут и попадают в выборки и аггрегации

Kirill
23.01.2018
16:30:03
У нас немного другой кейс, но мы убираем дубли при помощи LIMIT N BY https://clickhouse.yandex/docs/ru/single/#sekcziya-limit-n-by

т.е. данные сортируются, а потом накладывается условие сколько первых строк по такому-то ключу оставить

Oleg
23.01.2018
16:33:18
хм, наверное не подходит, потому что мне нужны все строки для агрегации, но само собой минус дубли

Kirill
23.01.2018
16:37:48
там и будут все строки, а дубли можно лимитом срезать если отсортировать по close или что там у вас.

Oleg
23.01.2018
16:38:23
сейчас попробую, спасибо

Kirill
23.01.2018
16:44:50
сейчас попробую, спасибо
CREATE TABLE example ( ID String, Open UInt8, Closed UInt8, Amount Float64 ) Engine = Memory; INSERT INTO example VALUES ('A', 1, 0, 42.2), ('A', 1, 1, 42.2), ('B', 1, 0, 36.6); SELECT * FROM example ORDER BY ID, Closed LIMIT 1 BY ID;

Oleg
23.01.2018
16:52:10
круто, работает, спасибо)

Vadim
23.01.2018
19:30:38
Доброго дня. Столкнулся с такой ситуацией: Есть кластер из 4 машин: 2 щарда, у каждого по две реплики Таблицы: events_Local - replicated merge tree на каждой машине, events_Dist - distributed поверх events_Local 1_min_aggregates_Local - replicated merge tree на каждой машине 1_min_aggregates_Dist - distributed поверх 1_min_aggregates_Local 60_min_aggregates_Local - replicated merge tree на каждой машине 60_min_aggregates_Dist - distributed поверх 60_min_aggregates_Local Последовательно выполняются 2 запроса. Каждый может уйти на любой из 4 хостов: 1. insert into 1_min_aggregates_Local select ... from events_Local (входной поток группируется по минутам) 2. insert into 60_min_aggregates_Local select ... from 1_min_aggregates_Dist (поток группируется по часам) С вероятность примерно 30% второй запрос ничего не вставляет (хотя данные есть). Если я вставляю sleep 500ms между запросами - вероятность ошибки падает до нуля. Собственно, вопросы: Правильно ли я понимаю, что выполненый insert в локальную таблицу еще не гарантирует, что данные тут же будут доступны в Distributed? Если такое поведение адекватно, то как гарантировать доставку данных после первого запроса вместо костылей из sleep'а?

Alexey
23.01.2018
19:33:10
Доброго дня. Столкнулся с такой ситуацией: Есть кластер из 4 машин: 2 щарда, у каждого по две реплики Таблицы: events_Local - replicated merge tree на каждой машине, events_Dist - distributed поверх events_Local 1_min_aggregates_Local - replicated merge tree на каждой машине 1_min_aggregates_Dist - distributed поверх 1_min_aggregates_Local 60_min_aggregates_Local - replicated merge tree на каждой машине 60_min_aggregates_Dist - distributed поверх 60_min_aggregates_Local Последовательно выполняются 2 запроса. Каждый может уйти на любой из 4 хостов: 1. insert into 1_min_aggregates_Local select ... from events_Local (входной поток группируется по минутам) 2. insert into 60_min_aggregates_Local select ... from 1_min_aggregates_Dist (поток группируется по часам) С вероятность примерно 30% второй запрос ничего не вставляет (хотя данные есть). Если я вставляю sleep 500ms между запросами - вероятность ошибки падает до нуля. Собственно, вопросы: Правильно ли я понимаю, что выполненый insert в локальную таблицу еще не гарантирует, что данные тут же будут доступны в Distributed? Если такое поведение адекватно, то как гарантировать доставку данных после первого запроса вместо костылей из sleep'а?
По-умолчанию вставка в Distributed таблицу асинхронная. Можно переключить на синхронную настройкой insert_distributed_sync = 1.

Vadim
23.01.2018
19:42:38
В моем случае, я как раз вставлял данные в таблицы Local. Попробую включить опцию и вставлять в distributed, спасибо.

Alexey
23.01.2018
19:43:43
Репликация тоже по-умолчанию асинхронная.

Alexey
23.01.2018
20:17:13
По-умолчанию вставка в Distributed таблицу асинхронная. Можно переключить на синхронную настройкой insert_distributed_sync = 1.
Давно хотел по этому поводу спросить. Могу ли я использовать этот механизм для отложенной доставки не очень важных данных (метрики всякие). Смысл такой - есть Центр и есть множество удаленных Бранчей (через WAN). Так вот, в каждом Бранче есть своя связка, скажем, graphouse+clickhouse, но в clickhouse сделаны только distributed таблицы, смотрящие в на кластер в Центр.

если дистрибютед таблица на какое-то время потеряет связь с тем, на что она указывает, и в нее будут вставлять данные, то они будут копиться в локальном clickhouse (в структуре FS) и потом, когда соединение восстановиться доедут до цели?

Google
Alexey
23.01.2018
20:19:41
Да. Вроде нормальная идея. Только не забывайте мониторить эту очередь (изнутри возможности узнать размер этой очереди нельзя).

Alexey
23.01.2018
20:22:16
спасибо, мониторить каталог будем

Pavel
23.01.2018
22:29:44
а нет ли планов ввести поля у самой схемы таблицы, которые можно редактировать?

у меня напрашивается идея сделать миграцию схему в своем приложении, но сейчас приходится делать это эвристически "если есть вот эти поля, то версия - вот такая"

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

Pavel
23.01.2018
22:31:16
вполне устроило бы :)

я бы даже сказал - именно то, что нужно :)

Alexey
23.01.2018
22:41:51
https://github.com/yandex/ClickHouse/issues/1815#issue-291019931 - а теперь придётся найти того, кто сделает.

Pavel
23.01.2018
22:46:10
потрясающе, спасибо :)

Andy
23.01.2018
22:47:24
я бы даже сказал - именно то, что нужно :)
В джанге это делается таблицей с историями применения миграций. Может стоит взять такой подход?

Pavel
23.01.2018
22:47:53
сложно, мне нравится решение иметь поле прямо в схеме

я не пытаюсь писать полноценный мигратор схемы, скорее пытаюсь мимикрировать под то, что дали. если схема старая - просто не пишу часть полей :)

но определить что она старая когда миграций 5-10 позади.. ад :(

ну и таблица отдельная может более вероятно стать неконсистентной

Andy
23.01.2018
22:49:42
сложно, мне нравится решение иметь поле прямо в схеме
Ну тогда вперед) Знаю, что есть миграторы для постгреса, которые делали дифф, сложный, злой

Alexey
23.01.2018
22:55:36
Также можете попробовать использовать для этой цели ненужный ALIAS столбец. Вот так: ... comment ALIAS 'Hello, world'

Pavel
23.01.2018
23:43:24
да, кстати, тоже вариант!

спасибо :)

Google
Alexey
23.01.2018
23:51:09
Если подойдёт этот вариант, то созданную задачу можно по-быстрому отменить.

Сергей
24.01.2018
05:55:49
Если подойдёт этот вариант, то созданную задачу можно по-быстрому отменить.
если делать, может лучше по такому пути: https://www.postgresql.org/docs/9.1/static/sql-comment.html ? чтобы развивать со временем

Andrey
24.01.2018
08:15:59
INSERT INTO akonyaev.content_app_version_mapi_history SELECT today(), content_id, arrayJoin(arrayMap(x -> toUInt32(x), splitByChar(',', versions_with_allowed_formats))) FROM dictionaries.content_app_version_mapiПадает по памяти DB::Exception: Memory limit (for query) exceeded: would use 13.00 GiB (attempt to allocate chunk of 4294967296 bytes), maximum: 9.31 GiB.Как я понимаю, запрос сначала пытается посчитать select, а потом сделать insert. Так как нет никаких группировок и прочего - то по идее данные можно было бы вставлять сразу по ходу выполнения запроса. Есть ли такой функционал?

Ololo
24.01.2018
09:16:02
Если в replacingmergetree сделать optimize во время вставки большой порции данных, то, кажется, всё ломается. Кто-нибудь сталкивался с таким?

Кажется, будто часть столбцов смещается относительно другой части.

Tima
24.01.2018
09:17:54
Если в replacingmergetree сделать optimize во время вставки большой порции данных, то, кажется, всё ломается. Кто-нибудь сталкивался с таким?
Мы сталкивались что частый запуск optimaze при вставке данных (размер батча примерно 20к) стабильно приводил к краху КХ. Скорее всего так лучше не делать (часто)

Страница 398 из 723