Sdílet prostřednictvím


Konfigurace databáze s využitím skriptu KQL (dotazovací jazyk Kusto)

Můžete spustit dotazovací jazyk Kusto skript pro konfiguraci databáze během nasazení šablony Azure Resource Management (ARM). Skript je seznam jednoho nebo více příkazů pro správu oddělených jedním koncem řádku a je vytvořen jako prostředek, ke kterému se přistupuje pomocí šablony ARM.

Skript může spouštět pouze příkazy pro správu na úrovni databáze, které začínají následujícími příkazy:

  • .create
  • .create-or-alter
  • .create-merge
  • .alter
  • .alter-merge
  • .add

Poznámka:

Podporované příkazy se musí spouštět na úrovni databáze. Tabulku můžete například změnit pomocí příkazu .create-or-alter table. Příkazy na úrovni clusteru, jako .alter cluster jsou zásady, se nepodporují.

Obecně doporučujeme použít idempotentní verzi příkazů, takže pokud se volají více než jednou se stejnými vstupními parametry, nemají žádný další účinek. Jinými slovy, spuštění příkazu několikrát má stejný účinek jako jeho spuštění jednou. Pokud je to možné, doporučujeme například použít příkaz idempotentní .create-or-alter pro běžný .create příkaz.

Existují různé metody, které můžete použít ke konfiguraci databáze se skripty. V tomto článku se zaměříme na následující metody použití nasazení šablon ARM:

  1. Vložený skript: Skript je vložený jako parametr šablony JSON ARM.
  2. Skript Bicep: Skript se poskytuje jako samostatný soubor používaný šablonou ARM Bicep.
  3. Účet úložiště: Skript se vytvoří jako objekt blob v účtu úložiště Azure a jeho podrobnosti (adresa URL a sdílené přístupové podpisy (SaS) poskytnuté jako parametry šablony ARM.

Poznámka:

Každý cluster může mít maximálně 50 skriptů (více skriptů aktivuje Code:TooManyScripts chybu.) Po odstranění existujících skriptů doporučujeme sloučit několik malých skriptů do méně velkých skriptů, aby se uvolnilo místo pro nové skripty . Odstraněním skriptu se nevrácejí příkazy, které byly z daného skriptu spuštěny.

Ukázkový skript s příkazy pro správu

Následující příklad je skript s příkazy, které vytvářejí dvě tabulky: MyTable a MyTable2.

.create-merge table MyTable (Level:string, Timestamp:datetime, UserId:string, TraceId:string, Message:string, ProcessId:int32)

.create-merge table MyTable2 (Level:string, Timestamp:datetime, UserId:string, TraceId:string, Message:string, ProcessId:int32)

Všimněte si, že dva příkazy jsou idempotentní. Při prvním spuštění vytvoří tabulky při následných spuštěních, které nemají žádný vliv.

Požadavky

Zabezpečení

Objekt zabezpečení, například uživatel nebo instanční objekt použitý k nasazení skriptu, musí mít následující role zabezpečení:

Důležité

Objekt zabezpečení, který cluster zřídí, automaticky získá All Databases Admin roli v clusteru.

Vložený skript

Tuto metodu použijte k vytvoření šablony ARM se skriptem definovaným jako vložený parametr. Pokud má váš skript jeden nebo více příkazů pro správu, oddělte je alespoň jedním koncem řádku.

Spuštění vloženého skriptu pomocí šablony ARM

Následující šablona ukazuje, jak spustit skript pomocí šablony Azure Resource Manageru JSON.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "kqlScript": {
            "defaultValue": ".create-merge table MyTable (Level:string, Timestamp:datetime, UserId:string, TraceId:string, Message:string, ProcessId:int32)\n\n.create-merge table MyTable2 (Level:string, Timestamp:datetime, UserId:string, TraceId:string, Message:string, ProcessId:int32)",
            "type": "String"
        },
        "forceUpdateTag": {
            "defaultValue": "[utcNow()]",
            "type": "String"
        },
        "continueOnErrors": {
            "defaultValue": false,
            "type": "bool"
        },
        "clusterName": {
            "type": "String"
        },
        "databaseName": {
            "type": "String"
        },
        "scriptName": {
            "type": "String"
        }
    },
    "variables": {
    },
    "resources": [
        {
            "type": "Microsoft.Kusto/Clusters/Databases/Scripts",
            "apiVersion": "2022-02-01",
            "name": "[concat(parameters('clusterName'), '/', parameters('databaseName'), '/', parameters('scriptName'))]",
            "properties": {
                "scriptContent": "[parameters('kqlScript')]",
                "continueOnErrors": "[parameters('continueOnErrors')]",
                "forceUpdateTag": "[parameters('forceUpdateTag')]"
            }
        }
    ],
    "outputs": {
    }
}

