Come eseguire una query distribuita SQL Server con il server OLAP

Questo articolo descrive come eseguire una query distribuita SQL Server con il server OLAP.

Versione originale del prodotto: SQL Server
Numero KB originale: 218592

Riepilogo

Questo articolo descrive come eseguire una query distribuita SQL Server per recuperare i dati da un cubo OLAP Services (o Analysis Services). Con Microsoft SQL Server è possibile eseguire query sui provider OLE DB. A tale scopo, è possibile usare una delle opzioni seguenti:

  • Usare o OPENQUERY le OPENROWSET funzioni Transact-SQL.
  • Usare una query con nomi in quattro parti, incluso un nome di server collegato.

Ad esempio:

sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source','location', 'provider_string', 'catalog'
SELECT *
FROM OPENQUERY(mylinkedserver, 'select * from table1')

È possibile usare la OPENROWSET funzione o OPENQUERY in un'istruzione SQL Server SELECT per passare query al server OLAP collegato. La query è limitata alla sintassi abbreviata SELECT supportata dai servizi OLAP. Tuttavia, la query può includere la sintassi MDX (Multidimensional Expressions). Una query che include MDX restituisce set di righe flat , come descritto nella documentazione di OLE DB. Per altre informazioni sulla SELECT sintassi supportata da SQL Server OLAP Services, vedere l'argomento Supported SQL SELECT Syntax (Sintassi SQL SELECT supportata) nella documentazione online dei servizi OLAP.

Per eseguire query su un database server OLAP locale o remoto da SQL Server, è necessario installare il provider OLE DB MSOLAP nel computer che esegue SQL Server. Il provider OLE DB MSOLAP viene installato quando si installano i componenti client OLAP dal SQL Server.

Esempio di OPENROWSET e OPENQUERY

Nell'esempio di codice Transact-SQL seguente viene illustrato come configurare e usare query distribuite con un server OLAP con le OPENQUERY funzioni e OpenRowset . È necessario modificare i nomi delle origini dati e il nome del catalogo in base alle esigenze.

------------------------------------------
--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

Nell'argomento Passaggio di query da SQL Server a un server OLAP collegato, nella documentazione online di OLAP Services, è presente un bug della documentazione nell'esempio di codice:

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

È supportata solo una forma limitata di SQL e possono essere specificati solo i nomi di livello o di misura. Quando si esegue la query, viene visualizzato questo messaggio di errore:

Server: Msg 7399, Level 16, State 1, Line 1 OLE DB provider 'MSOLAP' ha segnalato un errore. [Messaggio: restituito dal provider OLE/DB Il nome della colonna 'customer' non è valido. È possibile specificare solo i nomi di livello o di misura.]

Un modo per correggere la query consiste nell'usare quanto segue:

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

Tuttavia, il passaggio di istruzioni SQL in questo formato al server OLAP potrebbe essere lento e potrebbe essere visualizzato un errore di timeout in alcuni computer:

Il provider OLE DB 'MSOLAP' ha segnalato un errore. [Messaggio restituito dal provider OLE/DB: Impossibile aprire il database 'foodmart'] [Messaggio restituito dal provider OLE/DB: errore del server OLAP: Operazione richiesta non riuscita a causa del timeout.]

Esempi di server collegati con nomi in quattro parti

L'esempio di codice Transact-SQL in questa sezione illustra l'uso di un server collegato con un nome in quattro parti per eseguire query su un cubo OLAP. Nel codice il server collegato denominato Olap_server è stato creato nell'esempio precedente:

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]

Sebbene gli esempi di server collegati con un nome in quattro parti funzionino correttamente, potrebbero richiedere molto tempo per restituire un risultato al client. La sintassi del nome in quattro parti è un concetto SQL Server, viene usata in un comando Transact-SQL per fare riferimento a una tabella in un server collegato e ha una sintassi limitata per le query OLAP. SQL Server potrebbe determinare che deve leggere l'intera tabella dei fatti dal server OLAP ed eseguire l'oggetto GROUP BY stesso, che potrebbe richiedere risorse e tempo significativi.

Microsoft consiglia di inviare un'istruzione MDX tramite una OPENROWSET funzione o OPENQUERY , come illustrato negli esempi precedenti. Questo metodo consente SQL Server inviare il comando direttamente al provider OLAP collegato, senza tentare di analizzarlo. Il comando può essere MDX o il subset di SQL supportato dal provider OLAP. È possibile usare il set di righe restituito dalla OPENQUERY funzione in altri operatori SQL. Per le query MDX di base e GROUP BY le query che restituiscono una quantità relativamente ridotta di dati ,ad esempio una schermata, il set di risultati deve essere sempre creato in meno di 10 secondi, in genere in 5 secondi, indipendentemente dalle dimensioni del cubo. Se le query richiedono più tempo, è possibile creare più aggregazioni usando l'analisi guidata basata sull'utilizzo.

Suggerimenti per le prestazioni

Ecco alcuni suggerimenti sulle prestazioni:

  • SQL Server apre due connessioni al provider OLAP per ogni query. Uno di questi viene riutilizzato per le query successive; Pertanto, se si esegue di nuovo il comando, la seconda query potrebbe essere eseguita più velocemente.

  • Per aumentare la velocità, raggruppare in base a un'altra dimensione (perché si ottengono meno dati).

  • Uno scenario peggiore è quello in cui il cubo viene archiviato tramite OLAP relazionale (ROLAP) e non è presente alcuna aggregazione. Il server OLAP apre quindi una connessione a SQL Server per ottenere le righe della tabella dei fatti. In questo caso, non usare una query distribuita SQL Server.

  • Se è sufficiente un set di risultati da un server OLAP o da un file cubo, provare a eseguire la query SQL Server o multidimensionale direttamente sul server OLAP o su qualsiasi file cubo usando un'applicazione OLE DB C++ o un'applicazione ADO(ADO*MD).

  • SQL Server installa alcuni provider OLE DB e li configura per il caricamento in-process. Poiché il provider MSOLAP non è installato da SQL Server, è configurato per il caricamento out-of-process. Microsoft consiglia vivamente di modificare le opzioni per il caricamento del provider OLAP come in-process, perché questa configurazione migliora le prestazioni delle query OLAP. Per apportare la modifica, seguire questa procedura:

    1. Nella cartella Sicurezza fare clic con il pulsante destro del mouse su Server collegati e quindi scegliere Nuovo server collegato.
    2. Per Nome provider fare clic per selezionare Provider OLE DB per i servizi OLAP.
    3. Fare clic su Opzioni.
    4. Fare clic per selezionare Consenti InProcess.
    5. Fare clic su OK.

Riferimenti

  • Per una descrizione dettagliata dei parametri della sp_addlinkedserver stored procedure, vedere SQL Server Documentazione online.

  • Per altre informazioni sulla configurazione e sull'uso di query distribuite, cercare sp_addlinkedserver in , OPENQUERY, OPENROWSETe gli argomenti correlati, nella documentazione online di SQL Server.

  • Per altre informazioni sulla tecnologia OLAP e sulla sintassi MDX, vedere la documentazione online dei servizi OLAP.