@clickhouse_ru

Страница 240 из 723
Oleksandr
24.08.2017
14:56:34
а в CH config.xml что?

Dmitry
24.08.2017
14:58:25
а в CH config.xml что?
про зукипер? или вообще?

Oleksandr
24.08.2017
14:58:35
Dmitry
24.08.2017
14:59:05
ну, так как все это крутится в кубернетес, там сервис, который смотрит в поды зукипера

Google
Dmitry
24.08.2017
14:59:45
ну т.е. "балансер" который тычет в один из трех нод кластера зукипера

Aleksey
24.08.2017
16:08:48
@kshvakov Здравствуйте. Используем ваш драйвер, столкнулись с вопросом: нам нужно обрабатывать данные потоком, а драйвер, похоже, ждет, пока получит от кх весь объем данных. Подскажите, пожалуйста, есть ли возможность получать данные итерационно?

Kirill
24.08.2017
16:23:54
Если на чтение то можно,просто обновитесь, он от КХ ждет не весь объем данных, а читает блок и отдает (у нас это от 60 до 200к строк). Там есть некоторая проблема, читает он достаточно медленно, думаю как решить

https://github.com/kshvakov/clickhouse/blob/master/rows.go#L38

Oleg
24.08.2017
16:45:52
Добрый день! Разбираемся с clickhouse в кластере, есть, наверное, идиотские вопросы. Есть у нас три узла, на них развернут clickhouse, процессы запущены, zookeeper видят, все хорошо Пытаемся создать табличку, которую хочется 1) партиционировать между узлами 2) хранить с избыточностью, чтобы каждая партиция была минимум на двух машинах Создали табличку следующим образом CREATE TABLE default.graphite ( Path String, Value Float64, Time UInt32, Date Date, Timestamp UInt32) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/{replica}/graphite\', \'{replica}\', Date, (Path, Time), 8192) Пишем на сервер номер 1, на нем даные появляются - на других узлах нет Если пытаться читать данные с первого узла - то все данные видно Если с любого другого - данных не видно Документация на этот счет не очень понятная, ReplicatedMergeTree вроде и описан, но как пользоваться, как достичь нашей цели, и почему все работает так, как оно работает - непонятно

Буду благодарен за помощь

Alex
24.08.2017
16:51:08
У replicated таблицы первый параметр должен быть одинаковый у всех реплик, а второй - у каждой свой. У вас получилось, что первый параметр тоже разный. Соответственно, реплики полностью независимы и репликация не идёт.

Oleg
24.08.2017
16:52:19
Репликой вы называете конкретный сервер?

Alex
24.08.2017
16:52:45
даже конкретную таблицу на конкретном сервере

Oleg
24.08.2017
16:53:13
Если не затруднит, не могли бы вы пояснить, как должна выглядеть настройка для случая "хранить с избыточностью, чтобы каждая партиция была минимум на двух машинах" в случае трех машин в кластере?

А то документация и вот вы оперируете терминами "реплика", "шард", в доке еще слои есть Вроде с шардированием я знаком, но заматчить эти термины в случае clickhouse на реальность и рабочую задачу не получается

Alex
24.08.2017
16:53:54
Да, есть такая возможность, но это не так удобно. Вот тест с примером конфигурации: https://github.com/yandex/ClickHouse/tree/master/dbms/tests/integration/test_cross_replication

"Шард" в терминологии ClickHouse = партиция в вашей терминологии. То есть кусок данных таблицы, а также сервер, хранящий этот кусок.

Google
Oleg
24.08.2017
16:57:41
А как называется партиция, которая живет на нескольких серверах? Получается, что "шард" - партиция лишь на конкретном сервере, а не в кластере

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

Для каждой ноды и шарда создается отдельная база и таблица, затем на каждой ноде создается одна distributed таблица...

Alex
24.08.2017
16:59:16
Партиции в кликхаусе тоже есть, но означают кусок данных за определённый месяц.

Oleg
24.08.2017
16:59:41
Я верно понял из документации, что мне нужно определение данных (CREATE TABLE ...) запускать на каждом из узлов руками?

Alex
24.08.2017
17:00:21
Есть CREATE TABLE ON CLUSTER

Но обычные DDL не реплицируются, правильно.

Oleg
24.08.2017
17:01:19
Т.е. по факту для каждой таблицы мне нужно спроектировать, как именно она должна жить, и для каждого узла сгенерировать свой собственный DDL, запускать на соответствующем узле, и лишь после этого оно все заработает... CREATE TABLE ON CLUSTER - спасибо, гляну А вот этот пример https://github.com/yandex/ClickHouse/blob/master/dbms/tests/integration/test_cross_replication/test.py- можно переписать на CREATE TABLE ON CLUSTER?

