
Aleksander
30.07.2017
12:14:25
Ого, вот это спасибо - очень пригодится

Dmitry
30.07.2017
12:24:50
Коллеги, а какие Content-Encoding поддерживает ClickHouse для HTTP-транспорта?

Alexey
30.07.2017
12:29:02
gzip, deflate.

Aleksander
30.07.2017
12:29:12
@lexa_work сэкономил мне 20 часов

Google

Александр
30.07.2017
13:35:00
для tableau коннекторов не появилось еще ?

Alexey
30.07.2017
15:05:30
Мне сообщили, что сейчас Tableau можно подключить через ODBC и даже строятся какие-то графики. Хотя я сам ещё не смотрел.

Александр
30.07.2017
17:22:41
Отлично - если работает. Спасибо

Pika
30.07.2017
22:35:06
В каком часовом поясе выполняются команды ALTER TABLE [ADD | DROP ] PARTITION? Как с этим связна клиентская временная зона?

Alexey
30.07.2017
23:24:12
Партиции формируются на основании значения столбца с датой (указывается первым параметром в MergeTree). Он имеет тип Date. Значения типа Date не зависят от часового пояса. В текстовом виде они представлены в виде год, месяц, число, например "2017-07-31"; в бинарном виде, в том числе, при хранении в таблицах, в виде числа дней от 1970-01-01. То есть, дата представляет собой календарный день.

Рулон
31.07.2017
06:13:57
Пытаюсь загрузить данные В доке "Формат comma separated values (RFC)." А у меня точка с запятой. где можно указать разделитель?

Kirill
31.07.2017
06:38:36
подскажите кто сталкивался. В таблице откуда то взялись DateTime который выводится как "0000-00-00 00:00:00", но искать по этому значению нельзя (select count() where etime = '0000-00-00 00:00:00' == 0, select count() where etime < '1970-01-01 00:00:00' == 0). Что это такое и как их отфильтровать?

Рулон
31.07.2017
06:41:43
Я сталкивался с 0000-00-00, когда писалась некорректная дата

Kirill
31.07.2017
06:45:03
более того эти нули не фильтруются запросом "etime > '1970-01-01 00:00:00'", они их успешно проходят... что очень плохо.

Tima
31.07.2017
07:02:31
В CH нет такого поведения по умолчанию как NULL. Если для колонки не указать дефотное значение или null - тогда при вставке строки данных без значения для этого столбца будет использовано некое минимальное значение
Поищите в документации по запросу
0000-00-00 00:00:00
Для чисел это 0, для дат - 0000-00-00 и т.п.

Oleksandr
31.07.2017
08:08:34
по поводу транзакций и mvcc: в доке сказано, что их нет, но ведь это некоторое преуменьшение, и, скорее всего, поддерживается ровно один прием
если я прав, то какой?
сценарий 1)
запрос A добавляет данные, запрос Б начинает выполнение после того, как А отработал наполовину, и читает данные
что вернет А? Делается ли слепок данных на момент старта каждого запроса?
сценарий 2)
запросы А и Б одновременно пишут в таблицу, что будет в ней после завершения запросов?

Google

Kirill
31.07.2017
08:12:31


Kirill
31.07.2017
08:18:50
по поводу транзакций и mvcc: в доке сказано, что их нет, но ведь это некоторое преуменьшение, и, скорее всего, поддерживается ровно один прием
если я прав, то какой?
сценарий 1)
запрос A добавляет данные, запрос Б начинает выполнение после того, как А отработал наполовину, и читает данные
что вернет А? Делается ли слепок данных на момент старта каждого запроса?
сценарий 2)
запросы А и Б одновременно пишут в таблицу, что будет в ней после завершения запросов?
1) нет слепков, запрос вставляет данные блоками, пока весь запрос не пройдет данные не должны быть видны (если INSERT INTO SELECT * FROM table , тогда видны пока запрос еще не закончился). В show processlist можно видеть сколько строк запрос вставил на момент N и посмотреть count по таблице
2) будут записаны все данные

Tima
31.07.2017
08:26:18

Kirill
31.07.2017
08:30:05


