Microsoft SQL Server 2008では、構文により「Parallel Data Warehouse(PDW)機能が有効になっていません」というエラーが生成されます。


8

並べ替えられたパーティションの集計から生成された次の仮想列があります。

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

しかし、それを実行すると、次のようになります。

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

これは興味深いところですが、パーティションに並べ替え順序がなくても機能します。

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

さらに、ROW_NUMBER()ウィンドウ関数(集計関数ではない)は、パーティションで明示的な順序で動作します。

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

目的のステートメントが機能しないのはなぜですか?これはどこに文書化されていますか?バージョン情報が要求されました。これは、ヘルプ→バージョン情報にあります。

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

の結果SELECT @@VERSIONMicrosoft 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)


正確なバージョンは何ですか?バグのようです。10.50.1600の最初の例で通常の構文エラーが発生します。それを除けば、ポイントはわかりません-この構文で何をしようとしていますか?
Jon Seigel 2013

では、実際にランキングを[360_set]で分割することに関心がありますか、それとも関係ありませんか?また、コメントから、シーケンスにギャップがない場合、指定した式はテキストの説明と同じように機能します。どちらがいいですか?
Jon Seigel 2013

2
集計のorder by句はSQL Server 2012まで実装されていませんでした。PDW拡張機能が何かはわかりません。
マーティン・スミス

2
@JonSeigelウィンドウフレームの行の順序を設定します。MINもちろん動作には影響しませんが、MIN実行されるフレームの行を変更します。
ポールホワイト9

1
@JonSeigel-指定しない場合のデフォルトはRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROWです。したがって、ウィンドウpicture_idには現在の行の値以下の値のみが含まれます。
マーティン・スミス

回答:


16

Parallel Data Warehouse(PDW)機能が有効になっていません。

これは、SQL Server 2008にのみ存在するパーサーのバグです。2012より前のSQL Serverの非PDWバージョンは、次のような集計関数を含む句をサポートしていませんORDER BYMIN

Books Onlineの抜粋

SQL Server 2005以降の基本的な実装と比較して、ウィンドウ機能のサポートは2012年に大幅に拡張されました。拡張機能は、ボックス製品に組み込まれる前にParallel Data Warehouseで利用可能になりました。さまざまなエディションが共通のコードベースを共有しているため、このような誤解を招くエラーメッセージが表示される可能性があります。

興味がある場合は、パーサーによって集約が検証されたときのコールスタックを以下に示します。集計にはのOVER句があるため、ORDER BYPDWのチェックが発行されます。

集計検証

このチェックはすぐにパーサーエラーで失敗します。

パーサーエラー

幸い、ORDER BYコードの問題を解決するためのフレーミングをサポートするウィンドウ化された集計は必要ありません。


2

これは、PDW、Azure、ボックスバージョンのコードベースがマージされた結果です。Azureでのみリリースされている操作を実行しようとすると、このようなメッセージや、Azureマシンにいないことを示すメッセージが表示されます。

PDW拡張とは何かに関するMartinの質問と同様に、これらは、Parallel Data Warehouse(PDW)製品にのみ実装されているT-SQL言語の機能です。


これらはハックを通じて有効化できますか?または、製品に同梱されていませんか?彼らがその初歩的な機能を真剣に引き抜いたのだろうか。DBを使用する場合はそれほど複雑ではありません。
エヴァンキャロル

3
@EvanCarrollいいえ、ORDER BYSQL Server 2008ではウィンドウ化された集計を有効にすることはできません。この機能は「プル」されておらず、2012年のリリースまで非PDW SQL Server用にリリースされていませんでした。
ポールホワイト9

1

エラーメッセージの要素としてこれに答える。@MartinSmithが前述したように、

集計のorder by句はSQL Server 2012まで実装されていませんでした。PDW拡張機能が何かはわかりません。– マーティン・スミス

これは、SQL Server 2008 R2-OVER句(Transact-SQL)で公式に言及されています。

ランキングウィンドウ関数のコンテキストで使用した場合、参照できるのはFROM句で使用できる列のみです。選択リスト内の列の名前または別名の位置を表す整数を指定することはできません。集計ウィンドウ関数では使用できません。

さらに重要なのは、SQL Server 2012-OVER句(Transact-SQL)の言い回しです。

ランキング、集計、またはOVER句で使用される分析関数によっては、サポートされない場合があります。

したがって、2008年には確かに利用できないようです。そのエラーメッセージは「実装されていません」と言う非常にあいまいな方法ですが、2012年には、Microsoftの公式のスタンスはあなたのマイレージが異なる場合があるようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.