Alex
24.08.2017
17:06:32
Конкретно этот пример не получится - обычно предполагается, что одна нода содержит только один шард. Это самая простая и понятная конфигурация. Но чтобы сделать три шарда с репликацией на трёх нодах, одна нода должна содержать два шарда. В примере для этого данные разнесены по разным database, что создаёт определённые неудобства. Например на первой ноде содержатся данные шардов 0 и 2 - в таблицах shard_0.replicated, shard_2.replicated.

Oleg
24.08.2017
17:07:17
Я XML-конфиг вычитал, там все понятно

У меня вопрос именно про DDL, запросы

Возможно ли написать правильный конфиг cluster (для Distributed), а дальше запросами на один из серверов создать все нужные таблички на всех узлах

Alex
24.08.2017
17:09:25
CREATE TABLE ON CLUSTER предполагает, что везде выполняется один и тот же запрос, а различия между нодами заключены в макросах.

Oleg
24.08.2017
17:09:54
Спасибо Попробую сейчас сообразить, можно ли макросами нужную конфигурацию описать...

Alex
24.08.2017
17:10:48
Вроде бы не получится... Проблема в database - её макросами не задать.

Oleg
24.08.2017
17:11:04
А почему здесь нужны различные database?

По идее, достаточно создать шесть табличек (по две на каждый узел) и одну табличку Distributed

Извиняюсь за глупые вопросы, но вот так сходу не очень понятно, как с системой работать и почему опцию "А" делать можно, а опцию "Б" - нельзя Отсюда столько идиотских вопросов

Alex
24.08.2017
17:13:02
А так не получится - Distributed предполагает, что на каждой ноде подчинённая таблица называется одинаково. Отсюда хак с разными database.

Oleg
24.08.2017
17:13:36
А подчиненные таблички с точки зрения Distributed одинаковые или разные данные хранят?

Google
Alex
24.08.2017
17:15:29
На нодах, указанных в разных тегах <shard> - разные, на нодах, указанных в тегах <replica> внутри одного шарда - одинаковые.

Oleg
24.08.2017
17:16:01
Спасибо. Сейчас попробую это осознать и поэкспериментировать...

Я понимаю, что, наверное, самый сложный пример взял, но это как раз самое интересное

Alex
24.08.2017
17:16:45
То есть при запросе Distributed таблица отправит запрос в подчиненные таблицы на одну из нескольких реплик каждого шарда, а потом сольёт результаты от разных шардов.

Вот кстати картинка (рисовал для одного из докладов) https://github.com/yandex/clickhouse-presentations/blob/master/rit2017/src/full_cluster.pdf

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

Anton
24.08.2017
17:42:31
Добрый день! Разбираемся с clickhouse в кластере, есть, наверное, идиотские вопросы. Есть у нас три узла, на них развернут clickhouse, процессы запущены, zookeeper видят, все хорошо Пытаемся создать табличку, которую хочется 1) партиционировать между узлами 2) хранить с избыточностью, чтобы каждая партиция была минимум на двух машинах Создали табличку следующим образом CREATE TABLE default.graphite ( Path String, Value Float64, Time UInt32, Date Date, Timestamp UInt32) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/{replica}/graphite\', \'{replica}\', Date, (Path, Time), 8192) Пишем на сервер номер 1, на нем даные появляются - на других узлах нет Если пытаться читать данные с первого узла - то все данные видно Если с любого другого - данных не видно Документация на этот счет не очень понятная, ReplicatedMergeTree вроде и описан, но как пользоваться, как достичь нашей цели, и почему все работает так, как оно работает - непонятно
Проблему с репликацией решили. Подозреваю, это недоработка в кликхаусе. Суть проблемы - в нашем сетапе по идейными причинам не используется резолвер - узлы общаются по ip-адресам. Кликхаус же, похоже, пишет в зоокипер хостнейм реплики для синхронизации чанков. В результате: 2017.08.24 17:18:36.961397 [ 19 ] <Debug> default.graphite (StorageReplicatedMergeTree): Fetching part 20170824_20170824_200_204_1 from /clickhouse/tables/graph/graphite/replicas/10.0.0.10 2017.08.24 17:18:36.962550 [ 19 ] <Error> DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Host not found: metrics-ch-1, e.what() = Host not found

Alex
24.08.2017
17:55:53
Можно настроить в конфиге параметром interserver_http_host - указав там ip-адрес

Dmitry
24.08.2017
18:03:19
Ребята. Добрый вечер. Нет ли интереса выступить на meetup RuOUG. Собираемся обычно в Дойче банке.

