Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe cómo realizar una consulta distribuida de SQL Server con OLAP Server.
Versión del producto original: SQL Server
Número de KB original: 218592
Resumen
En este artículo se describe cómo realizar una consulta distribuida de SQL Server para recuperar datos de un cubo de OLAP Services (o Analysis Services). Con Microsoft SQL Server, puede realizar consultas en proveedores OLE DB. Para ello, puede usar una de las siguientes opciones:
- Use las
OPENQUERY
funciones de Transact-SQL oOPENROWSET
. - Use una consulta con nombres de cuatro partes, incluido un nombre de servidor vinculado.
Por ejemplo:
sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source','location', 'provider_string', 'catalog'
SELECT *
FROM OPENQUERY(mylinkedserver, 'select * from table1')
Puede usar la OPENROWSET
función o OPENQUERY
en una instrucción de SQL Server SELECT
para pasar consultas al servidor OLAP vinculado. La consulta se limita a la sintaxis abreviada SELECT
que admite OLAP Services; sin embargo, la consulta puede incluir la sintaxis de expresiones multidimensionales (MDX). Una consulta que incluye MDX devuelve conjuntos de filas acoplados como se describe en la documentación de OLE DB. Para obtener más información sobre la SELECT
sintaxis compatible con SQL Server OLAP Services, vea el tema Sintaxis SELECT de SQL compatible en los Libros en pantalla de OLAP Services.
Para consultar una base de datos de servidor OLAP local o remota desde SQL Server, debe instalar el proveedor OLE DB MSOLAP en el equipo que ejecuta SQL Server. El proveedor OLE DB MSOLAP se instala al instalar los componentes de cliente OLAP desde SQL Server.
Ejemplo de OPENROWSET y OPENQUERY
En el siguiente ejemplo de código de Transact-SQL se muestra cómo configurar y usar consultas distribuidas con un servidor OLAP con las OPENQUERY
funciones y OpenRowset
. Debe cambiar los nombres de origen de datos y el nombre del catálogo según corresponda.
------------------------------------------
--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])' )
Nota:
El tema Pasar consultas de SQL Server a un servidor OLAP vinculado, en los Libros en pantalla de OLAP Services, tiene un error de documentación en el ejemplo de código:
SELECT *
FROM OPENQUERY(olap_server, 'SELECT [customer], [quantity] FROM sales')
Solo se admite una forma limitada de SQL y solo se pueden especificar nombres de nivel o medida. Al ejecutar la consulta, recibirá este mensaje de error:
Servidor: msg 7399, nivel 16, estado 1, proveedor OLE DB de línea 1 "MSOLAP" notificó un error. [Mensaje devuelto
:
por el proveedor OLE/DB El nombre de columna 'customer' no es válido. Solo se pueden especificar nombres de nivel o medida.]
Una manera de corregir la consulta es usar lo siguiente:
SELECT *
FROM OPENQUERY(olap_server, 'SELECT [unit sales] FROM sales')
Sin embargo, pasar instrucciones SQL en ese formulario al servidor OLAP puede ser lento y puede recibir un error de tiempo de espera en algunos equipos:
El proveedor OLE DB "MSOLAP" notificó un error. Mensaje devuelto por el proveedor OLE/DB: No se puede abrir la base de datos 'foodmart'] [Mensaje devuelto por el proveedor OLE/DB: error del servidor OLAP: error en la operación solicitada debido al tiempo de espera].]
Ejemplos de servidor vinculado con nombres de cuatro partes
En el ejemplo de código de Transact-SQL de esta sección se muestra el uso de un servidor vinculado con un nombre de cuatro partes para consultar un cubo OLAP. En el código, el servidor vinculado denominado Olap_server
se creó en el ejemplo 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]
Aunque los ejemplos de servidor vinculado con un nombre de cuatro partes funcionan bien, pueden tardar mucho tiempo en devolver un resultado al cliente. La sintaxis de nombre de cuatro partes es un concepto de SQL Server; se usa en un comando transact-SQL para hacer referencia a una tabla de un servidor vinculado y tiene una sintaxis limitada para las consultas OLAP. SQL Server puede determinar que debe leer toda la tabla de hechos del servidor OLAP y realizar el GROUP BY
propio , lo que puede tardar mucho tiempo y recursos.
Microsoft recomienda enviar una instrucción MDX a través de una OPENROWSET
función o OPENQUERY
, como se muestra en los ejemplos anteriores. Este método permite que SQL Server envíe el comando directamente al proveedor OLAP vinculado, sin intentar analizarlo. El comando puede ser MDX o el subconjunto de SQL que admite el proveedor OLAP. Puede usar el conjunto de filas devuelto desde la OPENQUERY
función en otros operadores SQL. Para consultas y GROUP BY
consultas MDX básicas que devuelven una cantidad relativamente pequeña de datos (como una pantalla), el conjunto de resultados siempre debe crearse en menos de 10 segundos, generalmente en 5 segundos, independientemente del tamaño del cubo. Si las consultas tardan más tiempo, puede crear más agregaciones mediante el Asistente para análisis basado en el uso.
Consejos de rendimiento
Estas son algunas sugerencias de rendimiento:
SQL Server abre dos conexiones al proveedor OLAP para cada consulta. Una de ellas se reutiliza para consultas posteriores; por lo tanto, si vuelve a ejecutar el comando, la segunda consulta podría ejecutarse más rápido.
Para aumentar la velocidad, agrupe por otra dimensión (porque obtiene menos datos).
Un escenario peor sería cuando el cubo se almacena a través de OLAP relacional (ROLAP) y no hay ninguna agregación. A continuación, el servidor OLAP abre una conexión a SQL Server para obtener las filas de la tabla de hechos. No use una consulta distribuida de SQL Server en este caso.
Si solo necesita un conjunto de resultados de un servidor OLAP o un archivo de cubo, intente ejecutar sql Server o la consulta multidimensional directamente en el servidor OLAP, o cualquier archivo de cubo, mediante una aplicación de C++ OLE DB o una aplicación ADO(ADO*MD).
SQL Server instala algunos proveedores OLE DB y los configura para cargarlos en proceso. Dado que SQL Server no instala el proveedor MSOLAP, está configurado para cargarse fuera de proceso. Microsoft recomienda encarecidamente cambiar las opciones del proveedor OLAP para que se carguen como en proceso, ya que esta configuración mejora el rendimiento de las consultas OLAP. Para realizar el cambio, siga estos pasos:
- En la carpeta Seguridad, haga clic con el botón derecho en Servidores vinculados y, a continuación, haga clic en Nuevo servidor vinculado.
- En Nombre del proveedor, haga clic para seleccionar Proveedor OLE DB para servicios OLAP.
- Haga clic en Opciones.
- Haga clic para seleccionar Permitir InProcess.
- Haga clic en Aceptar.
Referencias
Para obtener una descripción detallada de los
sp_addlinkedserver
parámetros de procedimiento almacenado, vea Los Libros en pantalla de SQL Server.Para obtener más información sobre cómo configurar y usar consultas distribuidas, busque en
sp_addlinkedserver
OPENQUERY
OPENROWSET
temas relacionados , , y en los Libros en pantalla de SQL Server.Para obtener más información sobre la tecnología OLAP y la sintaxis MDX, consulte Los Libros en pantalla de OLAP Services.