Size: a a a

ClickHouse не тормозит

2021 January 12

SP

Sergey Platonov in ClickHouse не тормозит
хм, в других местах его NULL устраивает
источник

SP

Sergey Platonov in ClickHouse не тормозит
попробую от них избавиться
источник

SP

Sergey Platonov in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
ну КХ ожидает \N или ,,
можно через input function перекодировать, я бы sed-м заменил
да, с ,, и Nullable(DateTime) все ОК, Спасибо!
источник

R

Roman in ClickHouse не тормозит
Sergey Platonov
в CSV в поле с DateTime есть NULL-ы. Как сделать чтобы они не приводили к ошибке?
Вставит значение по умолчанию, начало эпохи, например
источник

SP

Sergey Platonov in ClickHouse не тормозит
нет NULL не вставлял
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
в CSV нету такого: Null. Как для строки отличить, там Null или строка "Null" ? Поэтому в CSV используется \N
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
в последних КХ можно задать что пустая ячейка ,, воспринимается как default
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
--input_format_defaults_for_omitted_fields arg                   For input data calculate default expressions for omitted fields (it works for JSONEachRow, CSV and TSV formats).
источник

SC

Sarcastic Cat in ClickHouse не тормозит
Господа, есть вопрос (возможно даже два):
Основная задача: посчитать количество событий в определенном промежутке с группировкой по дням/часам/etc. и с заполнением нулями промежутков, в которые событий нет.
Я делаю вот так для периодов в день (и это первый вопрос, возможно это неправильно?):
SELECT 
   count(*) AS cnt,
   toStartOfInterval(time, toIntervalDay(1)) AS period
FROM metrics
WHERE (toDate(time) >= '2021-01-11') AND (toDate(time) <= '2021-01-12')
GROUP BY period
ORDER BY period ASC
UNION ALL
SELECT
   0 AS cnt,
   arrayJoin(timeSlots(toDateTime(toDate('2021-01-11'), 'UTC'), toUInt32(dateDiff('second', toDateTime(toDate('2021-01-11')), toDateTime(toDate('2021-01-12')))), toUInt32(86400))) AS period
GROUP BY period
ORDER BY period ASC

проблема в том, что в ответ я получаю
┌────cnt─┬──────────────period─┐
│ 391722 │ 2021-01-11 00:00:00 │
│ 468620 │ 2021-01-12 00:00:00 │
└────────┴─────────────────────┘
┌─cnt─┬──────────────period─┐
│   0 │ 2021-01-11 03:00:00 │
│   0 │ 2021-01-12 03:00:00 │
└─────┴─────────────────────┘

т.е. нулевые почему-то в московской таймзоне
в то же время, если сделать этот подзапрос отдельно то все хорошо:
SELECT timeSlots(toDateTime(toDate('2021-01-11'), 'UTC'), toUInt32(dateDiff('second', toDateTime(toDate('2021-01-11')), toDateTime(toDate('2021-01-12')))), toUInt32(86400)) AS slots

┌─slots─────────────────────────────────────────┐
│ ['2021-01-11 00:00:00','2021-01-12 00:00:00'] │
└───────────────────────────────────────────────┘

wtf?
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Sarcastic Cat
Господа, есть вопрос (возможно даже два):
Основная задача: посчитать количество событий в определенном промежутке с группировкой по дням/часам/etc. и с заполнением нулями промежутков, в которые событий нет.
Я делаю вот так для периодов в день (и это первый вопрос, возможно это неправильно?):
SELECT 
   count(*) AS cnt,
   toStartOfInterval(time, toIntervalDay(1)) AS period
FROM metrics
WHERE (toDate(time) >= '2021-01-11') AND (toDate(time) <= '2021-01-12')
GROUP BY period
ORDER BY period ASC
UNION ALL
SELECT
   0 AS cnt,
   arrayJoin(timeSlots(toDateTime(toDate('2021-01-11'), 'UTC'), toUInt32(dateDiff('second', toDateTime(toDate('2021-01-11')), toDateTime(toDate('2021-01-12')))), toUInt32(86400))) AS period
GROUP BY period
ORDER BY period ASC

проблема в том, что в ответ я получаю
┌────cnt─┬──────────────period─┐
│ 391722 │ 2021-01-11 00:00:00 │
│ 468620 │ 2021-01-12 00:00:00 │
└────────┴─────────────────────┘
┌─cnt─┬──────────────period─┐
│   0 │ 2021-01-11 03:00:00 │
│   0 │ 2021-01-12 03:00:00 │
└─────┴─────────────────────┘

т.е. нулевые почему-то в московской таймзоне
в то же время, если сделать этот подзапрос отдельно то все хорошо:
SELECT timeSlots(toDateTime(toDate('2021-01-11'), 'UTC'), toUInt32(dateDiff('second', toDateTime(toDate('2021-01-11')), toDateTime(toDate('2021-01-12')))), toUInt32(86400)) AS slots

┌─slots─────────────────────────────────────────┐
│ ['2021-01-11 00:00:00','2021-01-12 00:00:00'] │
└───────────────────────────────────────────────┘

wtf?
TZ свойство типа (свой-во колонки), а не значения. В metrics TZ Moscow
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
order by with fill наверное в этом случае сам заполнит
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
SELECT t
FROM
(
   SELECT toDateTime('2016-06-15 23:00:00', 'Asia/Yekaterinburg') AS t
   UNION ALL
   SELECT toDateTime('2016-06-15 23:00:00', 'UTC') AS t
)

┌───────────────────t─┐
│ 2016-06-15 23:00:00 │
└─────────────────────┘
┌───────────────────t─┐
│ 2016-06-16 04:00:00 │
└─────────────────────┘


SELECT t
FROM
(
   SELECT toDateTime('2016-06-15 23:00:00', 'UTC') AS t
   UNION ALL
   SELECT toDateTime('2016-06-15 23:00:00', 'Asia/Yekaterinburg') AS t
)

┌───────────────────t─┐
│ 2016-06-15 23:00:00 │
└─────────────────────┘
┌───────────────────t─┐
│ 2016-06-15 18:00:00 │
└─────────────────────┘
источник

SC

Sarcastic Cat in ClickHouse не тормозит
вспомнить бы, почему я не стал использовать fill
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
SELECT
   t,
   toTypeName(t)
FROM
(
   SELECT toDateTime('2016-06-15 23:00:00', 'UTC') AS t
   UNION ALL
   SELECT toDateTime('2016-06-15 23:00:00', 'Asia/Yekaterinburg') AS t
)

┌───────────────────t─┬─toTypeName(t)───┐
│ 2016-06-15 18:00:00 │ DateTime('UTC') │
└─────────────────────┴─────────────────┘
┌───────────────────t─┬─toTypeName(t)───┐
│ 2016-06-15 23:00:00 │ DateTime('UTC') │
└─────────────────────┴─────────────────┘
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
SELECT
   t,
   toTypeName(t)
FROM
(
   SELECT toDateTime('2016-06-15 23:00:00', 'Asia/Yekaterinburg') AS t
   UNION ALL
   SELECT toDateTime('2016-06-15 23:00:00', 'UTC') AS t
)

┌───────────────────t─┬─toTypeName(t)──────────────────┐
│ 2016-06-15 23:00:00 │ DateTime('Asia/Yekaterinburg') │
└─────────────────────┴────────────────────────────────┘
┌───────────────────t─┬─toTypeName(t)──────────────────┐
│ 2016-06-16 04:00:00 │ DateTime('Asia/Yekaterinburg') │
└─────────────────────┴────────────────────────────────┘
источник