En Microsoft SQL Server 2008, la sintaxis genera el error "Las características de Almacenamiento de datos paralelos (PDW) no están habilitadas".

8

Tengo la siguiente columna virtual generada a partir de un agregado sobre una partición ordenada,

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

Sin embargo, cuando ejecuto eso, obtengo lo siguiente.

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

Sin embargo, aquí es donde se pone interesante, sin un orden de clasificación en la partición, funciona:

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

Y, además, ROW_NUMBER()una función de ventana (no una función agregada) funciona con un orden explícito en la partición.

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

¿Cómo es que la declaración deseada no funciona? ¿Dónde se documenta esto? Se solicitó la información de la versión, esto es lo que hice en Ayuda → Acerca de.

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

El resultado de SELECT @@VERSIONesMicrosoft 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
fuente
¿Cuál es la versión exacta? Parece un error. Me sale un error de sintaxis normal para el primer ejemplo en 10.50.1600. Aparte de eso, sin embargo, no veo el punto: ¿qué estás tratando de hacer con esta sintaxis?
Jon Seigel
Entonces, ¿realmente te importa dividir la clasificación [360_set]o esa parte es irrelevante? Además, según su comentario, la fórmula que proporcionó solo funciona como la descripción del texto si no hay espacios en la secuencia. ¿Cuál quieres?
Jon Seigel
2
El orden por cláusula para los agregados no se implementó hasta SQL Server 2012. No estoy seguro de cuáles son las extensiones PDW.
Martin Smith
2
@ JonSeigel Establece el orden de las filas para el marco de la ventana. Por MINsupuesto, no afecta la forma en que funciona, pero sí cambia las filas en el marco sobre el que MINse realiza.
Paul White 9
1
@JonSeigel: el valor predeterminado si no se especifica es RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Por lo tanto, la ventana solo incluye valores con picture_idvalores menores o iguales a los de la fila actual.
Martin Smith

Respuestas:

16

Las funciones de Almacenamiento de datos paralelos (PDW) no están habilitadas.

Este es un error del analizador que existe solo en SQL Server 2008. Las versiones no PDW de SQL Server anteriores a 2012 no admiten la ORDER BYcláusula con funciones agregadas como MIN:

Extracto de libros en línea

El soporte de la función de ventanas se amplió considerablemente en 2012, en comparación con la implementación básica disponible a partir de SQL Server 2005. Las extensiones se pusieron a disposición en Parallel Data Warehouse antes de incorporarse al producto de la caja. Debido a que las diversas ediciones comparten una base de código común, son posibles mensajes de error engañosos como este.

Si está interesado, la pila de llamadas cuando el analizador verifica el agregado se muestra a continuación. Debido a que el agregado tiene una OVERcláusula con ORDER BY, se emite un cheque para PDW:

Verificación agregada

Esta comprobación falla inmediatamente con un error de analizador:

Error del analizador

Afortunadamente, no necesita un agregado con ventana que admita el ORDER BYencuadre para resolver su problema de código.

Paul White 9
fuente
2

Esto va a ser el resultado de la fusión de las bases de código de PDW, Azure y la versión de caja. Comenzaremos a ver mensajes como este o que no está en una máquina Azure cuando intente hacer cosas que solo se han lanzado en Azure.

En cuanto a la pregunta de Martin sobre cuáles son las extensiones PDW, estas serían las características del lenguaje T-SQL que solo se implementan en el producto Parallel Data Warehouse (PDW).

mrdenny
fuente
¿Se pueden habilitar a través de un hack? ¿O no se envían con el producto? Me pregunto si sacaron en serio esa característica rudimentaria. No es tan complejo para el uso de DB.
Evan Carroll
3
@EvanCarroll No, ORDER BYcon los agregados en ventana no se pueden habilitar en SQL Server 2008. La función no se 'extrajo', no se lanzó para SQL Server que no sea PDW hasta la versión 2012.
Paul White 9
1

Respondiendo esto como un elemento del mensaje de error. Como @MartinSmith dijo anteriormente,

El orden por cláusula para los agregados no se implementó hasta SQL Server 2012. No estoy seguro de cuáles son las extensiones PDW. - Martin Smith

Esto se menciona oficialmente aquí SQL Server 2008 R2 - Cláusula OVER (Transact-SQL)

Cuando se usa en el contexto de una función de ventana de clasificación, solo puede referirse a columnas disponibles por la cláusula FROM. No se puede especificar un número entero para representar la posición del nombre o alias de una columna en la lista de selección. no se puede usar con funciones de ventana agregadas.

Aún más significativo es el verborrea en SQL Server 2012 - Cláusula OVER (Transact-SQL)

Dependiendo de la función de clasificación, agregado o analítica utilizada con la cláusula OVER, y / o puede no ser compatible.

Por lo tanto, parece que ciertamente no está disponible en 2008, aunque ese mensaje de error es una forma realmente oscura de decir "no implementado" , y en 2012 parece que la postura oficial de Microsoft es que su kilometraje puede variar .

Evan Carroll
fuente