OLAP Sunucusu ile SQL Server dağıtılmış sorgu gerçekleştirme
Bu makalede OLAP Sunucusu ile SQL Server dağıtılmış sorgu gerçekleştirme işlemi açıklanmaktadır.
Özgün ürün sürümü: SQL Server
Özgün KB numarası: 218592
Özet
Bu makalede, OLAP Hizmetleri (veya Analysis Services) küpten veri almak için SQL Server dağıtılmış sorgu gerçekleştirme işlemi açıklanmaktadır. Microsoft SQL Server ile OLE DB sağlayıcılarına yönelik sorgular gerçekleştirebilirsiniz. Bunu yapmak için aşağıdakilerden birini kullanabilirsiniz:
OPENQUERY
veyaOPENROWSET
Transact-SQL işlevlerini kullanın.- Bağlı sunucu adı da dahil olmak üzere dört bölümlü adlara sahip bir sorgu kullanın.
Örneğin:
sp_addlinkedserver 'mylinkedserver', 'product_name', 'myoledbprovider', 'data_source','location', 'provider_string', 'catalog'
SELECT *
FROM OPENQUERY(mylinkedserver, 'select * from table1')
Sorguları bağlı OLAP sunucusuna OPENROWSET
OPENQUERY
geçirmek için veya işlevini bir SQL Server SELECT
deyiminde kullanabilirsiniz. Sorgu, OLAP Hizmetleri tarafından desteklenen kısaltılmış SELECT
söz dizimi ile sınırlıdır; ancak sorgu Çok Boyutlu İfadeler (MDX) söz dizimini içerebilir. MDX içeren bir sorgu, OLE DB belgelerinde açıklandığı gibi düzleştirilmiş satır kümeleri döndürür. SQL Server OLAP Hizmetleri tarafından desteklenen söz dizimi hakkında SELECT
daha fazla bilgi için, OLAP Services Books Online'da Desteklenen SQL SELECT Söz Dizimi konusuna bakın.
yerel veya uzak OLAP sunucu veritabanını SQL Server sorgulamak için, SQL Server çalıştıran bilgisayara MSOLAP OLE DB sağlayıcısını yüklemeniz gerekir. SQL Server OLAP istemci bileşenlerini yüklediğinizde MSOLAP OLE DB sağlayıcısı yüklenir.
OPENROWSET ve OPENQUERY örneği
Aşağıdaki Transact-SQL kod örneği, ve işlevleriyle bir OLAP sunucusuyla dağıtılmış sorguları ayarlamayı OPENQUERY
ve OpenRowset
kullanmayı gösterir. Veri kaynağı adlarını ve katalog adını uygun şekilde değiştirmeniz gerekir.
------------------------------------------
--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])' )
Not
OLAP Services Books Online'da SQL Server'den Bağlı OLAP Sunucusuna Sorgu Geçirme konusu, kod örneğinde bir belge hatası içerir:
SELECT *
FROM OPENQUERY(olap_server, 'SELECT [customer], [quantity] FROM sales')
Yalnızca sınırlı bir SQL biçimi desteklenir ve yalnızca düzey veya ölçü adları belirtilebilir. Sorguyu çalıştırdığınızda şu hata iletisini alırsınız:
Sunucu: Msg 7399, Düzey 16, Durum 1, Satır 1 OLE DB sağlayıcısı 'MSOLAP' bir hata bildirdi. [OLE/DB sağlayıcısı ileti
:
döndürdü 'customer' sütun adı geçersiz. Yalnızca düzey veya ölçü adları belirtilebilir.]
Sorguyu düzeltmenin bir yolu aşağıdakileri kullanmaktır:
SELECT *
FROM OPENQUERY(olap_server, 'SELECT [unit sales] FROM sales')
Ancak, bu formdaki SQL deyimlerini OLAP Server'a geçirmek yavaş olabilir ve bazı bilgisayarlarda zaman aşımı hatası alabilirsiniz:
OLE DB sağlayıcısı 'MSOLAP' bir hata bildirdi. [OLE/DB sağlayıcısı döndürülen ileti: 'foodmart' veritabanı açılamıyor] [OLE/DB sağlayıcısı ileti döndürdü: OLAP sunucusu hatası: İstenen işlem zaman aşımı nedeniyle başarısız oldu.]
Dört parçalı adlarla bağlantılı sunucu örnekleri
Bu bölümdeki Transact-SQL kod örneği, OLAP küpünü sorgulamak için dört parçalı bir ada sahip bağlı sunucunun kullanımını gösterir. Kodda, adlı Olap_server
bağlı sunucu önceki örnekte oluşturulmuştur:
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]
Dört parçalı ada sahip bağlantılı sunucu örnekleri düzgün çalışsa da, istemciye bir sonuç döndürmeleri uzun sürebilir. Dört bölümlü ad söz dizimi SQL Server bir kavramdır; bağlantılı sunucudaki bir tabloya başvurmak için Transact-SQL komutunda kullanılır ve OLAP sorguları için söz dizimi sınırlıdır. SQL Server, OLAP Sunucusu'ndan olgu tablosunun tamamını okuması ve kendisini gerçekleştirmesi GROUP BY
gerektiğini saptayabilir; bu da önemli kaynaklar ve zaman alabilir.
Microsoft, önceki örneklerde gösterildiği gibi bir OPENROWSET
veya OPENQUERY
işlevi aracılığıyla MDX deyimi göndermenizi önerir. Bu yöntem, SQL Server komutu ayrıştırmaya çalışmadan doğrudan bağlı OLAP sağlayıcısına göndermenizi sağlar. Komut MDX veya OLAP sağlayıcısının desteklediği SQL alt kümesi olabilir. İşlevden OPENQUERY
döndürülen satır kümesini diğer SQL işleçlerinde kullanabilirsiniz. Görece az miktarda veri döndüren temel MDX sorguları ve GROUP BY
sorguları için (ekranlı gibi), sonuç kümesi her zaman küp boyutuna bakılmadan 10 saniyeden kısa bir sürede (genellikle 5 saniye) oluşturulmalıdır. Sorgular daha uzun sürerse, kullanım tabanlı analiz sihirbazını kullanarak daha fazla toplama oluşturabilirsiniz.
Performans ipuçları
Performansla ilgili bazı ipuçları şunlardır:
SQL Server her sorgu için OLAP sağlayıcısına iki bağlantı açar. Bunlardan biri daha sonraki sorgular için yeniden kullanılır; Bu nedenle, komutu yeniden çalıştırırsanız ikinci sorgu daha hızlı çalışabilir.
Hızı artırmak için başka bir boyuta göre gruplandırma yapın (çünkü daha az veri alıyorsunuz).
Küp ilişkisel OLAP (ROLAP) aracılığıyla depolandığında ve toplama olmadığında en kötü durum senaryosu olabilir. Ardından OLAP sunucusu, olgu tablosu satırlarını almak için SQL Server'a bir bağlantı açar. Bu durumda dağıtılmış SQL Server sorgu kullanmayın.
Yalnızca bir OLAP sunucusundan veya küp dosyasından bir sonuç kümesine ihtiyacınız varsa, OLE DB C++ uygulaması veya ADO(ADO*MD) uygulaması kullanarak SQL Server veya Çok Boyutlu sorguyu doğrudan OLAP sunucusunda veya herhangi bir küp dosyasında çalıştırmayı deneyin.
SQL Server bazı OLE DB sağlayıcılarını yükler ve bunları işlem sırasında yüklenecek şekilde yapılandırılır. MSOLAP sağlayıcısı SQL Server tarafından yüklenmediğinden, işlem dışı yüklenecek şekilde yapılandırılır. Bu yapılandırma OLAP sorgularınızın performansını artırdığından, Microsoft, OLAP sağlayıcısının işlem sırasında yüklenecek seçeneklerini değiştirmenizi kesinlikle önerir. Değişikliği yapmak için şu adımları izleyin:
- Güvenlik klasöründe Bağlı Sunucular'a sağ tıklayın ve ardından Yeni Bağlı Sunucu'ya tıklayın.
- Sağlayıcı Adı'na tıklayarak OLAP Hizmetleri için OLE DB Sağlayıcısı'nı seçin.
- Seçenekler'e tıklayın.
- inProcess'e İzin Ver'i seçmek için tıklayın.
- Tamam'ı tıklatın.
Başvurular
Saklı yordam parametrelerinin
sp_addlinkedserver
ayrıntılı açıklaması için bkz. Çevrimiçi Kitaplar SQL Server.Dağıtılmış sorguları ayarlama ve kullanma hakkında daha fazla ayrıntı için Çevrimiçi Kitaplar'SQL Server ,
OPENQUERY
,OPENROWSET
ve ilgili konularda aramasp_addlinkedserver
yapın.OLAP teknolojisi ve MDX söz dizimi hakkında daha fazla bilgi edinmek için bkz. OLAP Services Books Online.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin