Подскажите как такое может быть: запрос к таблице mergetree select * from table where A and B and C - возвращает записи. Но при этом точно такой же запрос select COLNAME from table where A and B and C - возвращает 0 строк? версия CH 19.17.6
ну 385й баг в КХ про одно и тоже COLNAME был добавлен alter-м?
select count() from( SELECT * FROM radius.radacct_shard WHERE tech = 'XDSL' AND day >= toDate(1591492883852 / 1000) AND timestamp > 1591492883852 AND timestamp < 1591496483852 AND SQM_Acct_Status_Type = 2 AND SQM_Acct_Terminate_Cause != 1 AND SQM_Acct_Terminate_Cause != 10 AND eipMrfId IN (31) AND segment IN (1, 2, 3) AND (eipSubscriberStatus IN (1)) AND (segment is not null) and SQM_Acct_User_Name = '77666693935' )
select count() from( SELECT * FROM radius.radacct_shard WHERE tech = 'XDSL' AND day >= toDate(1591492883852 / 1000) AND timestamp > 1591492883852 AND timestamp < 1591496483852 AND SQM_Acct_Status_Type = 2 AND SQM_Acct_Terminate_Cause != 1 AND SQM_Acct_Terminate_Cause != 10 AND eipMrfId IN (31) AND segment IN (1, 2, 3) AND (eipSubscriberStatus IN (1)) AND (segment is not null) and SQM_Acct_User_Name = '77666693935' )
timestamp > 1591492883852 AND timestamp < 1591496483852 AND
ну т.е. 0 должен строк возвращать, а если сделать мало условий
SELECT * FROM radius.radacct_shard WHERE timestamp > 1591492883852 AND timestamp < 1591496483852 )
алиасы там есть, да. А что с ними можно перемудрить?
в кликхаусе алиасинг глобальный, поэтому если вы пере использовали в select название колонки в таблице, то в WHERE условие будет использовать именно алиас
select number, number% 3 as number FROM numbers(10) WHERE number = 2;
timestamp > 1591492883852 AND timestamp < 1591496483852 AND
ну т.е. 0 должен строк возвращать, а если сделать мало условий
SELECT * FROM radius.radacct_shard WHERE timestamp > 1591492883852 AND timestamp < 1591496483852 )
?
если сделать мало условий - тогда возвратит много записей и это верный результат.
Изменил запрос до еще более странного: SELECT * FROM radius.radacct_shard WHERE tech = 'XDSL' AND day >= toDate(1591492883852 / 1000) AND timestamp > 1591492883852 AND timestamp < 1591496483852 AND SQM_Acct_Status_Type = 2 AND SQM_Acct_Terminate_Cause != 10 AND SQM_Acct_Terminate_Cause != 10 AND eipMrfId IN (31) AND segment IN (1, 2, 3) AND (eipSubscriberStatus IN (1)) AND (segment is not null) and SQM_Acct_User_Name = '77666693935'
См 2 раза указано условие SQM_Acct_Terminate_Cause != 10 - так возвращает несколько записей (неправильных) Если написать один раз условие SQM_Acct_Terminate_Cause != 10 - возвращает 0 записей (корректное поведение)
если сделать мало условий - тогда возвратит много записей и это верный результат.
Изменил запрос до еще более странного: SELECT * FROM radius.radacct_shard WHERE tech = 'XDSL' AND day >= toDate(1591492883852 / 1000) AND timestamp > 1591492883852 AND timestamp < 1591496483852 AND SQM_Acct_Status_Type = 2 AND SQM_Acct_Terminate_Cause != 10 AND SQM_Acct_Terminate_Cause != 10 AND eipMrfId IN (31) AND segment IN (1, 2, 3) AND (eipSubscriberStatus IN (1)) AND (segment is not null) and SQM_Acct_User_Name = '77666693935'
См 2 раза указано условие SQM_Acct_Terminate_Cause != 10 - так возвращает несколько записей (неправильных) Если написать один раз условие SQM_Acct_Terminate_Cause != 10 - возвращает 0 записей (корректное поведение)
аа, я думал timestamp одинаковый ясно
попробуйте 19.17.9.60, был баг про > 10 условий в where
DB::Exception: WRITE locking attempt on "data_flat.flat_temp" has timed out! (120000ms) Possible deadlock avoided. Client should retry
Стабильно раз в несколько дней. И ничто не помгает - только полный перезапуск КХ и ручное вычищение партиций, "которые должны быть удалены". Ну это ж не дело... Заколебало, если честно...