Como executar uma consulta distribuída SQL Server com o OLAP Server
Este artigo descreve como executar uma consulta distribuída SQL Server com o OLAP Server.
Versão original do produto: SQL Server
Número de KB original: 218592
Resumo
Este artigo descreve como executar uma consulta distribuída 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 procedimentos:
- Use as
OPENQUERY
funções 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 OPENQUERY
em uma instrução 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 (Expressões Multidimensionais). Uma consulta que inclui o MDX retorna conjuntos de linhas achatados , conforme descrito na documentação do OLE DB. Para obter mais informações sobre a SELECT
sintaxe suportada por SQL Server Serviços OLAP, consulte o tópico sintaxe SQL SELECT com suporte no OLAP Services Books Online.
Para consultar um banco de dados de servidor OLAP local ou remoto de SQL Server, você precisa instalar o provedor OLE DB do MSOLAP no computador que está executando SQL Server. O provedor OLE DB do MSOLAP é instalado quando você instala os componentes do cliente OLAP do SQL Server.
Exemplo 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
OpenRowset
funções e. 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
A passagem de consultas de SQL Server para um tópico do Servidor OLAP Vinculado, no OLAP Services Books Online, 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 somente 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, Provedor OLE DB da Linha 1 '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 formulário para o OLAP Server 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 do provedor OLE/DB: não é possível abrir o banco de dados 'foodmart'] [Provedor OLE/DB retornado mensagem: erro do servidor OLAP: a operação solicitada falhou devido ao tempo limite.]
Exemplos de servidor vinculado 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 exemplos de servidor vinculados 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 SQL Server; é usada em um comando Transact-SQL para se referir a uma tabela em um servidor vinculado e tem sintaxe limitada para consultas OLAP. 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
ou uma OPENQUERY
função, conforme mostrado nos exemplos anteriores. Esse método permite que 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 que o provedor OLAP dá suporte. Você pode usar o conjunto de linhas retornado da OPENQUERY
função em outros operadores SQL. Para consultas e GROUP BY
consultas MDX básicas que retornam uma quantidade relativamente pequena de dados (como uma tela), o conjunto de resultados deve ser sempre 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 baseado em uso.
Dicas de desempenho
Aqui estão algumas dicas de desempenho:
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, agrupar por outra dimensão (porque você está recebendo menos dados).
O pior cenário seria quando o cubo é armazenado por meio de ROLAP (OLAP relacional) e não há agregação. Em seguida, o servidor OLAP abre uma conexão de volta para SQL Server para obter as linhas de tabela de fatos. Não use uma consulta distribuída SQL Server nesse caso.
Se você precisar apenas de um conjunto de resultados de um servidor OLAP ou de um arquivo 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).
SQL Server instala alguns provedores OLE DB e os configura para carregar em processo. Como o provedor MSOLAP não está instalado por SQL Server, ele está configurado para carregar fora do processo. A Microsoft recomenda que você altere as opções para o provedor OLAP carregar 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 armazenados, consulte SQL Server Livros Online.Para obter mais detalhes sobre como configurar e usar consultas distribuídas, pesquise em
sp_addlinkedserver
,OPENQUERY
,OPENROWSET
e tópicos relacionados, em SQL Server Livros Online.Para saber mais sobre a tecnologia OLAP e a sintaxe MDX, consulte OLAP Services Books Online.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários