In Microsoft SQL Server 2008, la sintassi genera l'errore "Le funzionalità Parallel Data Warehouse (PDW) non sono abilitate".


8

Ho la seguente colonna virtuale generata da un aggregato su una partizione ordinata,

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

Tuttavia, quando lo eseguo, ottengo quanto segue.

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

È qui che diventa interessante, però, senza un ordinamento sulla partizione, funziona:

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

Inoltre, ROW_NUMBER()una funzione finestra (non una funzione aggregata) funziona con un ordine esplicito sulla partizione.

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

Come mai l'affermazione desiderata non funziona? Dove è documentato? Sono state richieste le informazioni sulla versione, questo è quello che ho in Aiuto → Informazioni.

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

Il risultato SELECT @@VERSIONèMicrosoft 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)


Qual è la versione esatta? Sembra un bug. Ottengo un normale errore di sintassi per il primo esempio il 10.50.1600. A parte questo, però, non vedo il punto: cosa stai cercando di fare con questa sintassi?
Jon Seigel,

Quindi ti interessa davvero dividere la classifica per [360_set], o quella parte è irrilevante? Inoltre, dal tuo commento, la formula che hai dato funziona solo come la descrizione del testo se non ci sono spazi vuoti nella sequenza. Quale vuoi?
Jon Seigel,

2
La clausola order by per gli aggregati non è stata implementata fino a SQL Server 2012. Non sono sicuro di quali siano le estensioni PDW.
Martin Smith,

2
@JonSeigel Imposta l'ordine delle righe per la cornice della finestra. MINOvviamente non influisce sul modo in cui funziona, ma cambia le righe nel frame su cui MINviene eseguita.
Paul White 9

1
@JonSeigel: l'impostazione predefinita, se non specificata, è RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Quindi la finestra include solo valori con picture_idvalori inferiori o uguali a quelli nella riga corrente.
Martin Smith,

Risposte:


16

Le funzionalità Parallel Data Warehouse (PDW) non sono abilitate.

Questo è un bug del parser che esiste solo in SQL Server 2008. Le versioni non PDW di SQL Server precedenti al 2012 non supportano la ORDER BYclausola con funzioni aggregate come MIN:

Estratto di libri online

Il supporto delle funzioni di windowing è stato notevolmente ampliato nel 2012, rispetto all'implementazione di base disponibile a partire da SQL Server 2005. Le estensioni sono state rese disponibili in Parallel Data Warehouse prima di essere incorporate nel prodotto box. Poiché le varie edizioni condividono una base di codice comune, sono possibili messaggi di errore fuorvianti come questo.

Se sei interessato, lo stack di chiamate quando l'aggregato viene verificato dal parser è mostrato di seguito. Poiché l'aggregato ha una OVERclausola con ORDER BY, viene emesso un controllo per PDW:

Verifica aggregata

Questo controllo fallisce immediatamente con un errore del parser:

Errore del parser

Fortunatamente, non è necessario un aggregato con finestre che supporti l' ORDER BYinquadramento per risolvere il problema del codice.


2

Questo sarà il risultato dell'unione di basi di codice PDW, Azure e versione box. Inizieremo a vedere messaggi come questo o che non sei su una macchina Azure quando provi a fare cose che sono state rilasciate solo in Azure.

Per quanto riguarda la domanda di Martin su cosa siano le estensioni PDW, queste sarebbero le caratteristiche del linguaggio T-SQL che sono implementate solo nel prodotto Parallel Data Warehouse (PDW).


Questi possono essere abilitati tramite un hack? Oppure non vengono spediti con il prodotto? Mi chiedo solo se hanno seriamente tirato fuori quella caratteristica rudimentale? Non è così complesso per l'uso di DB.
Evan Carroll,

3
@EvanCarroll No, ORDER BYcon aggregati con finestre non possono essere abilitati in SQL Server 2008. La funzionalità non è stata "estratta", non è stata rilasciata per SQL Server non PDW fino alla versione 2012.
Paul White 9

1

Rispondere a questo come elemento del messaggio di errore. Come ha detto @MartinSmith sopra,

La clausola order by per gli aggregati non è stata implementata fino a SQL Server 2012. Non sono sicuro di quali siano le estensioni PDW. - Martin Smith

Questo è menzionato ufficialmente qui SQL Server 2008 R2 - Clausola OVER (Transact-SQL)

Se utilizzato nel contesto di una funzione della finestra di classificazione, può fare riferimento solo alle colonne rese disponibili dalla clausola FROM. Non è possibile specificare un numero intero per rappresentare la posizione del nome o dell'alias di una colonna nell'elenco di selezione. non può essere utilizzato con le funzioni di finestra aggregata.

Ancora più significativa è la verbosità di SQL Server 2012 - clausola OVER (Transact-SQL)

A seconda della classificazione, dell'aggregato o della funzione analitica utilizzata con la clausola OVER, e / o la funzione potrebbe non essere supportata.

Quindi, sembra che certamente non sia disponibile nel 2008, anche se quel messaggio di errore è un modo davvero oscuro di dire "non implementato" , e nel 2012 sembra che la posizione ufficiale di Microsoft sia che il tuo chilometraggio può variare .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.