Compartilhar via


Como executar uma consulta distribuída do SQL Server com o Servidor OLAP

Este artigo descreve como executar uma consulta distribuída do SQL Server com o Servidor OLAP.

Versão original do produto: SQL Server
Número original do KB: 218592

Resumo

Este artigo descreve como executar uma consulta distribuída do SQL Server para recuperar dados de um cubo do OLAP Services (ou Analysis Services). Com o Microsoft SQL Server, você pode executar consultas em provedores OLE DB. Para fazer isso, você pode usar um dos seguintes:

  • Use as OPENQUERY funções ou Transact-SQL OPENROWSET .
  • Use uma consulta com nomes de quatro partes, incluindo um nome de servidor vinculado.

Por exemplo:

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

Você pode usar a OPENROWSET função ou em OPENQUERY uma instrução do SQL Server SELECT para passar consultas para o servidor OLAP vinculado. A consulta é limitada à sintaxe abreviada SELECT com suporte dos Serviços OLAP; no entanto, a consulta pode incluir a sintaxe MDX. Uma consulta que inclui MDX retorna conjuntos de linhas nivelados, conforme descrito na documentação do OLE DB. Para obter mais informações sobre a sintaxe com suporte SELECT do SQL Server OLAP Services, consulte o tópico Sintaxe SQL SELECT com suporte nos Manuais Online do OLAP Services.

Para consultar um banco de dados de servidor OLAP local ou remoto do SQL Server, você precisa instalar o provedor MSOLAP OLE DB no computador que está executando o SQL Server. O provedor OLE DB do MSOLAP é instalado quando você instala os componentes do cliente OLAP do SQL Server.

Exemplo de OPENROWSET e OPENQUERY

O exemplo de código Transact-SQL a seguir demonstra como configurar e usar consultas distribuídas com um servidor OLAP com as OPENQUERY funções e .OpenRowset Você deve alterar os nomes da fonte de dados e o nome do catálogo conforme apropriado.

------------------------------------------
--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])' )

Observação

O tópico Passando consultas do SQL Server para um servidor OLAP vinculado, nos Manuais Online de serviços OLAP, tem um bug de documentação no exemplo de código:

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

Há suporte apenas para uma forma limitada de SQL e apenas nomes de nível ou medida podem ser especificados. Ao executar a consulta, você recebe esta mensagem de erro:

Servidor: Msg 7399, Nível 16, Estado 1, Linha 1 O provedor OLE DB 'MSOLAP' relatou um erro. [Mensagem: retornada do provedor OLE/DB O nome da coluna 'cliente' é inválido. Somente nomes de nível ou medida podem ser especificados.]

Uma maneira de corrigir a consulta é usar o seguinte:

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

No entanto, passar instruções SQL nesse formato para o Servidor OLAP pode ser lento e você pode receber um erro de tempo limite em alguns computadores:

O provedor OLE DB 'MSOLAP' relatou um erro. [Mensagem retornada pelo provedor OLE / DB: Não é possível abrir o banco de dados 'foodmart'] [Mensagem retornada do provedor OLE/DB: erro do servidor OLAP: a operação solicitada falhou devido ao tempo limite.]

Exemplos de servidores vinculados com nomes de quatro partes

O exemplo de código Transact-SQL nesta seção demonstra o uso de um servidor vinculado com um nome de quatro partes para consultar um cubo OLAP. No código, o servidor vinculado nomeado Olap_server foi criado no exemplo anterior:

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]

Embora os exemplos de servidor vinculado com um nome de quatro partes funcionem bem, eles podem levar muito tempo para retornar um resultado ao cliente. A sintaxe de nome de quatro partes é um conceito do SQL Server; ele é usado em um comando Transact-SQL para se referir a uma tabela em um servidor vinculado e tem sintaxe limitada para consultas OLAP. O SQL Server pode determinar que ele deve ler toda a tabela de fatos do OLAP Server e executar o próprio, o GROUP BY que pode levar recursos e tempo significativos.

A Microsoft recomenda que você envie uma instrução MDX por meio de uma OPENROWSET função ou , OPENQUERY conforme mostrado nos exemplos anteriores. Esse método permite que o SQL Server envie o comando diretamente para o provedor OLAP vinculado, sem tentar analisá-lo. O comando pode ser MDX ou o subconjunto de SQL compatível com o provedor OLAP. Você pode usar o conjunto de linhas retornado da OPENQUERY função em outros operadores SQL. Para consultas MDX básicas e GROUP BY consultas que retornam uma quantidade relativamente pequena de dados (como uma tela cheia), o conjunto de resultados deve sempre ser criado em menos de 10 segundos, geralmente em 5 segundos, independentemente do tamanho do cubo. Se as consultas demorarem mais, você poderá criar mais agregações usando o assistente de análise baseada em uso.

Dicas de desempenho

Aqui estão algumas dicas de desempenho:

  • O SQL Server abre duas conexões com o provedor OLAP para cada consulta. Um deles é reutilizado para consultas posteriores; Portanto, se você executar o comando novamente, a segunda consulta poderá ser executada mais rapidamente.

  • Para aumentar a velocidade, agrupe por outra dimensão (porque você está obtendo menos dados).

  • Um cenário de pior caso seria quando o cubo é armazenado por meio de OLAP relacional (ROLAP) e não há agregação. Em seguida, o servidor OLAP abre uma conexão de volta com o SQL Server para obter as linhas da tabela de fatos. Não use uma consulta distribuída do SQL Server nesse caso.

  • Se você precisar apenas de um conjunto de resultados de um servidor OLAP ou de um arquivo de cubo, tente executar o SQL Server ou a consulta multidimensional diretamente no servidor OLAP ou em qualquer arquivo de cubo usando um aplicativo OLE DB C++ ou um aplicativo ADO(ADO*MD).

  • O SQL Server instala alguns provedores OLE DB e os configura para serem carregados em processo. Como o provedor MSOLAP não é instalado pelo SQL Server, ele é configurado para carregar fora do processo. A Microsoft recomenda que você altere as opções para que o provedor OLAP seja carregado como em processo, pois essa configuração melhora o desempenho de suas consultas OLAP. Para fazer a alteração, siga estas etapas:

    1. Na pasta Segurança, clique com o botão direito do mouse em Servidores Vinculados e clique em Novo Servidor Vinculado.
    2. Para o Nome do Provedor, clique para selecionar Provedor OLE DB para Serviços OLAP.
    3. Clique em Opções.
    4. Clique para selecionar Permitir InProcess.
    5. Clique em OK.

Referências

  • Para obter uma descrição detalhada dos sp_addlinkedserver parâmetros de procedimento armazenado, consulte os Manuais Online do SQL Server.

  • Para obter mais detalhes sobre como configurar e usar consultas distribuídas, pesquise em sp_addlinkedserver , OPENQUERY, OPENROWSETe tópicos relacionados nos Manuais Online do SQL Server.

  • Para saber mais sobre a tecnologia OLAP e a sintaxe MDX, consulte Manuais Online de Serviços OLAP.