Oleksandr
31.07.2017
08:32:33
1) нет слепков, запрос вставляет данные блоками, пока весь запрос не пройдет данные не должны быть видны (если INSERT INTO SELECT * FROM table , тогда видны пока запрос еще не закончился). В show processlist можно видеть сколько строк запрос вставил на момент N и посмотреть count по таблице
2) будут записаны все данные
1)
пока весь запрос не пройдет, данные не должны быть видны — то есть по успешному завершению запроса происходит коммит, и читаются только закоммиченные данные?
если да, то репликация проходит по аналогичному сценарию (с коммитом) ?
если снова да, то поддерживается ли read your writes (запись на ноду А прошла, репликация на ноду Б ещё нет, запрос на чтение на ноду А, гарантируется ли получение последних записей с A) ?
тот же сценарий, но для выполнения второго запроса надо пройтись по нескольким нодам, и собрать зависящую от первого запроса информацию (который в A, и реплицируется) — будет ожидание коммита репликации, или "сбор данных" пройдет по старой информации?
(не уверен, что это вообще валидный сценарий)


Tima
31.07.2017
08:33:06

Kirill
31.07.2017
08:36:06
1.1.54245
ок. значит надо обновляться. у меня 54198. Спасибо!

Kirill
31.07.2017
08:39:13
1)
пока весь запрос не пройдет, данные не должны быть видны — то есть по успешному завершению запроса происходит коммит, и читаются только закоммиченные данные?
если да, то репликация проходит по аналогичному сценарию (с коммитом) ?
если снова да, то поддерживается ли read your writes (запись на ноду А прошла, репликация на ноду Б ещё нет, запрос на чтение на ноду А, гарантируется ли получение последних записей с A) ?
тот же сценарий, но для выполнения второго запроса надо пройтись по нескольким нодам, и собрать зависящую от первого запроса информацию (который в A, и реплицируется) — будет ожидание коммита репликации, или "сбор данных" пройдет по старой информации?
(не уверен, что это вообще валидный сценарий)
Нет никаких гарантий, нет транзакций и нет консистентности )

Oleksandr
31.07.2017
08:39:54

Tima
31.07.2017
08:43:42
:(
ясно, спасибо за ответы
Посмотрите в документацию в раздел репликации. Так же, на каком-то митапе Алексей Миловидов советовал использовать ReplicaMergeTree даже если один сервер, поскольку тогда вставка идёт через Zookeper. И это повышает целостность вставки

Oleksandr
31.07.2017
09:03:18

Tima
31.07.2017
09:06:52
Насколько я знаю, никаких нареканий по надежности вставки данных у CH нет, ни от разработчиков и Яндекс Метрики, ни от других пользователей

Андрей
31.07.2017
10:00:20
Может кто подскажет возможно ли партицию отсоединить от одной таблицы и присоединить к другой? Выполнил детачь партиции за месяц -> успешно, ( партиция переместилась в диреторию detached). Пытаюсь выполнить аттач этой же партиции в другую таблицу, имеющую аналогичную структуру исходной таблицы -> clickhouse пишет что успешно, но при этом партиция не переместилась из директории detached.

Tima
31.07.2017
10:01:44
После детача попробуйте саму папку detached переместить в папку другой таблицы
И уже потом сделать аттач. Но вопрос - зачем делать так? Может лучше INSERT INTO ... SELECT нужного месяца?

Андрей
31.07.2017
10:05:17
Спасибо, помогло: перенес партицию, выполнил аттач -> врезультате SELECT выдал строки перенесенной партиции.
И уже потом сделать аттач. Но вопрос - зачем делать так? Может лучше INSERT INTO ... SELECT нужного месяца?
Для того чтобы выполнить UPDATE данных в исходной таблице: да, вначале будет выполнен INSERT INTO ... SELECT только тех строк которые не будут изменятья во временную таблицу (имеющей аналогичную структуру исходной таблицы), затем во временной таблице будет выполнен INSERT отредактированных данных. После завершения операций INSERT, старая партиция будет отсоединена от исходной таблицы, а новая будет перенесена из временной таблицы в исходную.
Возможно UPDATE нескольхих строк данных в таблице другим способом сделать?


Tima
31.07.2017
10:32:01
Есть такой движок https://clickhouse.yandex/docs/ru/table_engines/replacingmergetree.html
Я сам не пробовал, но судя по описанию, позволяет с некоторой задержкой "обновлять" данные. Т.е. если:
- наличие нескольких версий одной строки не критично (всё равно данные таблицы учавствует в запросах в группировке по уникальному ключу)
- время на слияние не критично
можно использовать этот движок.
Но есть сомнения, что будет быстро сливать на "большом" объеме данных

Google

Kirill
31.07.2017
10:43:34
Ещё для обновления CollapsingMergeTree прекрасно работает https://clickhouse.yandex/docs/ru/table_engines/collapsingmergetree.html

Igor
31.07.2017
11:03:45
Ребята, а в CH есть что-то типа DISTINCT ON (как в PG) в доках я этого не неашел

Tima
31.07.2017
11:51:04
Уточните, что такое DISTINCT ON. Это какая-то оконная функция?

Evgenii
31.07.2017
12:18:13
пароль в логах в открытом виде можно убрать?

Kirill
31.07.2017
12:54:06

Alex
31.07.2017
13:05:29

Roman
31.07.2017
13:06:00
да работа с туплами вообще бомба ) о ней как-то мало акцента
Мне еще нравится IN по туплам)