Použijte následující nastavení:

Nastavení Popis
kqlScript Vložený dotazovací jazyk Kusto skript. Slouží \n k přidání nových znaků řádku.
forceUpdateTag Jedinečný řetězec. Pokud se změní, skript se znovu použije.
continueOnErrors Příznak označující, jestli se má pokračovat, pokud některý z příkazů selže. Výchozí hodnota: false.
clusterName Název clusteru, ve kterém se skript spouští.
databaseName Název databáze, pod kterou se skript spouští.
scriptName Název skriptu při použití externího souboru k zadání skriptu. Toto je název skutečného prostředku šablony ARM typu skriptu.

Vynechat značku aktualizace

Spuštění skriptu KQL při každém nasazení šablony ARM se nedoporučuje, protože využívá prostředky clusteru. Spuštění skriptu v po sobě jdoucích nasazeních můžete zabránit následujícími metodami:

  • forceUpdateTag Zadejte vlastnost a ponechte stejnou hodnotu mezi nasazeními.
  • Tuto vlastnost vynecháte nebo ponechte prázdnou forceUpdateTag a použijte stejný skript mezi nasazeními.

Osvědčeným postupem je vynechat forceUpdateTag vlastnost, aby se při příštím nasazení šablony spustily všechny změny skriptu. Vlastnost použijte forceUpdateTag pouze v případě, že potřebujete vynutit spuštění skriptu.

Skript Bicep

Předání skriptu jako parametru šabloně může být těžkopádné. Šablona Bicep Azure Resource Manageru umožňuje zachovat a udržovat skript v samostatném souboru a načíst ho do šablony pomocí funkce loadTextContent Bicep.

Za předpokladu, že je skript uložený v souboru script.kql umístěném ve stejné složce jako soubor Bicep, vytvoří následující šablona stejný výsledek jako v předchozím příkladu:

param forceUpdateTag string = utcNow()
param continueOnErrors bool = false
param clusterName string
param databaseName string
param scriptName string

resource cluster 'Microsoft.Kusto/clusters@2022-02-01' existing = {
    name: clusterName
}

resource db 'Microsoft.Kusto/clusters/databases@2022-02-01' existing = {
    name: databaseName
    parent: cluster
}

resource perfTestDbs 'Microsoft.Kusto/clusters/databases/scripts@2022-02-01' = {
    name: scriptName
    parent: db
    properties: {
        scriptContent: loadTextContent('script.kql')
        continueOnErrors: continueOnErrors
        forceUpdateTag: forceUpdateTag
    }
}

Použijte následující nastavení:

Nastavení Popis
forceUpdateTag Jedinečný řetězec. Pokud se změní, skript se znovu použije.
continueOnErrors Příznak označující pokračování v případě, že některý z příkazů selže. Výchozí hodnota: false.
clusterName Název clusteru, ve kterém se skript spouští.
databaseName Název databáze, pod kterou se skript spouští.
scriptName Název skriptu při použití externího souboru k zadání skriptu.

Šablonu Bicep je možné nasadit pomocí podobných nástrojů jako šablona JSON ARM. K nasazení šablony můžete použít například následující příkazy Azure CLI:

az deployment group create -n "deploy-$(uuidgen)" -g "MyResourceGroup" --template-file "json-sample.json" --parameters clusterName=MyCluster databaseName=MyDb

