Compartir a través de


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

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 o OPENROWSET .
  • 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:

    1. En la carpeta Seguridad, haga clic con el botón derecho en Servidores vinculados y, a continuación, haga clic en Nuevo servidor vinculado.
    2. En 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 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 OPENQUERYOPENROWSETtemas 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.