Asynchronní aktualizace s využitím rozhraní REST API
Pomocí libovolného programovacího jazyka, který podporuje volání REST, můžete provádět asynchronní operace aktualizace dat na tabulkových modelech služby Azure Analysis Services. To zahrnuje synchronizaci replik jen pro čtení pro horizontální navýšení kapacity dotazů.
Operace aktualizace dat můžou nějakou dobu trvat v závislosti na řadě faktorů, včetně objemu dat, úrovně optimalizace pomocí oddílů atd. Tyto operace byly tradičně vyvolány s existujícími metodami, jako je použití TOM (tabulkový objektový model), rutin PowerShellu nebo TMSL (jazyk skriptování tabulkového modelu). Tyto metody ale můžou vyžadovat často nespolehlivé dlouhotrvající připojení HTTP.
Rozhraní REST API pro Službu Azure Analysis Services umožňuje asynchronně provádět operace aktualizace dat. Pomocí rozhraní REST API nejsou dlouhotrvající připojení HTTP z klientských aplikací nutná. Existují také další integrované funkce pro spolehlivost, jako jsou automatické opakování a dávkové potvrzení.
Základní adresa URL
Základní adresa URL se řídí tímto formátem:
https://<rollout>.asazure.windows.net/servers/<serverName>/models/<resource>/
Představte si například model AdventureWorks na serveru s názvem myserver
, který se nachází v oblasti Azure USA – západ. Název serveru je:
asazure://westus.asazure.windows.net/myserver
Základní adresa URL pro tento název serveru je:
https://westus.asazure.windows.net/servers/myserver/models/AdventureWorks/
Pomocí základní adresy URL je možné připojit prostředky a operace na základě následujících parametrů:
- Všechno, co končí na s , je kolekce.
- Cokoli, co končí ( ) je funkce.
- Cokoli jiného je prostředek nebo objekt.
Operaci aktualizace můžete například provést pomocí příkazu POST v kolekci Refreshes:
https://westus.asazure.windows.net/servers/myserver/models/AdventureWorks/refreshes
Authentication
Všechna volání musí být ověřena platným tokenem Microsoft Entra ID (OAuth 2) v hlavičce autorizace a musí splňovat následující požadavky:
Token musí být token uživatele nebo instanční objekt aplikace.
Token musí mít nastavenou správnou cílovou skupinu
https://*.asazure.windows.net
.Uživatel nebo aplikace musí mít dostatečná oprávnění k provedení požadovaného volání na serveru nebo modelu. Úroveň oprávnění určuje role v rámci modelu nebo skupiny správců na serveru.
Důležité
V současné době jsou nutná oprávnění role správce serveru.
POST /refreshes
Pokud chcete provést operaci aktualizace, použijte příkaz POST v kolekci /refreshes a přidejte do kolekce novou položku aktualizace. Hlavička Umístění v odpovědi obsahuje ID aktualizace. Klientská aplikace se může později odpojit a zkontrolovat stav, protože je asynchronní.
Pro model je najednou přijata pouze jedna operace aktualizace. Pokud existuje aktuální spuštěná operace aktualizace a odešle se jiná, vrátí se stavový kód HTTP 409 Conflict.
Tělo může vypadat přibližně takto:
{
"Type": "Full",
"CommitMode": "transactional",
"MaxParallelism": 2,
"RetryCount": 2,
"Objects": [
{
"table": "DimCustomer",
"partition": "DimCustomer"
},
{
"table": "DimDate"
}
]
}
Parametry
Zadání parametrů není povinné. Použije se výchozí hodnota.
Name | Typ | Popis | Výchozí |
---|---|---|---|
Type |
Výčet | Typ zpracování, který se má provést. Typy jsou v souladu s typy příkazů aktualizace TMSL: full, clearValues, calculate, dataOnly, automatic a defragmentace. Typ přidání není podporován. | automatická |
CommitMode |
Výčet | Určuje, zda budou objekty potvrzeny v dávkách nebo pouze po dokončení. Mezi režimy patří: výchozí, transakční, partialBatch. | Transakční |
MaxParallelism |
Int | Tato hodnota určuje maximální počet vláken, na kterých se mají paralelně spouštět příkazy pro zpracování. Tato hodnota zarovnaná s MaxParallelism vlastnost, kterou lze nastavit v příkazu TMSL Sequence nebo pomocí jiných metod. | 10 |
RetryCount |
Int | Určuje počet opakování operace před selháním. | 0 |
Objects |
Pole | Pole objektů, které se mají zpracovat. Každý objekt zahrnuje: "table" při zpracování celé tabulky nebo tabulky a oddílu při zpracování oddílu. Pokud nejsou zadány žádné objekty, celý model se aktualizuje. | Zpracování celého modelu |
CommitMode se rovná partialBatch. Používá se při počátečním načtení velkých datových sad, které by mohly trvat hodiny. Pokud operace aktualizace po úspěšném potvrzení jedné nebo více dávek selže, úspěšně potvrzené dávky zůstanou potvrzené (nebude se vrátit úspěšně potvrzené dávky).
Poznámka:
V době psaní je velikost dávky hodnotou MaxParallelism, ale tato hodnota se může změnit.
Hodnoty stavu
Hodnota stavu | Popis |
---|---|
notStarted |
Operace ještě nebyla spuštěna. |
inProgress |
Probíhá operace. |
timedOut |
Časový limit operace vypršel na základě časového limitu zadaného uživatelem. |
cancelled |
Operace byla zrušena uživatelem nebo systémem. |
failed |
Operace se nezdařila. |
succeeded |
Operace byla úspěšná. |
GET /refreshes/<refreshId>
Pokud chcete zkontrolovat stav operace aktualizace, použijte příkaz GET u ID aktualizace. Tady je příklad textu odpovědi. Pokud probíhá operace, inProgress
je vrácena ve stavu.
{
"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
Pokud chcete získat seznam historických operací aktualizace pro model, použijte příkaz GET v kolekci /refreshes. Tady je příklad textu odpovědi.
Poznámka:
V době psaní se uloží a vrátí posledních 30 dnů operací aktualizace, ale toto číslo se může změnit.
[
{
"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>
Pokud chcete zrušit probíhající operaci aktualizace, použijte příkaz DELETE v ID aktualizace.
POST /sync
Po provedení operací aktualizace může být nutné synchronizovat nová data s replikami pro horizontální navýšení kapacity dotazů. Pokud chcete provést operaci synchronizace pro model, použijte příkaz POST ve funkci /sync. Hlavička Umístění v odpovědi obsahuje ID operace synchronizace.
GET /sync status
Pokud chcete zkontrolovat stav operace synchronizace, použijte příkaz GET, který předá ID operace jako parametr. Tady je příklad textu odpovědi:
{
"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
}
Hodnoty pro syncstate
:
- 0: Replikace. Databázové soubory se replikují do cílové složky.
- 1: Dosazování. Databáze se rehydruje na instancích serveru jen pro čtení.
- 2: Dokončeno. Operace synchronizace byla úspěšně dokončena.
- 3: Nezdařilo se. Operace synchronizace se nezdařila.
- 4: Finalizace. Operace synchronizace se dokončila, ale provádí kroky čištění.
Ukázka kódu
Tady je ukázka kódu C#, která vám umožní začít, RestApiSample na GitHubu.
Použití ukázky kódu
- Naklonujte nebo stáhněte úložiště. Otevřete řešení RestApiSample.
- Najděte klienta řádku . BaseAddress = ... a zadejte základní adresu URL.
Ukázka kódu používá ověřování instančního objektu .
Instanční objekt
Další informace o nastavení instančního objektu a přiřazení potřebných oprávnění v Azure AS najdete v tématu Vytvoření instančního objektu – Azure Portal a přidání instančního objektu do role správce serveru. Po dokončení kroků proveďte následující další kroky:
- V ukázce kódu najděte řetězcovou autoritu = ..., nahraďte společné ID tenanta vaší organizace.
- Comment/uncomment so the ClientCredential class is used to instantiate the cred object. Ujistěte se, <že k hodnotám ID> aplikace a <klíče> aplikace se přistupuje zabezpečeným způsobem, nebo pro instanční objekty používejte ověřování založené na certifikátech.
- Spusťte ukázku.