таблиц в VIEW с JOIN. clickhouse 21.3.2.5
В частности - почему-то без буферных таблиц мы упёрлись в память в запросе, а при использовании буферной таблицы в память не упираемся. WHERE не пробрасывается вглубь VIEW без буферной таблицы.
Никто с таким не сталкивался ?
diff для explain этих запросов выглядит так (1.e - с буфером, 2.e - без буфера):
$ diff -ur 1.e 2.e
--- 1.e 2021-04-29 15:07:38.467669770 +0300
+++ 2.e 2021-04-29 15:08:07.536863165 +0300
@@ -54,12 +54,8 @@
Expression (Projection)
CreatingSets (Create sets before main query execution)
Expression (Before ORDER BY)
- Filter (WHERE)
- SettingQuotaAndLimits (Set limits and quota after reading from storage)
- Union (Unite sources from Buffer table)
- SettingQuotaAndLimits (Lock destination table for Buffer)
- ReadFromStorage (MergeTree)
- ReadFromPreparedSource (Read from buffers of Buffer table)
+ SettingQuotaAndLimits (Set limits and quota after reading from storage)
+ ReadFromStorage (MergeTree)
CreatingSet (Create set for subquery)
Expression ((Projection + Before ORDER BY))
SettingQuotaAndLimits (Set limits and quota after reading from storage)
в смысле с буфферной таблицей where проталкивается вниз?
да, именно так. с буферной проталкивается, без неё нет
сломали значит что-то в 21.3
А в другой таблице обратная ситуация - WHERE не проталкивается для буферной таблицы: $ diff -ur 1.e1 2.e1 --- 1.e1 2021-04-29 18:24:32.834374174 +0300 +++ 2.e1 2021-04-29 18:24:57.358548141 +0300 @@ -17,16 +17,12 @@ Filter ((WHERE + Projection)) CreatingSets (Create sets before main query execution) Expression (Before ORDER BY) - Filter (WHERE) - Join (JOIN) - Expression (Before JOIN) - ArrayJoin (ARRAY JOIN) - Expression (Before ARRAY JOIN) - SettingQuotaAndLimits (Set limits and quota after reading from storage) - Union (Unite sources from Buffer table) - SettingQuotaAndLimits (Lock destination table for Buffer) - ReadFromStorage (MergeTree) - ReadFromPreparedSource (Read from buffers of Buffer table) + Join (JOIN) + Expression (Before JOIN) + ArrayJoin (ARRAY JOIN) + Expression (Before ARRAY JOIN) + SettingQuotaAndLimits (Set limits and quota after reading from storage) + ReadFromStorage (MergeTree) CreatingSet (Create set for JOIN) Expression ((Projection + Before ORDER BY)) SettingQuotaAndLimits (Set limits and quota after reading from storage)
ну это все нормально. Там еще 500 мест где push-down не доделан.
нет, тут тоже самое. Это я туплю.
Обсуждают сегодня