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 veya OPENROWSET 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 OPENROWSETOPENQUERY 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:

    1. Güvenlik klasöründe Bağlı Sunucular'a sağ tıklayın ve ardından Yeni Bağlı Sunucu'ya tıklayın.
    2. Sağlayıcı Adı'na tıklayarak OLAP Hizmetleri için OLE DB Sağlayıcısı'nı seçin.
    3. Seçenekler'e tıklayın.
    4. inProcess'e İzin Ver'i seçmek için tıklayın.
    5. 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, OPENROWSETve ilgili konularda arama sp_addlinkedserver yapın.

  • OLAP teknolojisi ve MDX söz dizimi hakkında daha fazla bilgi edinmek için bkz. OLAP Services Books Online.