În Microsoft SQL Server 2008, sintaxa generează eroarea „Funcțiile Parallel Data Warehouse (PDW) nu sunt activate”. (Administrarea bazelor de date, Sql Server 2008 R2, Funcții De Fereastră)

Evan Carroll a intrebat.
a intrebat.

Am următoarea coloană virtuală generată de o agregare pe o partiție sortată,

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

Cu toate acestea, atunci când o execut, primesc următorul mesaj.

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

Totuși, aici devine interesant, fără o ordine de sortare pe partiție, funcționează:

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

Și, în continuare, ROW_NUMBER() o funcție de fereastră (nu o funcție de agregare) funcționează cu o ordine explicită pe partiție.

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

Cum se face că declarația dorită nu funcționează? Unde este documentat acest lucru? Au fost cerute informații despre versiune, asta am găsit în Help → About.

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

Rezultatul de la SELECT @@VERSION este 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)

Comentarii

  • Care este versiunea exactă? Pare a fi o eroare. Primesc o eroare de sintaxă normală pentru primul exemplu pe 10.50.1600. În afară de asta, totuși, nu văd rostul – ce încerci să faci cu această sintaxă? –  > Por Jon Seigel.
  • Deci, de fapt, îți pasă de împărțirea clasamentului în funcție de [360_set]sau această parte este irelevantă? De asemenea, din comentariul tău, formula pe care ai dat-o funcționează ca în descrierea textului doar dacă nu există goluri în secvență. Care dintre ele este cea pe care o doriți? –  > Por Jon Seigel.
  • Clauza order by pentru agregate nu a fost implementată până la SQL Server 2012. Nu sunt sigur care sunt extensiile PDW. –  > Por Martin Smith.
  • @JonSeigel Se stabilește ordinea rândurilor pentru cadrul ferestrei. Nu afectează modul în care MIN funcționează, bineînțeles, dar modifică rândurile din cadrul peste care MIN se efectuează. –  > Por Paul White.
  • @JonSeigel – Valoarea implicită, dacă nu este specificată, este RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Astfel, fereastra include numai valorile cu picture_id valori mai mici sau egale cu cele din rândul curent. –  > Por Martin Smith.
3 răspunsuri
Paul White

Funcțiile Parallel Data Warehouse (PDW) nu sunt activate.

Aceasta este o eroare de parser care există doar în SQL Server 2008. Versiunile de SQL Server anterioare lui 2012 care nu sunt PDW. nu acceptă funcțiile ORDER BY cu funcțiile de agregare cum ar fi MIN:

Suportul pentru funcțiile de tip Windowing a fost extins considerabil în 2012, în comparație cu implementarea de bază disponibilă începând cu SQL Server 2005. Extinderile au fost puse la dispoziție în Parallel Data Warehouse înainte de a fi încorporate în produsul box. Deoarece diferitele ediții au o bază de cod comună, sunt posibile mesaje de eroare înșelătoare de acest tip.

Dacă vă interesează, stiva de apeluri atunci când agregatul este verificat de parser este prezentată mai jos. Deoarece agregatul are un OVER cu clauza ORDER BYeste emisă o verificare pentru PDW:

Această verificare eșuează imediat cu o eroare de parser:

Din fericire, nu aveți nevoie de un agregat cu fereastră care să suporte ORDER BY framing pentru a vă rezolva problema de cod.

mrdenny

Acesta va fi un rezultat al fuziunii bazelor de cod ale versiunilor PDW, Azure și box. Vom începe să vedem mesaje ca acesta sau că nu sunteți pe o mașină Azure atunci când încercați să faceți lucruri care au fost lansate doar în Azure.

În ceea ce privește întrebarea lui Martin despre ce sunt extensiile PDW, acestea ar fi caracteristicile limbajului T-SQL care sunt implementate doar în produsul Parallel Data Warehouse (PDW).

Comentarii

  • Pot fi acestea activate prin intermediul unui hack? Sau nu sunt livrate împreună cu produsul? Mă întreb doar dacă au scos în mod serios această caracteristică rudimentară? Nu este atât de complexă pentru utilizarea DB. –  > Por Evan Carroll.
  • @EvanCarroll Nu, ORDER BY cu agregate cu fereastră nu poate fi activată în SQL Server 2008. Caracteristica nu a fost „retrasă”, ci nu a fost lansată pentru SQL Server non-PDW până la versiunea 2012. –  > Por Paul White.
Evan Carroll

Răspundeți la această întrebare ca element al mesajului de eroare. Așa cum a spus @MartinSmith mai sus,

clauza order by pentru agregate nu a fost implementată până la SQL Server 2012. Nu sunt sigur care sunt extensiile PDW. – Martin Smith

Acest lucru este menționat oficial aici SQL Server 2008 R2 – Clauza OVER (Transact-SQL)

Atunci când este utilizată în contextul unei funcții de fereastră de clasificare, se poate referi numai la coloanele puse la dispoziție de clauza FROM. Nu se poate specifica un număr întreg pentru a reprezenta poziția numelui sau a aliasului unei coloane în lista de selecție. nu poate fi utilizat cu funcții de fereastră de agregare.

Chiar mai semnificativ este verbul din SQL Server 2012 – Clauza OVER (Transact-SQL)

În funcție de clasificarea, agregarea sau funcția analitică utilizată cu clauza OVER, și/sau este posibil să nu fie acceptate.

Așadar, se pare că cu siguranță nu este disponibilă în 2008 – deși acel mesaj de eroare este un mod foarte obscur de a spune „nu este implementat”, iar în 2012 se pare că poziția oficială a Microsoft este următoarea kilometrajul dumneavoastră poate varia.