Вася
31.07.2017
13:14:52
>Если указано DISTINCT, то из всех множеств полностью совпадающих строк результата, будет оставляться только одна строка. Результат выполнения будет таким же, как если указано GROUP BY по всем указанным полям в SELECT-е и не указаны агрегатные функции.

Alexey
31.07.2017
13:30:36

Alexey
31.07.2017
13:31:46
SELECT DISTINCT a, b, c...
SELECT DISTINCT(a, b, c...)
SELECT DISTINCT tuple(a, b, c...)
- всё имеет один эффект.
Но последнее чуть-чуть сложнее в выполнении.
Если нужен DISTINCT по части полей, указанных в SELECT, то можно использовать LIMIT BY.

Roman
31.07.2017
13:35:50
Алексей, видел, что у вас есть секретная либа для работы со строкой юзерагента. За полгода не поменялось ли что-то, чтобы ее хотя бы частично в паблик выложить?

Tima
31.07.2017
13:37:23

Alexey
31.07.2017
13:39:51
На всякий случай: когда эту либу начали разрабатывать, то автор по собственной инициативе выложил её в open-source: https://github.com/highpower/uatraits
Но пользоваться не нужно, потому что:
- она не поддерживается уже 4 года (автор ушёл в Rambler);
- она слишком тормозит, в результате её полностью написали заново, чтобы не так тормозила;
- база тоже устарела и не обновляется - если будете использовать, у вас будут кривые результаты.

Roman
31.07.2017
13:46:59
третий пункт можно было бы актуализировать открытыми данными, но второй пункт конечно смущает )

Tima
31.07.2017
13:48:31

Google

Alexey
31.07.2017
13:52:20
Добрый день. Подскажите, нубу, плиз. Я, возможно, не первый такое спрашиваю, извините, если так.
Вот я хочу тупо таблицы: Страны, Регионы, Города. Это айди и строки всякие. Нет там дат никаких. Делать фиктивный столбец с EventDate ? или есть какой-то адекватный движок для этой задачи, котрый я не заметил в списке? Спасибо заранее.

Roman
31.07.2017
13:54:08
данных получается немного и добавляются они редко?
Тогда движок Dictionary может подойти

Admin
ERROR: S client not available

Alexey
31.07.2017
13:59:29

Tima
31.07.2017
14:02:33

Alexey
31.07.2017
14:02:41

Alexey
31.07.2017
14:02:44
Спасибо!

Tima
31.07.2017
14:06:53
Возможно вам хватит обычных возможностей словарей, если со словарем нужно общаться как с key-value хранилищем: по ключу страны (номеру или коду) получить её полное название

Nikolai
31.07.2017
14:17:17

Kirill
31.07.2017
14:22:49
Вот очень не хватает какого-нибудь движка чтоб с транзакциями и обновлять можно было (можно SQLite воткнуть), мы иногда по сырым данным дописываем/пересчитываем некоторые данные и нужно где-то хранить метаинформацию для демона чтоб он понимал что делать, в КХ сейчас не очень удобно хранить, а сбоку держать ещё одну БД не очень хочется )

Vsevolod
31.07.2017
14:24:16
redis

Kirill
31.07.2017
14:25:24
говорю же, не хочется что-то еще рядом держать )

