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

En este artículo se describe cómo realizar una consulta distribuida SQL Server con el 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 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 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 aplanados , como se describe en la documentación de OLE DB. Para obtener más información sobre la SELECT sintaxis admitida por SQL Server OLAP Services, consulte 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 de MSOLAP en el equipo que ejecuta SQL Server. El proveedor OLE DB de MSOLAP se instala al instalar los componentes de cliente OLAP desde el 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 OPENQUERYOpenRowset funciones y . Debe cambiar los nombres del 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, recibe este mensaje de error:

Servidor: Msg 7399, Level 16, State 1, Line 1 OLE DB provider "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 de 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' ha notificado 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 correctamente, 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 de 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 recursos y tiempo significativos.

Microsoft recomienda enviar una instrucción MDX a través de una OPENROWSETOPENQUERY función o , como se muestra en los ejemplos anteriores. Este método permite 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. Para consultas MDX básicas y GROUP BY consultas 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, puede crear más agregaciones mediante el Asistente para análisis basado en uso.

Sugerencias de rendimiento

Estas son algunas sugerencias de rendimiento:

  • SQL Server abre dos conexiones al proveedor OLAP para cada consulta. Uno de ellos 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 en el peor de los casos 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 vuelve a abrir una conexión a SQL Server para obtener las filas de la tabla de hechos. En este caso, no use una consulta distribuida de SQL Server.

  • Si solo necesita un conjunto de resultados de un servidor OLAP o un archivo de cubo, pruebe a ejecutar el SQL Server o la consulta multidimensional directamente en el servidor OLAP, o en 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 el proveedor MSOLAP no está instalado por SQL Server, está configurado para cargarse fuera de proceso. Microsoft recomienda encarecidamente cambiar las opciones para que el proveedor OLAP 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 derecho en Servidores vinculadosy, 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 parámetros del sp_addlinkedserver procedimiento almacenado, consulte SQL Server Libros en pantalla.

  • Para obtener más información sobre cómo configurar y usar consultas distribuidas, busque , sp_addlinkedserverOPENQUERY, OPENROWSETy temas relacionados, en SQL Server Libros en pantalla.

  • Para obtener más información sobre la tecnología OLAP y la sintaxis MDX, consulte Los Libros en pantalla de OLAP Services.