@clickhouse_ru

Страница 121 из 723
Igor
18.04.2017
07:29:38
INSERT INTO test VALUES ('kjh', '', 0, today()); на вашем примере

Andrey
18.04.2017
07:30:23
:) insert into test values ( 'kjh','',,'1990-08-14') INSERT INTO test VALUES Ok. 1 rows in set. Elapsed: 0.034 sec. :) select * from test SELECT * FROM test ┌─ts──┬─ts2─┬─ti2─┬───────date─┐ │ kjh │ │ 0 │ 1990-08-14 │ └─────┴─────┴─────┴────────────┘ 1 rows in set. Elapsed: 0.007 sec. :)

Получается что он не значение поумолчанию вписал, а то которое я передал, т.е. ''

Igor
18.04.2017
07:31:22
да. если хотите значение по умолчанию, то укажите столбцы, которые собираетесь вставлять. не указывая при этом те, которые хотите, чтобы были по умолчанию )

Google
Igor
18.04.2017
07:31:43
INSERT INTO test (ts, date) VALUES ('asd', today());

в документации начинается со слов "В запросе может быть опционально указан список столбцов для вставки."

Andrey
18.04.2017
07:34:18
Ок, понял Вас. Спасибо. Это можно считать багом и написать git-issue, или это ожидаемое и стандартное поведение для String?

Есть ещё один вопросик. При инсёрте ловлю эксепшен из Functions/FunctionsArray.cpp throw Exception{"Function array requires at least one argument.", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH}; Можете помочь разобраться что прокидывается в NUMBER_OF_ARGUMENTS_DOESNT_MATCH и при каком кейсе должно вылететь это исключение?

Igor
18.04.2017
08:13:28
функция array(), которая массив создает, принимает 1 и более аргументов вы передаете ноль, судя по эксепшену > Должен быть передан хотя бы один аргумент, так как иначе непонятно, какого типа создавать массив.

f1yegor
18.04.2017
09:07:41
updated https://github.com/crobox/clickhouse-scala-client

Рулон
18.04.2017
09:37:18
Привет! Поправте меня пожалуйста: есть цена 650.00р я умножаю ее на 1000000, чтобы вставить в Uint64 ругается на ошибку 65000000.00

Igor
18.04.2017
09:37:30
toUInt64()

Рулон
18.04.2017
09:38:46
а зачем и умножать и еще и конвертить?

Ilya
18.04.2017
09:40:14
Рулон
18.04.2017
09:40:28
я вообще пытаюсь распарсить csv (insert into T format csv)

Igor
18.04.2017
09:40:53
Рулон
18.04.2017
09:42:09
потому что 650.01 * 100 = 65001.00
Спасибо. только написано что не на 100 а на 1000000

Google
Igor
18.04.2017
09:42:24
да какая разница

Рулон
18.04.2017
09:43:42
(insert into T format csv) и где сюда еще и toUInt64() воткнуть?

Igor
18.04.2017
09:44:14
здесь нигде. а где вы умножаете цену 650.00 на 1сколькотамуваснулей?

вот там же можно и от дробной части избавляться

Рулон
18.04.2017
09:46:10
Все. Усек))

Спасибо за помошь))

Константин
18.04.2017
10:12:19
Добрый день!

Сложилась такая ситуация:

изза человеческого фактора, были задублированы данные за некторое время

есть уникальный идентификатор каждого события

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

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

дропать все таблицу не катит

там больше 1 млрд событий

Igor
18.04.2017
10:14:34
можно дропнуть месяц (partition)

Константин
18.04.2017
10:14:48
вроде как КХ хранит данные порционно

Igor
18.04.2017
10:15:57
да, я и говорю https://clickhouse.yandex/reference_ru.html#Манипуляции%20с%20партициями%20и%20кусками

можете перенести данные за месяц (недублированные) в отдельную таблицу грохнуть месяц в старой таблице и INSERTнуть в старую таблицу недублированные данные из новой