Šablony Bicep se před nasazením překládají do šablony JSON ARM. V příkladu je soubor skriptu vložený do šablony JSON ARM. Další informace najdete v tématu Přehled bicep.

Skript účtu úložiště

Tato metoda předpokládá, že už máte objekt blob v účtu služby Azure Storage a zadáte jeho podrobnosti (URL a sdílené přístupové podpisy (SaS) přímo v šabloně ARM.

Poznámka:

Skripty nelze načíst z účtů úložiště nakonfigurovaných pomocí brány firewall služby Azure Storage nebo pravidel virtuální sítě.

Vytvoření prostředku skriptu

Prvním krokem je vytvoření skriptu a jeho nahrání do účtu úložiště.

  1. Vytvořte skript obsahující příkazy pro správu, které chcete použít k vytvoření tabulky v databázi.

  2. Nahrajte skript do účtu azure Storage. Účet úložiště můžete vytvořit pomocí webu Azure Portal, PowerShellu nebo Azure CLI.

  3. Poskytnutí přístupu k tomuto souboru pomocí sdílených přístupových podpisů (SaS) Přístup můžete poskytnout pomocí PowerShellu, Azure CLI nebo .NET.

Spuštění skriptu pomocí šablony ARM

V této části se dozvíte, jak spustit skript uložený ve službě Azure Storage pomocí šablony Azure Resource Manageru.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "scriptUrl": {
      "type": "String"
    },
    "scriptUrlSastoken": {
      "type": "SecureString"
    },
    "forceUpdateTag": {
      "defaultValue": "[utcNow()]",
      "type": "String"
    },
    "continueOnErrors": {
      "defaultValue": false,
      "type": "bool"
    },
    "clusterName": {
      "type": "String"
    },
    "databaseName": {
      "type": "String"
    },
    "scriptName": {
      "type": "String"
    }
  },
  "variables": {
  },
  "resources": [
    {
      "type": "Microsoft.Kusto/Clusters/Databases/Scripts",
      "apiVersion": "2021-01-01",
      "name": "[concat(concat(parameters('clusterName'), '/'), concat(parameters('databaseName'), '/'), parameters('scriptName'))]",
      "properties": {
        "scriptUrl": "[parameters('scriptUrl')]",
        "scriptUrlSasToken": "[parameters('scriptUrlSasToken')]",
        "continueOnErrors": "[parameters('continueOnErrors')]",
        "forceUpdateTag": "[parameters('forceUpdateTag')]"
      }
    }
  ],
  "outputs": {
  }
}

Použijte následující nastavení:

Nastavení Popis
scriptUrl Adresa URL objektu blob. Například 'https://myaccount.blob.core.windows.net/mycontainer/myblob'.
scriptUrlSastoken Řetězec se sdílenými přístupovými podpisy (SaS)
forceUpdateTag Jedinečný řetězec. Pokud se změní, skript se znovu použije.
continueOnErrors Příznak označující, jestli se má pokračovat, pokud některý z příkazů selže. Výchozí hodnota: false.
clusterName Název clusteru, ve kterém se skript spouští.
databaseName Název databáze, pod kterou se skript spouští.
scriptName Název skriptu při použití externího souboru k zadání skriptu.

Omezení

  • Skripty jsou podporovány pouze v Azure Data Exploreru; Ve fondech Průzkumníka dat Synapse nejsou podporované skripty.
  • Ve stejném clusteru není možné paralelně přidat, upravit nebo odebrat dva skripty. V takovém případě se vyvolá následující chyba: Code="ServiceIsInMaintenance" Tento problém můžete obejít tak, že pro tyto dva skripty vytvoříte závislost, aby se vytvořily nebo aktualizovaly po sobě.
  • Pokud chcete vytvářet funkce s dotazy mezi clustery pomocí skriptů , musíte vlastnost nastavit skipvalidation na true příkaz .create function.

Řešení problému

Příkazy spouštěné prostředkem skriptu se nezobrazují ve výsledcích příkazu .show commands-and-queries . Spuštění skriptu můžete sledovat pomocí příkazu .show journal .