Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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-SQLOPENROWSET
. - 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:
- Na pasta Segurança, clique com o botão direito do mouse em Servidores Vinculados e clique em Novo Servidor Vinculado.
- Para o Nome do Provedor, clique para selecionar Provedor OLE DB para Serviços OLAP.
- Clique em Opções.
- Clique para selecionar Permitir InProcess.
- 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
,OPENROWSET
e 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.