Как выполнить распределенный запрос SQL Server при помощи сервера OLAP

СОДЕРЖАНИЕ

Аннотация

В этой статье описывается выполнение распределенного запроса SQL Server для получения данных из куба служб OLAP (или служб аналитики). В версии Microsoft SQL Server 7.0 можно выполнять запросы к поставщикам OLE DB. Для этого можно выполнить следующие ниже действия.

  • Использовать функции OPENQUERY или OPENROWSET языка Transact-SQL. -или-

  • Использовать запрос с именами из четырех частей, включая название связанного сервера.

Например.

sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source','location', 'provider_string', 'catalog'

SELECT * FROM OPENQUERY(mylinkedserver, 'select * from table1')

Можно использовать функцию OPENROWSET или OPENQUERY в команде SELECT SQL Server для передачи запроса на связанный сервер OLAP. Запрос ограничен до сокращенного синтаксиса SELECT, поддерживаемого службами OLAP; однако запрос может также включать синтаксис многомерных выражений (MDX). Запрос, включающий MDX, возвращает "сплющенные наборы строк", как описано в документации OLE DB. Для получения дополнительных сведений о синтаксисе SELECT, поддерживаемом службами OLAP программы SQL Server см. раздел "Поддерживаемый синтаксис оператора SELECT языка SQL" в электронной документации по службам OLAP.

Для запроса локальной или удаленной базы данных сервера OLAP из SQL Server необходимо установить поставщик OLE DB MSOLAP на компьютер, на котором работает SQL Server. Поставщик OLE DB MSOLAP устанавливается при установке клиентских компонентов OLAP с компакт-диска SQL Server 7.0.


Пример OPENROWSET и OPENQUERY

В следующем примере кода Transact-SQL показано, как настраивать и использовать распределенные запросы к серверу OLAP при помощи функций OPENQUERY и OpenRowset . Необходимо соответствующим образом изменять названия источника данных и каталога.

------------------------------------------
--OPENROWSET для сервера OLAP
------------------------------------------