Igor
24.08.2017
19:09:14
добрый вечер. подскажите пожалуйста, нет ли известной проблемы с тем, что чтение значений из словаря валится с ошибкой по памяти? > select * from dictionaries.ages SELECT * FROM dictionaries.ages Received exception from server: Code: 173. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Allocator: Cannot mmap., errno: 12, strerror: Cannot allocate memory. 0 rows in set. Elapsed: 0.098 sec. При этом словарь успешно загружен: ages │ /etc/clickhouse-server/age_dictionary.xml │ ComplexKeyHashed │ (String) │ ['Age'] │ ['Int32'] │ 603975928 │ 0 │ 1 │ 2402566 │ 0.14320409297943115 │ 2017-08-24 22:05:35 │ │ ClickHouse: db.calls_to_age_view В акцесс логе вот такое (в еррор логе пусто при этом): 2017.08.24 22:05:59.362168 [ 6 ] <Debug> executeQuery: (from [::1]:46752) select * from dictionaries.ages 2017.08.24 22:05:59.437457 [ 6 ] <Debug> MemoryTracker: Peak memory usage (total): 0.00 B. 2017.08.24 22:05:59.459263 [ 6 ] <Information> TCPHandler: Processed in 0.097 sec.)

хм, по всей видимости проблема в том, что FixedString нельзя использовать, перевел на String все заработало

Kirill
25.08.2017
05:55:16
@playboyko Привет, медленно это вот так [clickhouse][connect=1][rows] <- progress: rows=126290011, bytes=9522259642, total rows=0 [clickhouse][connect=1][rows] <- data: packet=1, columns=31, rows=3796, elapsed=105.888822ms [clickhouse][connect=1][rows] <- progress: rows=2621440, bytes=212776324, total rows=0 [clickhouse][connect=1][rows] <- data: packet=1, columns=31, rows=65536, elapsed=2.093314719s [clickhouse][connect=1][rows] <- progress: rows=72974336, bytes=5970056950, total rows=0 [clickhouse][connect=1][rows] <- data: packet=1, columns=31, rows=65524, elapsed=2.408318034s [clickhouse][connect=1][rows] <- progress: rows=10674176, bytes=888888949, total rows=0 Смотрел 660ms 13.78% 13.78% 780ms 16.28% runtime.mallocgc 220ms 4.59% 18.37% 220ms 4.59% runtime.memmove 190ms 3.97% 22.34% 1860ms 38.83% gotask.ws/scm/ts/loggerd/vendor/github.com/kshvakov/clickhouse/lib/data.(*Block).Read 180ms 3.76% 26.10% 980ms 20.46% database/sql.convertAssign 140ms 2.92% 29.02% 220ms 4.59% runtime.scanobject 130ms 2.71% 31.73% 170ms 3.55% syscall.Syscall 120ms 2.51% 34.24% 360ms 7.52% bufio.(*Reader).Read 120ms 2.51% 36.74% 120ms 2.51% runtime.usleep 110ms 2.30% 39.04% 450ms 9.39% gotask.ws/scm/ts/loggerd/vendor/github.com/kshvakov/clickhouse.(*connect).Read 100ms 2.09% 41.13% 110ms 2.30% reflect.Value.Elem 100ms 2.09% 43.22% 200ms 4.18% runtime.mapaccess1 В принципе, если глубже покапать то понятно что делать

Amelia
25.08.2017
09:46:43
Привет, друзья. Подскажите как решить вроде простую задачку, я чет в тупик встала. Как сосчитать и положить в отдельный столбец количество пробелов в строках столбца? Вот есть столбец title, в нем лежат заголовки новостей. В сосдений столбец надо положить количество пробелов в каждом заголовке.

Не нашла для clickhouse какой-то понятной функции подсчета символа в подтсроке

Amelia
25.08.2017
09:49:49
ага, заголовки новостей



Tima
25.08.2017
09:52:42
https://clickhouse.yandex/docs/ru/functions/splitting_merging_functions.html

Google
Tima
25.08.2017
09:53:40
Хотя нет

Что-то типа такого SELECT length(splitByChar(' ', title))) - 1

Amelia
25.08.2017
09:58:24
о, точно, спасибо!

Vladislav
25.08.2017
09:58:31
можно еще length(extractAll(title, ' '))

Amelia
25.08.2017
09:58:55
?

Vladislav
25.08.2017
09:59:45
а знает кто-нибудь как разбить строку на массив символов?

Alexey
25.08.2017
09:59:49
Привет всем. Подскажите, есть ли какой-то механизм восстановления данных из директории detached/broken_* ?

Andrey
25.08.2017
10:12:27
Привет всем. Подскажите, есть ли какой-то механизм восстановления данных из директории detached/broken_* ?
давно как то публиковали репу с утилитой для вырезания побитых данных. Может она поможет. Но репу не могу к сожалению найти(

Александр
25.08.2017
11:33:24
А в КХ есть что-то типа order by field(field, val1, val2, val3)?

papa
25.08.2017
11:44:21
а что это должно делать?

Александр
25.08.2017
11:49:03
Нет. https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_field

papa
25.08.2017
11:54:50
SELECT indexOf(['Hej', 'ej', 'Heja', 'hej', 'foo'], 'ej')

Александр
25.08.2017
11:55:16
SELECT indexOf(['Hej', 'ej', 'Heja', 'hej', 'foo'], 'ej')
Интересно :) Сейчас попробую!

papa
25.08.2017
11:55:22
правда там нет оптимизации для строк, но работать должно.

Александр
25.08.2017
11:57:26
Ну у меня выбирается крайне мало строк, не больше 200 на запрос

Я думаю КХ не помрет от такого :)

Работает! Спасибо!

Tima
25.08.2017
13:22:58
Есть таблица с такой стуктурой http://joxi.ru/E2pX5VPCBxPxb2 Хочу вставить строку, где mark == 'test' arr == ['123', 'abc'] Перебрал кучу вариантов http://joxi.ru/KAxNRVPt4bP66m ничего не прокатывает. Как быть?

Alexey
25.08.2017
13:57:21


Google
Alexey
25.08.2017
13:58:34
Если отсортировать, указав поля в обратном порядке, то результат ожидаемый:



Vitaliy
25.08.2017
13:58:48
Я попробую сегодня вечером / завтра собрать тестовый кластер - и там погонять Т/к в логах очень много всего - у нас Debug режим, и найти что-то тяжело )
Можете кстати запустить этот скрипт из тестов https://github.com/yandex/ClickHouse/tree/master/dbms/tests/integration/test_distributed_ddl Он создает в докере настроенный кластер на 4 хоста. Можете помучать его. Только для скрипта нужны prerequisites: https://github.com/yandex/ClickHouse/blob/master/dbms/tests/integration/README.md

Alex
25.08.2017
14:00:04
Есть таблица с такой стуктурой http://joxi.ru/E2pX5VPCBxPxb2 Хочу вставить строку, где mark == 'test' arr == ['123', 'abc'] Перебрал кучу вариантов http://joxi.ru/KAxNRVPt4bP66m ничего не прокатывает. Как быть?
:) insert into log3 format TSV test ['1','2','3'] INSERT INTO log3 FORMAT TSV Ok. 1 rows in set. Elapsed: 0.020 sec. ? select * from log3 SELECT * FROM log3 ┌─mark─┬─arr───────────┐ │ test │ ['1','2','3'] │ └──────┴───────────────┘ 1 rows in set. Elapsed: 0.001 sec.

Tima
25.08.2017
14:01:33
Так у меня тоже получилось. А вот через python и jdbc-драйвер - как-то не очень получается http://joxi.ru/V2VEkayt0q5RYm http://joxi.ru/bmonQkPCMdPelr

Alex
25.08.2017
14:01:51
Вроде всё правильно, внутри одного таймстемпа отсортировано по session_cnt

Alexey
25.08.2017
14:02:09
Там порядок 1 - 3 - 2

Блин. Туплю

Извините )

Dmitry
25.08.2017
14:24:19
Блин, второй день бьюсь - понять не могу. Собираю кластер с такими конфигами https://gist.github.com/count0ru/e0bb494634b3edaaf68fad948a811e03 делаю базу на одной из нод create database test; Потом пытаюсь добавить таблицу шардированную CREATE TABLE test.testTable_sharded ( event_date Date DEFAULT toDate(event_time), event_time DateTime DEFAULT now(), body_id Int32, viwes Int32 ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/test/testTable_sharded', '02', event_date, (event_time, body_id), 1892); пишет что Can't create replicated table without ZooKeeper что не так? Запрос на CREATE TABLE, или у меня действительно зукипер не работет просто?

Evgenii
25.08.2017
15:09:50
zookeeper то стоит?

и в логах не орет что он анричебл

Kirill
25.08.2017
15:27:14
Всем привет. Подскажите, можно ли как-то сделать LEFT JOIN с массивом? Если более конкретно, то нужно вывести результат группировки например за каждый час. Понятно, что если в каком-то часе не было событий, то в результате запроса не будет этого часа, а нужно вернуть для него 0. Как вариант пытаюсь приджойнить результат запроса к массиву всех часов, но не понимаю как это правильно сделать. ARRAY JOIN делает судя по всему только INNER JOIN, и поэтому результат получается одинаковый что с ним, что без него.

Alexey
25.08.2017
15:27:55
Есть возможность написать LEFT ARRAY JOIN.

Kirill
25.08.2017
15:28:04
wow

ну на самом деле всё равно не то видимо, это ведь приджойнит массив к результату запроса, а не наоборот. а в результате нет того, что нужно

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