*
                  
                  
                  FROM (
                  
                  
                      SELECT
                  
                  
                          timestamp,
                  
                  
                          rid,
                  
                  
                          bs,
                  
                  
                          h,
                  
                  
                          count() OVER w AS cnt,
                  
                  
                          row_number() OVER w AS rn
                  
                  
                      FROM table
                  
                  
                      WHERE
                  
                  
                          timestamp BETWEEN '2021-08-25 00:00:00' AND '2021-08-25 23:59:59'
                  
                  
                          AND component != 'ec'
                  
                  
                          AND notEmpty(rid)
                  
                  
                          AND tt = 'u'
                  
                  
                      WINDOW w AS (PARTITION BY timestamp, rid, c, cr)
                  
                  
                  )
                  
                  
                  WHERE cnt > 1
                  
                  
                  Сейчас работает более-менее ок (жрёт 20 гб памяти), но при добавлении более тяжёлых колонок выжирает всю память.
                  
                  
                
 Ivan
                          Kalinin
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ivan
                          Kalinin
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  таблица отсортирована по timestamp, хочу найти дубликаты по timestamp, rid, c, cr
а чем вам обычный group by не угодил? SELECT timestamp, rid, c, cr, any(bs), any(h) FROM ( SELECT timestamp, rid, c, cr bs, h FROM table WHERE timestamp BETWEEN '2021-08-25 00:00:00' AND '2021-08-25 23:59:59' AND component != 'ec' AND notEmpty(rid) AND tt = 'u' ) group by timestamp, rid, c, cr WHERE count() > 1 Не очень понятно чего вы ожидаете от bs & h но если нужны все значения, то можно сделать groupArray/arrayJoin
 Ivan
                          Kalinin
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ivan
                          Kalinin
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  в память не влезает практически моментально
set distributed_aggregation_memory_efficient=1 (default from 21.3) set max_bytes_before_external_group_by='40G' max_threads=1
 Ivan
                          Kalinin
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ivan
                          Kalinin
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  пыщь
А версия какая?
 Ivan
                          Kalinin
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Ivan
                          Kalinin
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  21.3 последняя
Обсуждают сегодня