No Microsoft SQL Server 2008, a sintaxe gera o erro "Os recursos do PDW (Parallel Data Warehouse) não estão habilitados".

8

Eu tenho a seguinte coluna virtual gerada a partir de um agregado em uma partição classificada,

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

No entanto, quando executo isso, recebo o seguinte.

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

É aqui que fica interessante, sem uma ordem de classificação na partição, ele funciona:

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

Além disso, ROW_NUMBER()uma função de janela (não uma função agregada) funciona com uma ordem explícita na partição.

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

Como é que a declaração desejada não funciona? Onde isso está documentado? As informações da versão foram solicitadas, é isso que eu em Ajuda → Sobre.

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

O resultado de 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)

Evan Carroll
fonte
Qual é a versão exata? Parece um bug. Eu recebo um erro de sintaxe normal para o primeiro exemplo em 10.50.1600. Além disso, porém, não entendo o ponto - o que você está tentando fazer com essa sintaxe?
21813 Jon Seigel
Então, você realmente se importa em particionar a classificação por [360_set], ou essa parte é irrelevante? Além disso, a partir do seu comentário, a fórmula que você forneceu funciona apenas como a descrição do texto se não houver lacunas na sequência. Qual você quer?
22813 Jon Seigel
2
A cláusula order by para agregados não foi implementada até o SQL Server 2012. Não tenho certeza de quais são as extensões PDW.
Martin Smith
2
@JonSeigel Define a ordem das linhas para a moldura da janela. Isso não afeta a maneira como MINfunciona, é claro, mas altera as linhas no quadro sobre as quais MINé executada.
Paul White 9
11
@ JonSeigel - O padrão, se não especificado, é RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Portanto, a janela inclui apenas valores com picture_idvalores menores ou iguais aos da linha atual.
Martin Smith

Respostas:

16

Os recursos do Parallel Data Warehouse (PDW) não estão ativados.

Este é um erro do analisador que existe apenas no SQL Server 2008. As versões não PDW do SQL Server anteriores a 2012 não oferecem suporte à ORDER BYcláusula com funções agregadas, como MIN:

Extrato de livros on-line

O suporte à função de janelas foi estendido consideravelmente em 2012, em comparação com a implementação básica disponível a partir do SQL Server 2005. As extensões foram disponibilizadas no Parallel Data Warehouse antes de serem incorporadas ao produto da caixa. Como as várias edições compartilham uma base de código comum, são possíveis mensagens de erro enganosas como essa.

Se você estiver interessado, a pilha de chamadas quando o agregado é verificado pelo analisador é mostrada abaixo. Como o agregado possui uma OVERcláusula ORDER BY, é emitida uma verificação para PDW:

Verificação agregada

Essa verificação falha imediatamente com um erro do analisador:

Erro do analisador

Felizmente, você não precisa de um agregado em janela que suporte o ORDER BYenquadramento para resolver seu problema de código.

Paul White 9
fonte
2

Isso será resultado da fusão das bases de código da versão PDW, Azure e box. Começaremos a ver mensagens como esta ou que você não está em uma máquina do Azure ao tentar fazer coisas que foram lançadas apenas no Azure.

Quanto à pergunta de Martin sobre o que são as extensões PDW, esses seriam os recursos da linguagem T-SQL que são implementados apenas no produto Parallel Data Warehouse (PDW).

Mrdenny
fonte
Eles podem ser ativados através de um hack? Ou eles não são enviados com o produto? Eu só estou querendo saber se eles puxaram seriamente esse recurso rudimentar? Não é tão complexo para uso de banco de dados.
Evan Carroll
3
@EvanCarroll Não, ORDER BYcom agregados em janelas não pode ser ativado no SQL Server 2008. O recurso não foi 'extraído', não foi liberado para SQL Server não PDW até a versão 2012.
Paul White 9
1

Responder a isso como um elemento da mensagem de erro. Como o @MartinSmith disse acima,

A cláusula order by para agregados não foi implementada até o SQL Server 2012. Não tenho certeza de quais são as extensões PDW. - Martin Smith

Isso é mencionado oficialmente aqui SQL Server 2008 R2 - Cláusula OVER (Transact-SQL)

Quando usado no contexto de uma função da janela de classificação, pode se referir apenas às colunas disponibilizadas pela cláusula FROM. Um número inteiro não pode ser especificado para representar a posição do nome ou alias de uma coluna na lista de seleção. não pode ser usado com funções agregadas da janela.

Ainda mais significativa é a verbosidade no SQL Server 2012 - Cláusula OVER (Transact-SQL)

Dependendo da função de classificação, agregada ou analítica usada com a cláusula OVER, e / ou a pode não ser suportada.

Portanto, parece que certamente não está disponível em 2008 - embora essa mensagem de erro seja uma maneira realmente obscura de dizer "não implementado" , e em 2012 parece que a posição oficial da Microsoft é que sua milhagem pode variar .

Evan Carroll
fonte