Сравнение даты и времени в Clickhouse не работает должным образом - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь сравнить дату и время в кликхаусе. Но похоже, что это работает каким-то проводным способом. В моей таблице есть столбец, с которым я хочу сравнить (now (), 'UTC'). Если значение datetime в этом столбце меньше, чем время (now (), UTC), чем я хочу выбрать данные из этой записи.

Я создал таблицу наподобие

create table my_table (`mytime` DateTime, `data' [type]) ENGINE= engine

Я хочу, чтобы очередь была похожа на Select data from my_table where mytime < toDateTime(now(), 'UTC')

Даже если mytime> toDateTime (now (), 'UTC') всегда учитывает mytime

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Мне кажется, что что-то может не соответствовать тому, как вы вставили данные или в вашей версии ClickHouse есть ошибка.

В следующем примере показано, как выполнить то, что вы пытаетесь сделать так, чтобы на моем сервере 19.15.4.10 работало, как и ожидалось, для выбора только более ранней строки. Обратите внимание на select sleep (), чтобы убедиться, что вызовы now () отличаются.

drop table if exists my_table;
create table my_table (mytime DateTime, data String) engine = Memory;
insert into my_table values(now(), 'a');
select sleep(1);
insert into my_table values(toDateTime('2020-01-01 00:00:00', 'UTC'), 'b');
select * from my_table where mytime < now();
select * from my_table where mytime < toDateTime(now(), 'UTC');

На моем сервере не имеет значения, выбираете ли вы сейчас () или конвертируете его. Я также попробовал то, как вы изначально определили таблицу, и это тоже работает. Отсюда мысль, что что-то не так с вашими данными.

0 голосов
/ 12 ноября 2019

Причина этой проблемы была в clickhouse, она принимает DateTime и DateTime ('UTC') как разные объекты, поэтому сравнение между ними не работает, как ожидалось. Поскольку я хотел провести сравнение с (now (), 'UTC'), я должен изменить тип mytime на DateTime ('UTC').

Я должен изменить таблицу на

create table my_table (`mytime` DateTime ('UTC'), `data' [type]) ENGINE= engine

...