Выполнение SQL Server распределенного запроса с помощью сервера OLAP

В этой статье описывается выполнение SQL Server распределенного запроса с помощью сервера OLAP.

Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 218592

Сводка

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

  • OPENQUERYOPENROWSET Используйте функции Или Transact-SQL.
  • Используйте запрос с именами из четырех частей, включая имя связанного сервера.

Например:

sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source','location', 'provider_string', 'catalog'
SELECT *
FROM OPENQUERY(mylinkedserver, 'select * from table1')

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

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

Пример OPENROWSET и OPENQUERY

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

------------------------------------------
--OPENROWSET for OLAP Server
------------------------------------------

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

-- Example of MDX with slicing --

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

--------------------------------------------------
-- Linked Server Examples with OPENQUERY
--------------------------------------------------

EXEC sp_addlinkedserver
    @server='olap_server',
    @srvproduct='',
    @provider='MSOLAP',
    @datasrc='server',
    @catalog='foodmart'

go

-- MDX in 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 содержится ошибка документации в примере кода:

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

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

Сервер: msg 7399, level 16, State 1, Line 1, Line 1 OLE DB provider 'MSOLAP' сообщил об ошибке. [Возвращено сообщение: поставщика OLE/DB Недопустимое имя столбца "клиент". Можно указать только имена уровней или мер.]

Одним из способов исправления запроса является использование следующего:

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 саму работу, что может занять значительные ресурсы и время.

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

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

Ниже приведены некоторые советы по повышению производительности.

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

  • Чтобы увеличить скорость, группирование по другому измерению (так как вы получаете меньше данных).

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

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

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

    1. В папке Безопасность щелкните правой кнопкой мыши Связанные серверы и выберите пункт Создать связанный сервер.
    2. В поле Имя поставщика выберите поставщик OLE DB для служб OLAP.
    3. Нажмите кнопку Параметры.
    4. Щелкните, чтобы выбрать Разрешить inProcess.
    5. Нажмите кнопку OK.

Ссылки

  • Подробное описание параметров хранимой sp_addlinkedserver процедуры см. в SQL Server электронной документации.

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

  • Дополнительные сведения о технологии OLAP и синтаксисе многомерных выражений см. в электронной документации по службам OLAP.