Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób wykonywania zapytania rozproszonego programu SQL Server za pomocą serwera OLAP.
Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 218592
Podsumowanie
W tym artykule opisano sposób wykonywania zapytania rozproszonego programu SQL Server w celu pobrania danych z modułu usług OLAP Services (lub Analysis Services). Za pomocą programu Microsoft SQL Server można wykonywać zapytania względem dostawców OLE DB. W tym celu możesz użyć jednej z następujących czynności:
OPENQUERY
Użyj funkcji Języka Transact-SQL lubOPENROWSET
.- Użyj zapytania z czterema częściami nazw, w tym nazwy serwera połączonego.
Na przykład:
sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source','location', 'provider_string', 'catalog'
SELECT *
FROM OPENQUERY(mylinkedserver, 'select * from table1')
Możesz użyć OPENROWSET
funkcji lub OPENQUERY
w instrukcji programu SQL Server SELECT
, aby przekazać zapytania do połączonego serwera OLAP. Zapytanie jest ograniczone do skróconej SELECT
składni obsługiwanej przez usługi OLAP, ale zapytanie może zawierać składnię wielowymiarowych wyrażeń (MDX). Zapytanie obejmujące rozwiązanie MDX zwraca spłaszczone zestawy wierszy zgodnie z opisem w dokumentacji OLE DB. Aby uzyskać więcej informacji na temat składni obsługiwanej SELECT
przez usługi OLAP programu SQL Server, zobacz temat Obsługiwane składnia SQL SELECT w książkach usług OLAP Online.
Aby wykonać zapytanie dotyczące lokalnej lub zdalnej bazy danych serwera OLAP z programu SQL Server, należy zainstalować dostawcę BAZY danych OLE DB MSOLAP na komputerze z uruchomionym programem SQL Server. Dostawca OLE DB MSOLAP jest instalowany podczas instalowania składników klienta OLAP z programu SQL Server.
Przykład OPENROWSET i OPENQUERY
W poniższym przykładzie kodu Transact-SQL pokazano, jak skonfigurować i używać zapytań rozproszonych z serwerem OLAP za pomocą OPENQUERY
funkcji i OpenRowset
. Należy odpowiednio zmienić nazwy źródeł danych i nazwę katalogu.
------------------------------------------
--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])' )
Uwaga 16.
Temat Przekazywanie zapytań z programu SQL Server do połączonego serwera OLAP w książkach usług OLAP Online zawiera usterkę dokumentacji w przykładzie kodu:
SELECT *
FROM OPENQUERY(olap_server, 'SELECT [customer], [quantity] FROM sales')
Obsługiwana jest tylko ograniczona forma sql i można określić tylko nazwy poziomów lub miar. Po uruchomieniu zapytania zostanie wyświetlony następujący komunikat o błędzie:
Serwer: Msg 7399, Level 16, State 1, Line 1 OLE DB provider "MSOLAP" zgłosił błąd. [Zwrócony komunikat
:
dostawcy OLE/DB Nazwa kolumny "customer" jest nieprawidłowa. Można określić tylko nazwy poziomów lub miar.]
Jednym ze sposobów naprawienia zapytania jest użycie następujących elementów:
SELECT *
FROM OPENQUERY(olap_server, 'SELECT [unit sales] FROM sales')
Jednak przekazywanie instrukcji SQL w tym formularzu do serwera OLAP może być powolne i może wystąpić błąd przekroczenia limitu czasu na niektórych komputerach:
Dostawca OLE DB "MSOLAP" zgłosił błąd. [Zwrócony komunikat dostawcy OLE/DB: Nie można otworzyć bazy danych "foodmart"] [Dostawca OLE/DB zwrócił komunikat: Błąd serwera OLAP: Operacja zażądana nie powiodła się z powodu przekroczenia limitu czasu.]
Przykłady serwera połączonego z czteroczęściowymi nazwami
Przykładowy kod Języka Transact-SQL w tej sekcji przedstawia użycie serwera połączonego z nazwą czteroczęściową w celu wykonywania zapytań dotyczących modułu OLAP. W kodzie połączony serwer o nazwie Olap_server
został utworzony w poprzednim przykładzie:
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]
Mimo że przykłady serwera połączonego z nazwą czteroczęściową działają prawidłowo, może to zająć dużo czasu, aby zwrócić wynik do klienta. Składnia nazwy czteroczęściowej jest koncepcją programu SQL Server; Jest on używany w poleceniu Języka Transact-SQL w celu odwoływania się do tabeli na serwerze połączonym i ma ograniczoną składnię zapytań OLAP. Program SQL Server może określić, że musi odczytać całą tabelę faktów z serwera OLAP i wykonać GROUP BY
samodzielnie, co może zająć dużo czasu i zasobów.
Firma Microsoft zaleca wysyłanie instrukcji MDX za pośrednictwem OPENROWSET
funkcji lub OPENQUERY
, jak pokazano we wcześniejszych przykładach. Ta metoda umożliwia programowi SQL Server wysyłanie polecenia bezpośrednio do połączonego dostawcy OLAP bez próby przeanalizowana. Polecenie może być MDX lub podzbiorem sql obsługiwanego przez dostawcę OLAP. Możesz użyć zestawu wierszy zwróconego OPENQUERY
z funkcji w innych operatorach SQL. W przypadku podstawowych zapytań MDX i GROUP BY
zapytań, które zwracają stosunkowo małą ilość danych (na przykład ekranowe), zestaw wyników musi być zawsze tworzony w mniej niż 10 sekund, zazwyczaj w ciągu 5 sekund, niezależnie od rozmiaru modułu. Jeśli zapytania będą trwać dłużej, możesz utworzyć więcej agregacji przy użyciu kreatora analizy opartej na użyciu.
Wskazówki dotyczące wydajności
Oto kilka wskazówek dotyczących wydajności:
Program SQL Server otwiera dwa połączenia z dostawcą OLAP dla każdego zapytania. Jeden z nich jest ponownie używany w przypadku późniejszych zapytań; Dlatego jeśli ponownie uruchomisz polecenie, drugie zapytanie może działać szybciej.
Aby zwiększyć szybkość, pogrupuj według innego wymiaru (ponieważ otrzymujesz mniej danych).
Najgorszy scenariusz dotyczy sytuacji, gdy moduł jest przechowywany za pośrednictwem relacyjnego OLAP (ROLAP) i nie ma agregacji. Następnie serwer OLAP otwiera połączenie z powrotem z programem SQL Server w celu uzyskania wierszy tabeli faktów. W tym przypadku nie używaj zapytania rozproszonego programu SQL Server.
Jeśli potrzebujesz tylko zestawu wyników z serwera OLAP lub pliku modułu, spróbuj uruchomić program SQL Server lub zapytanie wielowymiarowe bezpośrednio względem serwera OLAP lub dowolny plik modułu, używając aplikacji C++ OLE DB lub aplikacji ADO(ADO*MD).
Program SQL Server instaluje niektórych dostawców OLE DB i konfiguruje je do ładowania w procesie. Ponieważ dostawca MSOLAP nie jest zainstalowany przez program SQL Server, jest skonfigurowany do ładowania poza procesem. Firma Microsoft zdecydowanie zaleca zmianę opcji ładowania dostawcy OLAP jako procesu, ponieważ ta konfiguracja poprawia wydajność zapytań OLAP. Aby wprowadzić zmianę, wykonaj następujące kroki:
- W folderze Zabezpieczenia kliknij prawym przyciskiem myszy pozycję Serwery połączone, a następnie kliknij pozycję Nowy serwer połączony.
- W polu Nazwa dostawcy kliknij, aby wybrać dostawcę OLE DB dla usług OLAP.
- Kliknij Opcje.
- Kliknij, aby wybrać pozycję Zezwalaj na przetwarzanie.
- Kliknij przycisk OK.
Informacje
Aby uzyskać szczegółowy opis
sp_addlinkedserver
parametrów procedury składowanej, zobacz Sql Server Books Online.Aby uzyskać więcej informacji na temat konfigurowania i używania zapytań rozproszonych, wyszukaj
sp_addlinkedserver
tematy ,OPENQUERY
,OPENROWSET
i powiązane, w temacie Sql Server Books Online.Aby dowiedzieć się więcej o technologii OLAP i składni MDX, zobacz OLAP Services Books Online.