Presto работает медленнее, чем SQL Server - PullRequest
0 голосов
/ 20 ноября 2018

Настроил коннектор SQL Server в Presto и попробовал несколько простых запросов, таких как:

Select count(0) from table_name

или,

Select sum(column_name) from table_name

Оба вышеуказанных запроса выполнялись на сервере SQL в течение 300 мс и вПрестижное выполнение в течение 3 минут.

Это анализ объяснения второго запроса (кажется, что он выполняет сканирование таблицы и извлекает огромное количество данных перед выполнением суммирования), почему он не может перенести оператор суммирования в SQLСам сервер.

    Query Plan                                                       
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Fragment 1 [SINGLE]                                                                                                                                                      
     Cost: CPU 2.98ms, Input: 1 row (9B), Output: 1 row (9B)                                                                                                              
     Output layout: [sum]                                                                                                                                                 
     Output partitioning: SINGLE []                                                                                                                                       
     - Aggregate(FINAL) => [sum:double]                                                                                                                                   
             Cost: ?%, Output: 1 row (9B)                                                                                                                                 
             Input avg.: 1.00 lines, Input std.dev.: 0.00%                                                                                                                
             sum := "sum"("sum_4")                                                                                                                                        
         - LocalExchange[SINGLE] () => sum_4:double                                                                                                                       
                 Cost: ?%, Output: 1 row (9B)                                                                                                                             
                 Input avg.: 0.06 lines, Input std.dev.: 387.30%                                                                                                          
             - RemoteSource[2] => [sum_4:double]                                                                                                                          
                     Cost: ?%, Output: 1 row (9B)                                                                                                                         
                     Input avg.: 0.06 lines, Input std.dev.: 387.30%                                                                                                      

 Fragment 2 [SOURCE]                                                                                                                                                      
     Cost: CPU 1.67m, Input: 220770667 rows (1.85GB), Output: 1 row (9B)                                                                                                  
     Output layout: [sum_4]                                                                                                                                               
     Output partitioning: SINGLE []                                                                                                                                       
     - Aggregate(PARTIAL) => [sum_4:double]                                                                                                                               
             Cost: 0.21%, Output: 1 row (9B)                                                                                                                              
             Input avg.: 220770667.00 lines, Input std.dev.: 0.00%                                                                                                        
             sum_4 := "sum"("total_base_dtd")                                                                                                                             
         - TableScan[sqlserver:sqlserver:table_name:ivpSQLDatabase:table_name  ..
                 Cost: 99.79%, Output: 220770667 rows (1.85GB)                                                                                                            
                 Input avg.: 220770667.00 lines, Input std.dev.: 0.00%                                                                                                    
                 total_base_dtd := JdbcColumnHandle{connectorId=sqlserver, columnName=total_base_dtd, columnType=double}

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Presto не поддерживает агрегатные нажатия, но в качестве обходного пути вы можете создавать представления в исходной базе данных (в вашем случае SQL Server) и запрашивать эти представления из Presto.

0 голосов
/ 21 ноября 2018

Оба примера запросов являются агрегированными запросами, которые дают результат в одну строку.В настоящее время в Presto невозможно выполнить агрегирование в базовое хранилище данных.Условия и выбор столбцов (сужающиеся проекции) сдвигаются вниз, а агрегации - нет.

В результате, когда вы запрашиваете SQL Server из Presto, Presto необходимо прочитать все данные (из заданного столбца), чтобы выполнить агрегирование, поэтому существует большой объем дискового и сетевого трафика.Кроме того, возможно, что SQL Server может оптимизировать определенные агрегаты, поэтому он вообще может пропускать чтение данных (я думаю, здесь).

Presto не подходит в качестве интерфейса для какой-либо другой базы данных.Его можно использовать как таковое, но это имеет некоторые последствия.Presto светится, когда он работает как механизм запросов больших данных (через S3, HDFS или другие хранилища объектов) или как механизм федеративных запросов, где вы объединяете данные из нескольких хранилищ / коннекторов данных.

Редактировать В Presto постоянно ведется работа по улучшению нажатия, в том числе совокупного нажатия.Вы можете отслеживать это в https://github.com/prestosql/presto/issues/18

...