Константин
18.04.2017
10:26:02
https://drive.google.com/file/d/0B3kh1B0hBMbuamlreGdYUzBjdlU/view

Google
Константин
18.04.2017
10:26:14
я посмотрел, что у меня партиции по дням, а не месяцам

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

Igor
18.04.2017
10:28:18
это не партиции

это куски (или как там они правильно называются)

Константин
18.04.2017
10:32:08
что будет если физически удалить куски данных из партиции?

теоретически - можно задетачить месяц

поправить куски - вставив уникальные данные и потом заново заатачить данные

Igor
18.04.2017
10:36:56
тут люди с битыми данными мучаются, а вы их самостоятельно побить хотите ) CREATE TABLE table_april AS table; INSERT INTO table_april SELECT * FROM table WHERE date >= '2017-04-01' AND ...; -- или как там от дублей избавитесь ALTER TABLE table DETACH PARTITION '201704'; INSERT INTO table SELECT * FROM table_april; что-то типа того должно пройти безболезненно

Kirill
18.04.2017
11:05:06
есть уникальный идентификатор каждого события
учитесь жить с такими дубликатами, limit by вам в помощь https://clickhouse.yandex/reference_en.html#LIMIT N BY modifier

Константин
18.04.2017
11:06:52
немного не понимаю, как связаны задвоенные данные с LIMIT

и я бы посмотрел на вас, если бы вам пришлось заплатить в 15 раз больше, чем вы заработали ?

при условии, если "жить с дубликатами"

Kirill
18.04.2017
11:09:27
limit by это не limit, если у вас есть уникальное значение то по нему можно отсекать только первое появившееся, а остальные откидывать, посмотрите в документации

это как если бы вы оконной функцией посчитали ранк с овер бай и вычитали записи только с ранком = 1

пример CREATE TABLE diff_test ( session_id String, price Float64, action_at DateTime ) ENGINE = Memory; insert into diff_test values ('session1', 0.42, '2017-02-14 10:16:00'), ('sessiondup1', 0.84, '2017-02-14 10:18:00'), ('sessiondup1', 0.42, '2017-02-14 10:16:00'), ('session2', 0.42, '2017-02-14 10:19:00'), ('sessiondup2', 0.42, '2017-02-14 10:19:00'), ('sessiondup2', 0.42, '2017-02-14 10:19:00'), ('session2', 0.42, '2017-02-14 10:19:00'), ('session3', 0.42, '2017-02-14 10:19:00'); и select * from diff_test order by action_at limit 1 by session_id; SELECT * FROM diff_test ORDER BY action_at ASC LIMIT 1 BY session_id ┌─session_id──┬───────────────price─┬───────────action_at─┐ │ session1 │ 0.42000000000000004 │ 2017-02-14 10:16:00 │ │ sessiondup1 │ 0.42000000000000004 │ 2017-02-14 10:16:00 │ │ session2 │ 0.42000000000000004 │ 2017-02-14 10:19:00 │ │ sessiondup2 │ 0.42000000000000004 │ 2017-02-14 10:19:00 │ │ session3 │ 0.42000000000000004 │ 2017-02-14 10:19:00 │ └─────────────┴─────────────────────┴─────────────────────┘ 5 rows in set. Elapsed: 0.016 sec.

Константин
18.04.2017
11:21:11
я понял, не знал

спасибо!

Nik
18.04.2017
11:35:12
если в каждом запросе использовать limit by - это сильно скажется на скорости выполнения запроса? Мы ведь используем доп группировку

Kirill
18.04.2017
11:39:42
если в каждом запросе использовать limit by - это сильно скажется на скорости выполнения запроса? Мы ведь используем доп группировку
мы вынуждены использовать limit by, раньше было другое, костыльное, решение и оно работало медленнее

например: если мобильные прокси дублируют вам клики/показы, но на них есть уникальный код, то без этого тут никак :)