Alexey
31.07.2017
14:41:37


Alexey
31.07.2017
16:02:00
по поводу транзакций и mvcc: в доке сказано, что их нет, но ведь это некоторое преуменьшение, и, скорее всего, поддерживается ровно один прием
если я прав, то какой?
сценарий 1)
запрос A добавляет данные, запрос Б начинает выполнение после того, как А отработал наполовину, и читает данные
что вернет А? Делается ли слепок данных на момент старта каждого запроса?
сценарий 2)
запросы А и Б одновременно пишут в таблицу, что будет в ней после завершения запросов?
ClickHouse как раз использует MVCC.
Некоторые свойства транзакций есть в минимальном виде:
- вставка каждого блока атомарна и изолирована;
- SELECT-ы видят снапшот данных на момент запроса.
В случае репликации есть два варианта:
- по-умолчанию, асинхронная репликация;
- репликация с подтверждением от кворума (настройка insert_quorum).
В первом случае вы будете видеть вставленные данные сразу после вставки на той реплике, на которую произведена вставка, а на других - с некоторой задержкой.
Во втором случае, есть также возможность включить настройку, которая заставляет читать всегда подтверждённые данные (select_sequential_consistency = 1). Возможно, настройку переименуем, так как ещё не очевидно, какое название лучше подходит.


Oleksandr
31.07.2017
16:47:26
ClickHouse как раз использует MVCC.
Некоторые свойства транзакций есть в минимальном виде:
- вставка каждого блока атомарна и изолирована;
- SELECT-ы видят снапшот данных на момент запроса.
В случае репликации есть два варианта:
- по-умолчанию, асинхронная репликация;
- репликация с подтверждением от кворума (настройка insert_quorum).
В первом случае вы будете видеть вставленные данные сразу после вставки на той реплике, на которую произведена вставка, а на других - с некоторой задержкой.
Во втором случае, есть также возможность включить настройку, которая заставляет читать всегда подтверждённые данные (select_sequential_consistency = 1). Возможно, настройку переименуем, так как ещё не очевидно, какое название лучше подходит.
о как, select_sequential_consistency и insert_quorum в доках я не заметил, так бы половина вопросов отпала :)
спасибо, поиграюсь с этими ручками

Alexey
31.07.2017
17:31:15
Да, они не документированы.

Boris
31.07.2017
17:44:14

f1yegor
01.08.2017
06:18:01
Спам

Igor
01.08.2017
06:18:20

Google

Lex
01.08.2017
06:26:45
/voteforban

Pavel
01.08.2017
06:28:31
/stat@combot

Combot
01.08.2017
06:28:32
combot.org/chat/-1001080295593

Kirill
01.08.2017
06:29:42
например
SELECT * FROM events ORDER BY action_at ASC LIMIT 1 BY (hit_code)
Поймали ограничение по памяти при вставке
DB::Exception: Memory limit (for query) exceeded: would use 27.94 GiB (attempt to allocate chunk of 131072 bytes), maximum: 27.94 GiB.
Делаем
INSERT INTO table SELECT field1, ...fieldN FROM table2 WHERE action_date = '2017-08-01' ORDER BY action_at
При этом вставка без сортировки отрабатывает отлично, собственно как и сам запрос
SELECT COUNT() FROM (SELECT field1, ...fieldN FROM WHERE action_date = '2017-08-01' table2 ORDER BY action_at)
настройки
┌─name───────────────────────────────┬─value───────┬─changed─┐
│ max_bytes_before_external_group_by │ 20000000000 │ 1 │
│ max_bytes_before_external_sort │ 20000000000 │ 1 │
└────────────────────────────────────┴─────────────┴─────────┘
max_insert_block_size/max_threads крутили, не помогает
Что можно покрутить ещё ?


Vladislav
01.08.2017
07:21:23
Просто оставлю это здесь: https://db-engines.com/en/ranking

Vladimir
01.08.2017
07:23:30
это ощущение от рейтинга )

Vladislav
01.08.2017
07:24:45
неее, от рейтинга нужен DBA на MS Access

Tima
01.08.2017
08:21:18


Kirill
01.08.2017
08:22:53
у нас оно выставлено, с самим запросом работает (хотя он и так в пямять влазит), а на INSERT оно не влияет