В Microsoft SQL Server 2008 синтаксис генерирует ошибку «Функции параллельного хранилища данных (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 @@VERSIONISMicrosoft 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. Кроме этого, я не вижу смысла - что вы пытаетесь сделать с этим синтаксисом?
Джон Зигель
Итак, вы действительно хотите разделить рейтинг по категориям [360_set], или эта часть не имеет значения? Кроме того, из вашего комментария формула, которую вы дали, работает, как текстовое описание, только если в последовательности нет пробелов. Какой ты хочешь?
Джон Зигель
2
Предложение order by для агрегатов не было реализовано до SQL Server 2012. Не уверен, что такое расширения PDW.
Мартин Смит
2
@JonSeigel Устанавливает порядок строк для оконной рамы. Конечно, это не влияет на MINработу, но оно меняет строки в кадре, над которым MINвыполняется.
Пол Уайт 9
1
@JonSeigel - по умолчанию, если не указано иное RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Таким образом, окно содержит только значения со picture_idзначениями, меньшими или равными значению в текущей строке.
Мартин Смит

Ответы:

16

Функции параллельного хранилища данных (PDW) не включены.

Это ошибка синтаксического анализатора, которая существует только в SQL Server 2008. Версии SQL Server , неORDER BY относящиеся к PDW, до 2012 года не поддерживают предложение с агрегатными функциями, такими как MIN:

Книги онлайн выписка

Поддержка оконных функций была значительно расширена в 2012 году по сравнению с базовой реализацией, доступной начиная с SQL Server 2005. Расширения были доступны в Parallel Data Warehouse до их включения в коробочный продукт. Поскольку различные редакции имеют общую кодовую базу, возможны вводящие в заблуждение сообщения об ошибках, подобные этому.

Если вам интересно, стек вызовов, когда агрегат проверяется парсером, показан ниже. Поскольку у агрегата есть OVERпредложение с ORDER BY, выдается проверка для PDW:

Совокупная проверка

Эта проверка немедленно завершается с ошибкой синтаксического анализатора:

Ошибка парсера

К счастью, вам не нужен оконный агрегат, который поддерживает ORDER BYкадрирование для решения вашей проблемы с кодом.

Пол Уайт 9
источник
2

Это будет результатом слияния кодовых баз PDW, Azure и коробочной версии. Мы начнем видеть сообщения вроде этого или того, что вы не находитесь на компьютере Azure, когда пытаетесь делать вещи, выпущенные только в Azure.

Что касается вопроса Мартина о том, что такое расширения PDW, то это будут те особенности языка T-SQL, которые реализованы только в продукте Parallel Data Warehouse (PDW).

mrdenny
источник
Могут ли они быть включены через взлом? Или они не поставляются с продуктом? Мне просто интересно, если они серьезно потянули эту элементарную особенность? Это не так сложно для использования БД.
Эван Кэрролл
3
@EvanCarroll Нет, ORDER BYс оконными агрегатами нельзя включить в SQL Server 2008. Функция не была «извлечена», она не была выпущена для не-PDW SQL Server до выпуска 2012 года.
Пол Уайт 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 состоит в том, что ваш пробег может отличаться .

Эван Кэрролл
источник