Dans Microsoft SQL Server 2008, la syntaxe génère l'erreur «Les fonctionnalités de Parallel Data Warehouse (PDW) ne sont pas activées.»


8

J'ai la colonne virtuelle suivante générée à partir d'un agrégat sur une partition triée,

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

Cependant, lorsque j'exécute cela, j'obtiens ce qui suit.

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

C'est là que cela devient intéressant, sans ordre de tri sur la partition, cela fonctionne:

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

Et, en outre, ROW_NUMBER()une fonction de fenêtre (pas une fonction d'agrégation) fonctionne avec un ordre explicite sur la partition.

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

Comment se fait-il que l'énoncé souhaité ne fonctionne pas? Où est-ce documenté? Les informations de version ont été demandées, c'est ce que je trouve dans Aide → À propos.

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

Le résultat de SELECT @@VERSIONestMicrosoft 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)


Quelle est la version exacte? Semble comme un bug. J'obtiens une erreur de syntaxe normale pour le premier exemple sur 10.50.1600. Mis à part cela, cependant, je ne vois pas le point - qu'essayez-vous de faire avec cette syntaxe?
Jon Seigel

Alors, vous souciez-vous réellement de partitionner le classement par [360_set], ou cette partie n'est-elle pas pertinente? De plus, d'après votre commentaire, la formule que vous avez donnée ne fonctionne que comme la description du texte s'il n'y a pas de lacunes dans la séquence. Lequel veux-tu?
Jon Seigel

2
La clause order by pour les agrégats n'a pas été implémentée avant SQL Server 2012. Vous ne savez pas quelles sont les extensions PDW.
Martin Smith

2
@JonSeigel Il définit l'ordre des lignes pour le cadre de la fenêtre. Cela n'affecte pas le MINfonctionnement, bien sûr, mais cela modifie les lignes du cadre sur lesquelles MINest effectué.
Paul White 9

1
@JonSeigel - La valeur par défaut si non spécifiée est RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Ainsi, la fenêtre inclut uniquement des valeurs dont les picture_idvaleurs sont inférieures ou égales à celles de la ligne actuelle.
Martin Smith

Réponses:


16

Les fonctionnalités de Parallel Data Warehouse (PDW) ne sont pas activées.

Il s'agit d'un bogue d'analyse qui n'existe que dans SQL Server 2008. Les versions non PDW de SQL Server avant 2012 ne prennent pas en charge la ORDER BYclause avec des fonctions d'agrégation comme MIN:

Extrait de livres en ligne

La prise en charge de la fonction de fenêtrage a été considérablement étendue en 2012, par rapport à l'implémentation de base disponible à partir de SQL Server 2005. Les extensions ont été rendues disponibles dans Parallel Data Warehouse avant d'être incorporées dans le produit box. Étant donné que les différentes éditions partagent une base de code commune, des messages d'erreur trompeurs comme celui-ci sont possibles.

Si vous êtes intéressé, la pile d'appels lorsque l'agrégat est vérifié par l'analyseur est illustrée ci-dessous. Étant donné que l'agrégat contient une OVERclause avec ORDER BY, une vérification de PDW est émise:

Vérification agrégée

Cette vérification échoue immédiatement avec une erreur d'analyse:

Erreur de l'analyseur

Heureusement, vous n'avez pas besoin d'un agrégat fenêtré qui prend en charge le ORDER BYcadrage pour résoudre votre problème de code.


2

Cela va être le résultat de la fusion des bases de code PDW, Azure et box. Nous allons commencer à voir des messages comme celui-ci ou que vous n'êtes pas sur une machine Azure lorsque vous essayez de faire des choses qui n'ont été publiées que dans Azure.

Quant à la question de Martin sur les extensions PDW, ce sont les fonctionnalités du langage T-SQL qui ne sont implémentées que dans le produit PDW (Parallel Data Warehouse).


Peut-on les activer via un hack? Ou ne sont-ils pas expédiés avec le produit? Je me demande juste s'ils ont sérieusement retiré cette fonctionnalité rudimentaire? Ce n'est pas si complexe pour une utilisation DB.
Evan Carroll

3
@EvanCarroll Non, les ORDER BYagrégats fenêtrés ne peuvent pas être activés dans SQL Server 2008. La fonctionnalité n'a pas été «extraite», elle n'a été publiée pour les serveurs SQL non PDW qu'à partir de la version 2012.
Paul White 9

1

Répondre à cela comme un élément du message d'erreur. Comme l'a dit @MartinSmith ci-dessus,

La clause order by pour les agrégats n'a pas été implémentée avant SQL Server 2012. Vous ne savez pas quelles sont les extensions PDW. - Martin Smith

Ceci est mentionné officiellement ici SQL Server 2008 R2 - Clause OVER (Transact-SQL)

Lorsqu'il est utilisé dans le contexte d'une fonction de fenêtre de classement, ne peut faire référence qu'aux colonnes mises à disposition par la clause FROM. Un entier ne peut pas être spécifié pour représenter la position du nom ou de l'alias d'une colonne dans la liste de sélection. ne peut pas être utilisé avec des fonctions de fenêtre agrégées.

Encore plus significatif est le verbiage dans SQL Server 2012 - Clause OVER (Transact-SQL)

Selon le classement, la fonction d'agrégation ou d'analyse utilisée avec la clause OVER et / ou la fonction peut ne pas être prise en charge.

Donc, il semble qu'il ne soit certainement pas disponible en 2008 - bien que ce message d'erreur soit une façon vraiment obscure de dire "non implémenté" , et en 2012, il semble que la position officielle de Microsoft soit que votre kilométrage puisse varier .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.