SELECT a.* FROM OpenRowset('MSOLAP','DATASOURCE=myOlapServer; Initial Catalog=FoodMart;',
'SELECT Measures.members ON ROWS,
[Product Category].members ON COLUMNS
FROM [Sales]') as a
go

-- Пример MDX с секционированием --

SELECT a.* FROM OpenRowset('MSOLAP','DATASOURCE=myOlapServer; Initial Catalog=FoodMart;',
'SELECT
{ Time.Year.[1997] } ON COLUMNS,
NON EMPTY Store.MEMBERS ON ROWS
FROM Sales
WHERE ( Product.[Product Category].[Dairy] )') as a

--------------------------------------------------
-- Примеры связанного сервера с OPENQUERY
--------------------------------------------------

EXEC sp_addlinkedserver
@server='olap_server',
@srvproduct='',
@provider='MSOLAP',

@datasrc='server',
@catalog='foodmart'

go

-- MDX в OPENQUERY --

SELECT * FROM OPENQUERY(olap_server,
'SELECT
{ Time.Year.[1997] } ON COLUMNS,
NON EMPTY Store.MEMBERS ON ROWS
FROM Sales
WHERE ( Product.[Product Category].[Dairy])' )

Примечание. В разделе "Передача запросов от SQL Server к связанному серверу OLAP" в руководстве OLAP Services Books Online допущена ошибка в примере кода:

SELECT * FROM OPENQUERY(olap_server,
'SELECT [customer], [quantity] FROM sales')

Поддерживается только ограниченная форма SQL, и можно указать только названия уровня или измерения. При выполнении запроса появляется следующее сообщение об ошибке:

Server: Msg 7399, Level 16, State 1, Line 1 OLE DB поставщик 'MSOLAP' сообщил об ошибке. [Поставщик OLE/DB возвратил сообщение: Название столбца 'customer' недопустимо. Можно указывать только названия уровня или измерения.]

Вот один из вариантов исправления запроса:

SELECT * FROM OPENQUERY(olap_server,
'SELECT [unit sales] FROM sales')

Однако передача операторов SQL на сервер OLAP в такой форме может занять большое количество времени, и на некоторых компьютерах может появиться сообщение об истечении времени операции:

Поставщик OLE DB 'MSOLAP' сообщил об ошибке. [Поставщик OLE/DB возвратил сообщение: Невозможно открыть базу данных 'foodmart'] [Поставщик OLE/DB возвратил сообщение: ошибка сервера OLAP: Запрошенная операция не произведена вследствие истечения отпущенного времени.]

Примеры связанного сервера с названием из четырех частей

В примере кода Transact-SQL в этом разделе показано использование связанного сервера с названием из четырех частей для запроса куба OLAP. В данном коде связанный сервер с названием Olap_server был создан в предыдущем примере:

Select [Store:Store Name] from Olap_server.FoodMart..[sales] WHERE [Store:Store State]='WA'

go

Select [Product:Product Category], count ([Store:Store Name]) from Olap_server.FoodMart..[sales]
WHERE [Store:Store State]='WA'
GROUP BY [Product:Product Category]

Хотя примеры связанного сервера с названием из четырех частей работают хорошо, для возвращения результата клиенту может потребоваться длительное время. Синтаксис имени из четырех частей - это концепция SQL Server; она используется в команде Transact-SQL для соотнесения с таблицей в связанном сервере и имеет ограниченный синтаксис для запросов OLAP. SQL Server может решить, что он должен прочесть всю таблицу с сервера OLAP и самостоятельно выполнить GROUP BY, что может потребовать значительного расхода ресурсов и времени.

Майкрософт рекомендует отправлять оператор MDX апри помощи функции OPENROWSET или OPENQUERY, как показано в предыдущих примерах. Этот метод позволяет SQL Server отправлять команду напрямую связанному поставщику OLAP без попыток обработать ее. Команда может быть командой MDX или подмножеством SQL, поддерживающимся поставщиком OLAP. Можно использовать набор строк, возвращаемый функцией OPENQUERY в других операторах SQL. Для простейших запросов MDX и запросов GROUP BY, возвращающих относительно небольшое количество данных (на один экран), набор результатов должен всегда создаваться менее чем за 10 секунд, обычно за 5 секунд, вне зависимости от размеров куба. Если запрос занимает больше времени, можно создать дополнительные агрегации при помощи мастера анализа на основе использования.

Советы по производительности

Вот несколько советов по производительности.

  • SQL Server открывает два подключения к поставщиком OLAP для каждого запроса. Одно из них используется повторно для последующих запросов; таким образом, если вы снова запустите команду, второй запрос может пойти быстрее.

  • Для увеличения скорости группировку лучше производить при помощи других кодов аналитки (потому что вы получаете меньше данных).

  • В самом плохом случае куб будет храниться при помощи относительного OLAP (ROLAP) при отсутствии агрегации. Затем сервер OLAP откроет обратное подключение к SQL Server для получения строк таблицы. В этом случае не нужно использовать распределенный запрос SQL Server.

  • Если нужен только набор результатов от сервера OLAP или файла куба, попробуйте запустить SQL Server или многомерный запрос непосредственно к серверу OLAP или любому файлу куба через приложение на C++ с использованием OLE DB или приложение ADO(ADO*MD).

  • SQL Server устанавливает некоторые поставщики OLE DB и настраивает их для загрузки внутри процесса. Поскольку поставщик MSOLAP не устанавливается SQL Server, он настраивается для загрузки в режиме вне процесса. Корпорация Майкрософт настоятельно рекомендует изменить параметры, чтобы поставщик OLAP мог загружаться внутри процесса, поскольку такая настройка улучшает производительность запросов OLAP. Чтобы внести необходимые изменения, выполните следующие действия.

    1. В папке Безопасность щелкните правой кнопкой мыши Связанные серверы, а затем выберите Новый связанный сервер.

    2. Для установки параметра Имя поставщика выберите Поставщик OLE DB Microsoft для служб OLAP.

    3. Нажмите кнопку Параметры.

    4. Выберите Разрешить загрузку внутри процесса.

    5. Нажмите кнопку ОК.

Ссылки

Детальное описание параметров процедуры хранения sp_addlinkedserver приведено в электронной документации по SQL Server 7.0.

Для получения дополнительных сведений о настройке и использовании распределенных запросов выполните поиск терминов sp_addlinkedserver, "OPENQUERY", "OPENROWSET" и других в электронной документации по SQL Server 7.0.

Дополнительные сведения о технологии OLAP и синтаксисе MDX приведены в электронной документации по службам OLAP. Для получения дополнительных сведений об использовании безопасности при работе со службами OLAP щелкните следующий номер статьи базы знаний Майкрософт:

242025 Как настраивать безопасность для сервера, связанного со службами OLAP (данная ссылка может указывать на материал полностью или частично на английском языке) (Эта ссылка может указывать на содержимое полностью или частично на английском языке)

Нужна дополнительная помощь?

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединение к программе предварительной оценки Майкрософт

Были ли сведения полезными?

Спасибо за ваш отзыв!

Благодарим за отзыв! Возможно, будет полезно связать вас с одним из наших специалистов службы поддержки Office.

×