REST API ile zaman uyumsuz yenileme
REST çağrılarını destekleyen herhangi bir programlama dilini kullanarak Azure Analysis Services tablolu modellerinizde sorgu ölçeği genişletme için salt okunur çoğaltmaların eşitlenmesi dahil zaman uyumsuz veri yenileme işlemleri gerçekleştirebilirsiniz.
Veri yenileme işlemleri, veri hacmi, bölümleri kullanarak iyileştirme düzeyi gibi birçok faktöre bağlı olarak biraz zaman alabilir. Geleneksel olarak, bu işlemler TOM (Tablolu Nesne Modeli), PowerShell cmdlet'leri veya TMSL (Tablosal Model Betik Dili) gibi mevcut yöntemlerle çağrılır. Ancak, bu yöntemler genellikle güvenilir olmayan, uzun süre çalışan HTTP bağlantıları gerektirebilir.
Azure Analysis Services için REST API, veri yenileme işlemlerinin zaman uyumsuz olarak yürütülmesini sağlar. REST API kullanılarak, istemci uygulamalarından uzun süre çalışan HTTP bağlantıları gerekli değildir. Güvenilirlik için otomatik yeniden denemeler ve toplu işlemeler gibi başka yerleşik özellikler de vardır.
Temel URL
Temel URL şu biçimi izler:
https://<rollout>.asazure.windows.net/servers/<serverName>/models/<resource>/
Örneğin, Batı ABD Azure bölgesinde bulunan adlı bir sunucuda AdventureWorks adlı myserver
bir model düşünün. Sunucu adı:
asazure://westus.asazure.windows.net/myserver
Bu sunucu adının temel URL'si:
https://westus.asazure.windows.net/servers/myserver/models/AdventureWorks/
Temel URL kullanılarak, kaynaklar ve işlemler aşağıdaki parametrelere göre eklenebilir:
- ile biten her şey bir koleksiyondur.
- () ile biten her şey bir işlevdir.
- Diğer her şey bir kaynak/nesnedir.
Örneğin, yenileme işlemi gerçekleştirmek için Refreshes koleksiyonundaki POST fiilini kullanabilirsiniz:
https://westus.asazure.windows.net/servers/myserver/models/AdventureWorks/refreshes
Kimlik Doğrulaması
Yetkilendirme üst bilgisinde tüm çağrıların kimliği geçerli bir Microsoft Entra ID (OAuth 2) belirteci ile doğrulanmalıdır ve aşağıdaki gereksinimleri karşılamalıdır:
Belirteç bir kullanıcı belirteci veya uygulama hizmet sorumlusu olmalıdır.
Belirtecin hedef kitlesinin tam olarak
https://*.asazure.windows.net
şeklinde ayarlanmış olması gerekir.*
Bunun bir yer tutucu veya joker karakter olmadığını ve hedef kitlenin alt etki alanı olarak karaktere*
sahip olması gerektiğini unutmayın. gibihttps://customersubdomain.asazure.windows.net
özel hedef kitleler desteklenmez. Geçersiz bir hedef kitlenin belirtilmesi kimlik doğrulaması hatasıyla sonuçlanmalı.Kullanıcı veya uygulamanın istenen çağrıyı yapmak için sunucu veya model üzerinde yeterli izinlere sahip olması gerekir. İzin düzeyi, modeldeki rollere veya sunucudaki yönetici grubuna göre belirlenir.
Önemli
Şu anda sunucu yöneticisi rolü izinleri gereklidir.
POST/refreshes
Yenileme işlemi gerçekleştirmek için ,/refreshes koleksiyonundaki POST fiilini kullanarak koleksiyona yeni bir yenileme öğesi ekleyin. Yanıttaki Konum üst bilgisi yenileme kimliğini içerir. İstemci uygulaması zaman uyumsuz olduğundan gerekirse daha sonra bağlantıyı kesebilir ve durumu denetleyebilir.
Bir model için aynı anda yalnızca bir yenileme işlemi kabul edilir. Geçerli bir çalışan yenileme işlemi varsa ve başka bir işlem gönderildiyse, 409 Çakışma HTTP durum kodu döndürülür.
Gövde aşağıdakine benzer olabilir:
{
"Type": "Full",
"CommitMode": "transactional",
"MaxParallelism": 2,
"RetryCount": 2,
"Objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer"
},
{
"table": "DimDate"
}
]
}
Parametreler
Parametre belirtilmezse varsayılan değer uygulanır.
Adı | Tür | Açıklama | Varsayılan |
---|---|---|---|
Type |
Sabit listesi | Gerçekleştirilecek işleme türü. Türler, TMSL yenileme komut türleriyle hizalanır: full , clearValues , calculate , dataOnly , automatic , ve defragment . add türü desteklenmez. |
automatic |
CommitMode |
Sabit listesi | Nesnelerin toplu işlenip işlenmediğini veya yalnızca işlemin tamamı tamamlandığında işlenip işlenmediğini belirler. Modlar şunlardır: transactional , partialBatch . |
transactional |
MaxParallelism |
Int | Bu değer, işlem komutlarının paralel olarak çalıştırıldığı en fazla iş parçacığı sayısını belirler. Bu değer, TMSL Sırası komutunda veya diğer yöntemler kullanılarak ayarlanabilen MaxParallelism özelliğiyle hizalanır. | 10 |
RetryCount |
Int | İşlemin başarısız olmadan önce kaç kez yeniden denendiğini gösterir. | 0 |
Objects |
Dizi | İşlenecek nesne dizisi. Her nesne şunları içerir: tablonun tamamını işlerken "tablo" veya bir bölümü işlerken "tablo" ve "bölüm". Hiçbir nesne belirtilmezse, modelin tamamı yenilenir. | Modelin tamamını işleme |
için CommitMode
belirtmekpartialBatch
, saatler sürebilecek büyük veri kümelerinin ilk yüklemesini yaparken yararlıdır. Yenileme işlemi bir veya daha fazla toplu işlemi başarıyla işledikten sonra başarısız olursa, başarıyla işlenen toplu işler işlenmeye devam eder (başarıyla işlenen toplu işlemleri geri almaz).
Not
Yazma sırasında toplu iş boyutu MaxParallelism değeridir, ancak bu değer değişebilir.
Durum değerleri
Durum değeri | Açıklama |
---|---|
notStarted |
İşlem henüz başlatılmadı. |
inProgress |
İşlem devam ediyor. |
timedOut |
kullanıcı tarafından belirtilen zaman aşımına bağlı olarak işlem zaman aşımına uğradı. |
cancelled |
İşlem kullanıcı veya sistem tarafından iptal edildi. |
failed |
İşlem başarısız oldu. |
succeeded |
İşlem başarılı oldu. |
GET /refreshes/<refreshId>
Yenileme işleminin durumunu denetlemek için yenileme kimliğindeki GET fiilini kullanın. Yanıt gövdesinin bir örneği aşağıda verilmiştır. İşlem devam ediyorsa, inProgress
durumunda döndürülür.
{
"startTime": "2017-12-07T02:06:57.1838734Z",
"endTime": "2017-12-07T02:07:00.4929675Z",
"type": "full",
"status": "succeeded",
"currentRefreshType": "full",
"objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer",
"status": "succeeded"
},
{
"table": "DimDate",
"partition": "DimDate",
"status": "succeeded"
}
]
}
GET /refreshes
Modelin geçmiş yenileme işlemlerinin listesini almak için /refreshes koleksiyonundaki GET fiilini kullanın. Yanıt gövdesinin bir örneği aşağıda verilmiştır.
Not
Yazma sırasında, son 30 günlük yenileme işlemleri depolanır ve döndürülür, ancak bu sayı değişebilir.
[
{
"refreshId": "1344a272-7893-4afa-a4b3-3fb87222fdac",
"startTime": "2017-12-07T02:06:57.1838734Z",
"endTime": "2017-12-07T02:07:00.4929675Z",
"status": "succeeded"
},
{
"refreshId": "474fc5a0-3d69-4c5d-adb4-8a846fa5580b",
"startTime": "2017-12-07T01:05:54.157324Z",
"endTime": "2017-12-07T01:05:57.353371Z",
"status": "succeeded"
}
]
DELETE /refreshes/<refreshId>
Devam eden yenileme işlemini iptal etmek için yenileme kimliğindeki DELETE fiilini kullanın.
POST /sync
Yenileme işlemlerini gerçekleştirdikten sonra, yeni verilerin sorgu ölçeği genişletilmesi için çoğaltmalarla eşitlenmesi gerekebilir. Bir model için eşitleme işlemi gerçekleştirmek için /sync işlevinde POST fiilini kullanın. Yanıttaki Konum üst bilgisi eşitleme işlemi kimliğini içerir.
GET /sync durumu
Eşitleme işleminin durumunu denetlemek için, işlem kimliğini parametre olarak geçiren GET fiilini kullanın. Yanıt gövdesinin bir örneği aşağıda verilmişti:
{
"operationId": "cd5e16c6-6d4e-4347-86a0-762bdf5b4875",
"database": "AdventureWorks2",
"UpdatedAt": "2017-12-09T02:44:26.18",
"StartedAt": "2017-12-09T02:44:20.743",
"syncstate": 2,
"details": null
}
için değerler syncstate
:
- 0: Çoğaltma. Veritabanı dosyaları bir hedef klasöre çoğaltılıyor.
- 1: Yeniden doldurma. Veritabanı salt okunur sunucu örneklerinde yeniden dolduruluyor.
- 2: Tamamlandı. Eşitleme işlemi başarıyla tamamlandı.
- 3: Başarısız oldu. Eşitleme işlemi başarısız oldu.
- 4: Son haline getirme. Eşitleme işlemi tamamlandı ancak temizleme adımları gerçekleştiriyor.
Kod örneği
GitHub'da RestApiSample adlı çalışmaya başlamanıza yardımcı olacak bir C# kod örneği aşağıda verilmiştir.
Kod örneğini kullanmak için
- Depoyu kopyalayın veya indirin. RestApiSample çözümünü açın.
- Satır istemcisini bulun. BaseAddress = ... ve temel URL'nizi sağlayın.
Kod örneği hizmet sorumlusu kimlik doğrulamasını kullanır.
Hizmet sorumlusu
Daha fazla bilgi için bkz . Hizmet sorumlusu oluşturma - Azure portalı ve Sunucu yöneticisi rolüne hizmet sorumlusu ekleme ve Azure AS'de hizmet sorumlusu ayarlama ve gerekli izinleri atama adımlarını izleyin. Ardından aşağıdaki ek adımları tamamlayın:
- Kod örneğinde dize yetkilisi = ...değerini bulun, common değerini kuruluşunuzun kiracı kimliğiyle değiştirin.
- ClientCredential sınıfının cred nesnesinin örneğini oluştururken kullanılması için açıklama/açıklamayı kaldırma. Uygulama Kimliği> ve <Uygulama Anahtarı> değerlerine <güvenli bir şekilde erişildiğinden emin olun veya hizmet sorumluları için sertifika tabanlı kimlik doğrulamasını kullanın.
- Örnek uygulamayı çalıştırın.