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ů:

Diagram that shows asynchronous refresh logic.

  • 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

  1. Naklonujte nebo stáhněte úložiště. Otevřete řešení RestApiSample.
  2. 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:

  1. V ukázce kódu najděte řetězcovou autoritu = ..., nahraďte společné ID tenanta vaší organizace.
  2. 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.
  3. Spusťte ukázku.

Viz také

Ukázky
REST API