2017-02-10 8 views
2

Bei Benchmarks zwischen Impala und PrestoDB haben wir festgestellt, dass die Erstellung von Pivot-Tabellen in Imapala ziemlich schwierig ist, da es keine Cube-Operatoren wie Presto gibt. Hier sind zwei Beispiele in Presto:Cubeoperatoren auf Impala

Der CUBE-Operator generiert alle möglichen Gruppierungssätze (d. H. Einen Leistungssatz) für eine bestimmte Gruppe von Spalten. Zum Beispiel kann die Abfrage: `

SELECT origin_state, destination_state, sum(package_weight) 
FROM shipping 
GROUP BY CUBE (origin_state, destination_state); 

entspricht:

SELECT origin_state, destination_state, sum(package_weight) 
FROM shipping 
GROUP BY GROUPING SETS (
(origin_state, destination_state), 
(origin_state), 
(destination_state), 
()); 

Ein weiteres Beispiel ist der ROLLUP Operator. Vollständige Dokumentation ist hier: https://prestodb.io/docs/current/sql/select.html.

Es ist nicht syntatic Zucker, weil PRESTO einen Tabellenscan für ganze Abfrage durchführt - so können Sie mithilfe dieser Operatoren Pivot-Tabelle in einer Anforderung erstellen Impala müssen 2-3 Abfragen ausführen.

Gibt es eine Möglichkeit, dies mit einer Abfrage/Tabelle-Scan in Impala Instaead von 3 zu tun? Andernfalls wird die Leistung beim Erstellen einer beliebigen Pivot-Tabelle schrecklich.

Antwort

1

Wir können Impala Windo-Funktionen verwenden, aber anstelle der einzelnen Spaltenausgabe erhalten Sie 3 Spalten.

SELECT origin_state, 
     destination_state, 
     SUM(package_weight) OVER (PARTITION BY origin_state, destination_state) AS pkgwgrbyorganddest, 
     SUM(package_weight) OVER (PARTITION BY origin_state) AS pkgwgrbyorg, 
     SUM(package_weight) OVER (PARTITION BY destination_state) AS pkgwgrbydest 
FROM shipping; 
+0

ich bin nicht sicher, Wetter dies wird Ihnen helfen oder nicht, aber Sie werden Idee über Analytic Funktionen –

+0

Link zu erhalten: https: //www.cloudera.com/documentation/enterprise/5-6-x/topics/ impala_analytic_functions.html # over –