Cómo realizar una consulta distribuida de SQL Server con un servidor OLAP

En este artículo se describe cómo realizar una consulta distribuida de SQL Server con un servidor OLAP.

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 Servicios OLAP (o Analysis Services). Con Microsoft SQL Server, puede realizar consultas en proveedores OLE DB. Para ello, puede usar una de las siguientes opciones:

  • Use la OPENQUERY o las OPENROWSET funciones TRANSACT-SQL.
  • 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 el OPENROWSET o la OPENQUERY función de una instrucción de SQL Server SELECT para pasar consultas al servidor OLAP vinculado. La consulta se limita a la sintaxis abreviada SELECT que admiten los Servicios OLAP; sin embargo, la consulta puede incluir sintaxis de expresiones multidimensionales (MDX). Una consulta que incluye MDX devuelve conjuntos de filas acopladas , tal y como se describe en la documentación de OLE DB. Para obtener más información acerca de la SELECT sintaxis que admiten los Servicios OLAP de SQL Server, vea el tema de Sintaxis Select de SQL compatible en los libros en pantalla de OLAP.

Para consultar una base de datos de servidor OLAP local o remoto desde SQL Server, tiene que 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 de OLAP desde SQL Server.

Ejemplo de OPENROWSET y OPENQUERY

El siguiente ejemplo de código Transact-SQL muestra cómo configurar y usar consultas distribuidas con un servidor OLAP y las OPENQUERY OpenRowset funciones. 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

En el tema sobre Cómo pasar consultas de SQL Server a un servidor OLAP vinculado , en los libros en pantalla de Servicios OLAP, hay 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 de medida. Cuando se ejecuta la consulta, recibe este mensaje de error:

Servidor: msg 7399, nivel 16, estado 1, línea 1 el proveedor OLE DB ' MSOLAP ' informa de un error. [El proveedor OLE/DB ha devuelto un mensaje : El nombre de columna ' Customer ' no es válido. Solo se pueden especificar los nombres de nivel o de medida.]

Una forma de corregir la consulta es usar lo siguiente:

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

Sin embargo, al pasar instrucciones SQL de forma que el servidor OLAP sea un proceso lento, puede que reciba un error de tiempo de espera en algunos equipos:

El proveedor OLE DB ' MSOLAP ' informó de un error. [OLE/DB (proveedor) devolvió el mensaje: no se puede abrir la base de datos ' FoodMart '] [OLE/DB (proveedor) devolvió el mensaje: error de servidor OLAP: error en la operación solicitada debido al tiempo de espera.]

Ejemplos de servidor vinculado con nombres de cuatro partes

El ejemplo de código Transact-SQL de esta sección 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 llamado 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 servidores vinculados con un nombre de cuatro partes funcionan correctamente, pueden tardar mucho tiempo en devolver un resultado al cliente. La sintaxis del 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 desde el servidor OLAP y realizar el GROUP BY mismo, lo que puede tardar recursos y tiempo significativos.

Microsoft le recomienda que envíe una instrucción MDX a través OPENROWSET de una OPENQUERY función or, como se muestra en los ejemplos anteriores. Este método permite a SQL Server enviar 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 por la OPENQUERY función en otros operadores SQL. En el caso de consultas y consultas MDX básicas GROUP BY que devuelven una cantidad relativamente pequeña de datos (como una pantalla), el conjunto de resultados debe crearse siempre en menos de 10 segundos, generalmente en 5 segundos, independientemente del tamaño del cubo. Si las consultas tardan más, puede crear más agregaciones mediante el Asistente para análisis basado en el uso.

Sugerencias de rendimiento

Estas son algunas sugerencias de rendimiento:

  • SQL Server abre dos conexiones con el proveedor OLAP para cada consulta. Una de ellas se reutiliza para consultas posteriores; por lo tanto, si ejecuta el comando de nuevo, la segunda consulta podría ejecutarse más rápido.

  • Para aumentar la velocidad, agrupe por otra dimensión (porque está obteniendo menos datos).

  • Un escenario en el peor de los casos sería cuando el cubo se almacene mediante OLAP relacional (ROLAP) y no haya agregación. A continuación, el servidor OLAP vuelve a abrir 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 sólo 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 en cualquier archivo de cubo, mediante una aplicación OLE DB C++ o una aplicación ADO (ADO * MD).

  • SQL Server instala algunos proveedores OLE DB y configura los que se cargan en proceso. Debido a que SQL Server no instala el proveedor MSOLAP, se configura para que se cargue fuera de proceso. Microsoft recomienda encarecidamente cambiar las opciones del proveedor OLAP para que se cargue como en proceso, ya que esta configuración mejora el rendimiento de las consultas OLAP. Para realizar el cambio, siga estos pasos:

    1. En la carpeta seguridad, haga clic con el botón secundario en servidores vinculados y, a continuación, haga clic en nuevo servidor vinculado.
    2. Para el nombre del proveedor, haga clic para seleccionar proveedor OLE DB para Servicios OLAP.
    3. Haga clic en Opciones.
    4. Haga clic para seleccionar permitir InProcess.
    5. Haga clic en Aceptar.

Referencias

  • Para obtener una descripción detallada de los sp_addlinkedserver parámetros del procedimiento almacenado, vea los libros en pantalla de SQL Server.

  • Para obtener más información acerca de la configuración y el uso de consultas distribuidas, busque sobre sp_addlinkedserver ,, OPENQUERY OPENROWSET y temas relacionados en los libros en pantalla de SQL Server.

  • Para obtener más información acerca de la tecnología OLAP y la sintaxis MDX, consulte OLAP Services Books online.