Google
Roman
18.04.2017
12:28:30
Добрый день! Кто-нибудь сталкивался с задачей сравнения данных по периодам? Например, показатели за эту неделю по сравнению с показателями прошлой недели. Эту задачу можно решить одним запросом, но он выглядит довольно громоздко. Быть может, у кого-то был опыт решения аналогичной задачи?

Pavel
18.04.2017
12:28:51
Приветствую!

А почему бы не заюзать графану для этого?

тупо сделать два графика и врубить "cursor following"

тогда ведя курсор по одному графику он будет двигаться и по другому, синхронно

Pavel
18.04.2017
12:29:53
если потребитель этих данных - хомо сапиенс, тогда сработает я думаю ))

Roman
18.04.2017
12:34:09
я и заюзал) данные нужны в табличной форме и у меня получилось это сделать, но запрос на сравнение выглядит примерно так SELECT (ReqsNow / ReqsPrev - 1) Reqs FROM ( SELECT minus($to, $from) range, toDateTime(minus($from, range)) prevFrom, sumIf(Reqs, (DateTime BETWEEN prevFrom AND $from)) ReqsPrev, sumIf(Reqs, (DateTime BETWEEN $from AND $to)) ReqsNow FROM $table WHERE DateTime BETWEEN prevFrom AND $to )

и меня не покидает мысль, что это можно решить более оптимальным способом

Vitaliy
18.04.2017
12:35:57
@hagen1778 не проще просто сгруппировать данные по нужным дименшинам (простой group by) для этой неделе и прошлую, а визуализировать результат уже в приложении? пивот таблицей (добавить измерение "неделя") или чартом

Vladislav
18.04.2017
12:57:15
можете подсказать, как вставить пустой массив не изнутри clickhouse-client? при [] получаю ошибку DB::Exception: Function array requires at least one argument..

в clickhouse-client работает select emptyArrayUInt32()

papa
18.04.2017
12:59:55
в clickhouse-client и insert into x values([]) работает.

Vladislav
18.04.2017
13:25:23
а без values можно как-нибудь? нужно заимпортить TSV

в clickhouse-client и insert into x values([]) работает.

Aleksey
18.04.2017
13:52:38
Добрый день!

Столкнулся с проблемой дубликатов. В таблице есть данные, которые нужно переодически обновлять. Пытаюсь сделать это через инсерт. Подскажите, пожалуйста, какие есть пути решения данной задачи в clickhouse. Спасибо.

Google
Aleksey
18.04.2017
13:56:08
Пробовал ReplacingMergeTree, но он дубликаты схлопывает только при слиянии. Нужно выбирать только самые свежие.

papa
18.04.2017
13:57:53
argMax(column, datetime), final ?

Aleksey
18.04.2017
13:58:41
попробую, спасибо.

Рулон
18.04.2017
13:59:20
Чуть выше предложили использовать Limit BY

Aleksey
18.04.2017
13:59:59
LIMIT BY вернет первое значение, насколько я понимаю. нужно последнее.

Kirill
18.04.2017
14:02:10
сделайте ему order by по дате и все

Maksim
18.04.2017
14:11:16
Добрый день. через curl шлю запрос. прилетает жирный ответ (куча строк) за счет чего время отправки и получение достигает около 2 минут. как тут быть?

Igor
18.04.2017
14:12:58
выводить не на экран, а в файлик, например

это никак не относится к КХ, как мне кажется

есть чатики по никсам

Рулон
18.04.2017
14:13:57
Они не такие классные как наш ))

Maksim
18.04.2017
14:14:27
выводить не на экран, а в файлик, например
в каком смысле в файлик выводить? на сервер кх сразу в файлик писать?

Igor
18.04.2017
14:15:00
а в каком смысле "через curl шлю запрос"? какой, SELECT, INSERT?

Igor
18.04.2017
14:16:14
ну. отображаются результаты запроса у вас в терминале? отображаются. занимает время это все напечатать? занимает. вместо того, чтобы отображать на экране, можно записывать в файл. нет, не на сервере. локально. вы ж не с сервера запрос отправляете.

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