
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

Google

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

Ilya
18.04.2017
09:42:31

Рулон
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

Константин
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
например: если мобильные прокси дублируют вам клики/показы, но на них есть уникальный код, то без этого тут никак :)

Google

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

Pavel
18.04.2017
12:28:51
Приветствую!
А почему бы не заюзать графану для этого?
тупо сделать два графика и врубить "cursor following"
тогда ведя курсор по одному графику он будет двигаться и по другому, синхронно

papa
18.04.2017
12:29:42

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) для этой неделе и прошлую, а визуализировать результат уже в приложении? пивот таблицей (добавить измерение "неделя") или чартом

papa
18.04.2017
12:37:06
у нас и на экран запросы бывают.

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

Roman
18.04.2017
12:58:08

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?

Maksim
18.04.2017
14:15:36

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

Maksim
18.04.2017
14:16:17