In Microsoft SQL Server 2008 generiert die Syntax den Fehler "Die PDW-Funktionen (Parallel Data Warehouse) sind nicht aktiviert."

8

Ich habe die folgende virtuelle Spalte aus einem Aggregat über eine sortierte Partition generiert:

MIN(picture_id) OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )

Wenn ich das jedoch ausführe, erhalte ich Folgendes.

Msg 11305, Level 15, State 10, Line 12
The Parallel Data Warehouse (PDW) features are not enabled.

Hier wird es jedoch interessant, ohne eine Sortierreihenfolge auf der Partition funktioniert es:

MIN(picture_id) OVER ( PARTITION BY [360_set] )

Außerdem arbeitet ROW_NUMBER()eine Fensterfunktion (keine Aggregatfunktion) mit einer expliziten Reihenfolge auf der Partition.

ROW_NUMBER() OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC )

Wie kommt es, dass die gewünschte Aussage nicht funktioniert? Wo ist das dokumentiert? Die Versionsinformationen wurden angefordert, dies ist, was ich in Hilfe → Über.

Microsoft SQL Server Management Studio          10.0.5512.0
Microsoft Analysis Services Client Tools        10.0.5500.0
Microsoft Data Access Components (MDAC)         6.1.7601.17514
Microsoft MSXML                                 3.0 6.0 
Microsoft Internet Explorer                     9.10.9200.16635
Microsoft .NET Framework                        2.0.50727.5472
Operating System                                6.1.7601

Das Ergebnis von SELECT @@VERSIONistMicrosoft SQL Server 2008 (SP3) - 10.0.5512.0 (X64) Aug 22 2012 19:25:47 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (VM)

Evan Carroll
quelle
Was ist die genaue Version? Scheint wie ein Fehler. Ich erhalte einen normalen Syntaxfehler für das erste Beispiel am 10.50.1600. Abgesehen davon verstehe ich den Punkt jedoch nicht - was versuchen Sie mit dieser Syntax zu tun?
Jon Seigel
Interessiert es Sie also wirklich, das Ranking nach zu unterteilen [360_set], oder ist dieser Teil irrelevant? Aus Ihrem Kommentar geht hervor, dass die von Ihnen angegebene Formel nur dann wie die Textbeschreibung funktioniert, wenn die Sequenz keine Lücken aufweist. Welche wollen Sie?
Jon Seigel
2
Die order by-Klausel für Aggregate wurde erst in SQL Server 2012 implementiert. Die PDW-Erweiterungen sind nicht sicher.
Martin Smith
2
@ JonSeigel Legt die Reihenfolge der Zeilen für den Fensterrahmen fest. Dies hat natürlich keinen Einfluss auf die Funktionsweise MIN, ändert jedoch die Zeilen in dem Frame, über den ausgeführt MINwird.
Paul White 9
1
@ JonSeigel - Der Standardwert, falls nicht angegeben, ist RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Das Fenster enthält also nur Werte mit picture_idWerten, die kleiner oder gleich denen in der aktuellen Zeile sind.
Martin Smith

Antworten:

16

Die PDW-Funktionen (Parallel Data Warehouse) sind nicht aktiviert.

Dies ist ein Parser-Fehler, der nur in SQL Server 2008 auftritt. Nicht-PDW-Versionen von SQL Server vor 2012 unterstützen die ORDER BYKlausel mit Aggregatfunktionen wie MIN:

Bücher Online-Auszug

Die Unterstützung von Fensterfunktionen wurde 2012 im Vergleich zu der ab SQL Server 2005 verfügbaren Basisimplementierung erheblich erweitert. Die Erweiterungen wurden in Parallel Data Warehouse verfügbar gemacht, bevor sie in das Box-Produkt integriert wurden. Da die verschiedenen Editionen eine gemeinsame Codebasis haben, sind irreführende Fehlermeldungen wie diese möglich.

Wenn Sie interessiert sind, wird der Aufrufstapel, wenn das Aggregat vom Parser überprüft wird, unten angezeigt. Da das Aggregat eine OVERKlausel mit enthält ORDER BY, wird eine Prüfung auf PDW ausgestellt:

Gesamtüberprüfung

Diese Prüfung schlägt sofort mit einem Parserfehler fehl:

Parser Fehler

Glücklicherweise benötigen Sie kein Fensteraggregat, das ORDER BYFraming unterstützt , um Ihr Codeproblem zu lösen.

Paul White 9
quelle
2

Dies wird ein Ergebnis der Zusammenführung der Codebasen der PDW-, Azure- und Box-Version sein. Es werden Nachrichten wie diese angezeigt oder dass Sie sich nicht auf einem Azure-Computer befinden, wenn Sie versuchen, Dinge zu tun, die nur in Azure veröffentlicht wurden.

Bei Martins Frage nach den PDW-Erweiterungen handelt es sich um die Funktionen der T-SQL-Sprache, die nur im PDW-Produkt (Parallel Data Warehouse) implementiert sind.

mrdenny
quelle
Können diese durch einen Hack aktiviert werden? Oder werden sie nicht mit dem Produkt geliefert? Ich frage mich nur, ob sie diese rudimentäre Funktion ernsthaft in Anspruch genommen haben. Es ist nicht so komplex für die DB-Verwendung.
Evan Carroll
3
@EvanCarroll Nein, ORDER BYmit Fensteraggregaten kann in SQL Server 2008 nicht aktiviert werden. Die Funktion wurde nicht "gezogen", sondern erst mit der Version 2012 für Nicht-PDW-SQL Server freigegeben.
Paul White 9
1

Beantwortung als Element der Fehlermeldung. Wie @MartinSmith oben sagte,

Die order by-Klausel für Aggregate wurde erst in SQL Server 2012 implementiert. Die PDW-Erweiterungen sind nicht sicher. - Martin Smith

Dies wird hier offiziell erwähnt. SQL Server 2008 R2 - OVER-Klausel (Transact-SQL)

Bei Verwendung im Kontext einer Ranking-Fensterfunktion kann nur auf Spalten verwiesen werden, die durch die FROM-Klausel verfügbar gemacht werden. Es kann keine Ganzzahl angegeben werden, die die Position des Namens oder Alias ​​einer Spalte in der Auswahlliste darstellt. kann nicht mit aggregierten Fensterfunktionen verwendet werden.

Noch wichtiger ist die Aussprache in SQL Server 2012 - OVER-Klausel (Transact-SQL)

Abhängig von der Rangfolge, dem Aggregat oder der Analysefunktion, die mit der OVER-Klausel verwendet werden, und / oder der möglicherweise nicht unterstützten.

Es sieht also so aus, als ob es 2008 sicherlich nicht verfügbar ist - obwohl diese Fehlermeldung eine wirklich dunkle Art ist, "nicht implementiert" zu sagen , und 2012 sieht es so aus, als ob die offizielle Haltung von Microsoft darin besteht, dass Ihr Kilometerstand variieren kann .

Evan Carroll
quelle