Azure Data Explorer — это быстрая полностью управляемая служба для аналитики большого объема потоковых данных в реальном времени, поступающих из приложений, а также с веб-сайтов, устройств Интернета вещей и т. д. Чтобы использовать обозреватель данных Azure, сначала нужно создать кластер и одну или несколько баз данных в этом кластере. Затем вы можете получать (загружать) данные в базу данных и выполнять запросы к нему.
В этой статье вы узнаете, как создать кластер и базу данных с помощью C#, Python, Go, Azure CLI, PowerShell, Bicep или шаблона Azure Resource Manager (ARM). Чтобы узнать, как создать кластер и базу данных с помощью портала Azure, см. Краткое руководство: создание кластера и базы данных Azure Data Explorer.
Примеры кода на основе предыдущих версий пакета SDK см. в архивной статье.
Предварительные требования
Предварительные требования по методу создания кластера и базы данных:
Important
Расширение Kusto для Azure CLI устарело и не поддерживается. Мы рекомендуем использовать шаблоны PowerShell или ARM/Bicep для создания кластера и базы данных. Если вы решили использовать Azure CLI, установите расширение Kusto, чтобы обеспечить наличие последних команд CLI для Azure Data Explorer.
- Подписка Azure. Создайте бесплатную учетную запись Azure.
- Azure Cloud Shell можно использовать для запуска кода в этой статье, не устанавливая ничего в локальной среде.
- Если вы решили установить и использовать Azure CLI локально, выполните действия, описанные в разделе "Настройка параметров". Для этой статьи требуется Azure CLI версии 2.0.4 или более поздней. Выполните команду
az --version, чтобы узнать номер версии. Если вам необходимо выполнить установку или обновление, обратитесь к статье Установка Azure CLI.
Следующие действия не требуются, если вы выполняете команды в Azure Cloud Shell. Если вы выполняете интерфейс командной строки локально, выполните следующие действия, чтобы настроить среду:
Установите расширение, чтобы использовать последнюю версию Kusto CLI.
az extension add -n kusto
Выполните следующую команду, чтобы войти в Azure:
az login
Укажите подписку, в которой необходимо создать кластер. Замените MyAzureSub именем подписки Azure, которую вы хотите использовать:
az account set --subscription MyAzureSub
Укажите группу ресурсов, в которой необходимо создать кластер. Замените значение testrg именем группы ресурсов, которую вы хотите использовать:
az group create --name testrg --location westus
Создание кластера Azure Data Explorer
В этом разделе описан процесс создания кластера Azure Data Explorer. Выберите соответствующую вкладку для предпочтительного метода, чтобы создать кластер.
Шаблон ARM
Ниже приведен пример шаблона ARM, создающего кластер Azure Data Explorer и базу данных в этом кластере с минимальной конфигурацией. Полные сведения и поддерживаемые свойства см. в справочнике по кластеру шаблонов ARM и справочнике по базе данных шаблона ARM.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"clusters_kustocluster_name": {
"type": "string",
"defaultValue": "[concat('kusto', uniqueString(resourceGroup().id))]",
"metadata": {
"description": "Name of the cluster to create"
}
},
"databases_kustodb_name": {
"type": "string",
"defaultValue": "kustodb",
"metadata": {
"description": "Name of the database to create"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
}
},
"variables": {},
"resources": [
{
"name": "[parameters('clusters_kustocluster_name')]",
"type": "Microsoft.Kusto/clusters",
"apiVersion": "2025-02-14",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_E8ads_v5",
"tier": "Standard",
"capacity": 2
}
},
{
"name": "[concat(parameters('clusters_kustocluster_name'), '/', parameters('databases_kustodb_name'))]",
"type": "Microsoft.Kusto/clusters/databases",
"apiVersion": "2025-02-14",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Kusto/clusters', parameters('clusters_kustocluster_name'))]"
],
"kind": "ReadWrite",
"properties": {
"softDeletePeriod": "P365D",
"hotCachePeriod": "P31D"
}
}
]
}
Ниже приведен пример шаблона Bicep, который создает кластер Azure Data Explorer и базу данных в этом кластере с минимальной конфигурацией. Полные сведения и поддерживаемые свойства см. в справочнике по кластеру Bicep и справочнике по базе данных Bicep.
@description('Name of the cluster to create')
param clusterName string = 'kusto${uniqueString(resourceGroup().id)}'
@description('Name of the database to create')
param databaseName string = 'kustodb'
@description('Location for all resources.')
param location string = resourceGroup().location
resource cluster 'Microsoft.Kusto/clusters@2025-02-14' = {
name: clusterName
location: location
sku: {
name: 'Standard_E8ads_v5'
tier: 'Standard'
capacity: 2
}
}
resource database 'Microsoft.Kusto/clusters/databases@2025-02-14' = {
parent: cluster
name: databaseName
location: location
kind: 'ReadWrite'
properties: {
softDeletePeriod: 'P365D'
hotCachePeriod: 'P31D'
}
}
Создайте кластер, используя приведенную ниже команду:
New-AzKustoCluster -ResourceGroupName testrg -Name mykustocluster -Location westus2 -SkuTier Standard -SkuCapacity 2 -SkuName 'Standard_E8ads_v5'
|
Параметр |
Рекомендуемое значение |
Описание поля |
| Имя. |
mykustocluster |
Необходимое имя кластера. |
| Sku |
Standard_E8ads_v5 |
Номер SKU, который будет использоваться для кластера. |
| ResourceGroupName |
testrg |
Имя группы ресурсов, в которой будет создан кластер. |
Можно использовать другие необязательные параметры, например емкость кластера и т. д.
Чтобы проверить, успешно ли создан кластер, можно выполнить следующую команду:
Get-AzKustoCluster -Name mykustocluster -ResourceGroupName testrg
Подтвердите успешное создание кластера, проверив, что результат содержит provisioningState в качестве Succeeded.
Создайте кластер, используя приведенный ниже код:
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, subscriptionId);
var resourceGroupName = "testrg";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
var clusters = resourceGroup.GetKustoClusters();
var clusterName = "mykustocluster";
var skuName = KustoSkuName.StandardE8adsV5;
var skuTier = KustoSkuTier.Standard;
var capacity = 5;
var clusterData = new KustoClusterData(
location: AzureLocation.CentralUS,
sku: new KustoSku(skuName, skuTier) { Capacity = capacity }
);
await clusters.CreateOrUpdateAsync(WaitUntil.Completed, clusterName, clusterData);
|
Параметр |
Рекомендуемое значение |
Описание поля |
| clusterName |
mykustocluster |
Необходимое имя кластера. |
| skuName |
Standard_E8ads_v5 |
Номер SKU, который будет использоваться для кластера. |
| уровень |
Стандартные |
Категория SKU. |
| Емкость |
число |
Количество экземпляров кластера. |
| resourceGroupName |
testrg |
Имя группы ресурсов, в которой будет создан кластер. |
Примечание.
Создание кластера — это длительная операция, поэтому настоятельно рекомендуется использовать CreateOrUpdateAsync вместо CreateOrUpdate.
Чтобы проверить, успешно ли создан кластер, можно выполнить следующую команду:
clusterData = (await clusters.GetAsync(clusterName)).Value.Data;
Подтвердите успешное создание кластера, проверив, что результат содержит provisioningState в качестве Succeeded.
Создайте кластер, используя приведенную ниже команду:
from azure.mgmt.kusto import KustoManagementClient
from azure.mgmt.kusto.models import Cluster, AzureSku
from azure.common.credentials import ServicePrincipalCredentials
#Directory (tenant) ID
tenant_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Application ID
client_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Client Secret
client_secret = "xxxxxxxxxxxxxx"
subscription_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
credentials = ServicePrincipalCredentials(
client_id=client_id,
secret=client_secret,
tenant=tenant_id
)
location = 'Central US'
sku_name = 'Standard_E8ads_v5'
capacity = 5
tier = "Standard"
resource_group_name = 'testrg'
cluster_name = 'mykustocluster'
cluster = Cluster(location=location, sku=AzureSku(name=sku_name, capacity=capacity, tier=tier))
kusto_management_client = KustoManagementClient(credentials, subscription_id)
cluster_operations = kusto_management_client.clusters
poller = cluster_operations.begin_create_or_update(resource_group_name, cluster_name, cluster)
poller.wait()
|
Параметр |
Рекомендуемое значение |
Описание поля |
| cluster_name |
mykustocluster |
Необходимое имя кластера. |
| sku_name |
Standard_E8ads_v5 |
Номер SKU, который будет использоваться для кластера. |
| уровень |
Стандартные |
Категория SKU. |
| Емкость |
номер |
Количество экземпляров кластера. |
| resource_group_name |
testrg |
Имя группы ресурсов, в которой будет создан кластер. |
Примечание.
Создание кластера — это длительная операция. Метод begin_create_or_update возвращает экземпляр LROPoller. Дополнительные сведения см. в статье Класс LROPoller.
Чтобы проверить, успешно ли создан кластер, можно выполнить следующую команду:
cluster_operations.get(resource_group_name = resource_group_name, cluster_name= cluster_name, custom_headers=None, raw=False)
Подтвердите успешное создание кластера, проверив, что результат содержит provisioningState в качестве Succeeded.
В следующем коде показано, как создать кластер.
Задайте необходимые переменные среды, включая сведения о субъекте-службе из предварительных требованиях. Введите идентификатор подписки, группу ресурсов и регион, в котором вы хотите создать кластер.
export AZURE_CLIENT_ID="<enter service principal client ID>"
export AZURE_CLIENT_SECRET="<enter service principal client secret>"
export AZURE_TENANT_ID="<enter tenant ID>"
export SUBSCRIPTION="<enter subscription ID>"
export RESOURCE_GROUP="<enter resource group name>"
export LOCATION="<enter azure location e.g. Southeast Asia>"
export CLUSTER_NAME_PREFIX="<enter prefix (cluster name will be [prefix]-ADXTestCluster)>"
export DATABASE_NAME_PREFIX="<enter prefix (database name will be [prefix]-ADXTestDB)>"
Выполните следующий код, чтобы создать кластер:
import (
"context"
"log"
"os"
"strconv"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/kusto/armkusto"
"github.com/olekukonko/tablewriter"
)
const (
subscriptionEnvVar = "AZURE_SUBSCRIPTION_ID"
resourceGroupEnvVar = "AZURE_RESOURCE_GROUP"
locationEnvVar = "AZURE_LOCATION"
clusterNamePrefixEnvVar = "CLUSTER_NAME_PREFIX"
dbNamePrefixEnvVar = "DATABASE_NAME_PREFIX"
clusterName = "ADXTestCluster"
databaseName = "ADXTestDB"
)
func init() {
subscription = os.Getenv(subscriptionEnvVar)
if subscription == "" {
log.Fatalf("missing environment variable %s", subscriptionEnvVar)
}
rgName = os.Getenv(resourceGroupEnvVar)
if rgName == "" {
log.Fatalf("missing environment variable %s", resourceGroupEnvVar)
}
location = os.Getenv(locationEnvVar)
if location == "" {
log.Fatalf("missing environment variable %s", locationEnvVar)
}
clusterNamePrefix = os.Getenv(clusterNamePrefixEnvVar)
if clusterNamePrefix == "" {
log.Fatalf("missing environment variable %s", clusterNamePrefixEnvVar)
}
dbNamePrefix = os.Getenv(dbNamePrefixEnvVar)
if dbNamePrefix == "" {
log.Fatalf("missing environment variable %s", dbNamePrefixEnvVar)
}
}
func getClustersClient(subscription string) *armkusto.ClustersClient {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatal(err)
}
client, err := armkusto.NewClustersClient(subscription, cred, nil)
if err != nil {
log.Fatal(err)
}
return client
}
// 1 instance, Basic tier with compute type Dev(No SLA)_Standard_D11_v2
func createCluster(sub, name, location, rgName string) {
ctx := context.Background()
numInstances := int32(1)
client := getClustersClient(sub)
result, err := client.BeginCreateOrUpdate(
ctx,
rgName,
name,
armkusto.Cluster{
Location: &location,
SKU: &armkusto.AzureSKU{
Name: to.Ptr(armkusto.AzureSKUNameDevNoSLAStandardD11V2),
Capacity: &numInstances,
Tier: to.Ptr(armkusto.AzureSKUTierBasic),
},
},
nil,
)
if err != nil {
log.Fatal("failed to start cluster creation ", err)
}
log.Printf("waiting for cluster creation to complete - %s\n", name)
r, err := result.PollUntilDone(ctx, nil)
if err != nil {
log.Fatal(err)
}
log.Printf("created cluster %s\n", *r.Name)
}
createCluster(subscription, clusterNamePrefix+clusterName, location, rgName)
Перечислите кластеры, чтобы обеспечить успешное создание:
func listClusters(sub, rgName string) {
log.Printf("listing clusters in resource group %s\n", rgName)
ctx := context.Background()
result := getClustersClient(sub).NewListByResourceGroupPager(rgName, nil)
data := [][]string{}
for result.More() {
temp, err := result.NextPage(ctx)
if err != nil {
log.Fatal(err)
}
for _, c := range temp.Value {
data = append(data, []string{*c.Name, string(*c.Properties.State), *c.Location, strconv.Itoa(int(*c.SKU.Capacity)), *c.Properties.URI})
}
}
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string{"Name", "State", "Location", "Instances", "URI"})
for _, v := range data {
table.Append(v)
}
table.Render()
}
listClusters(subscription, rgName)
Important
Расширение Kusto для Azure CLI устарело и не поддерживается. Мы рекомендуем использовать шаблоны PowerShell или ARM/Bicep для создания кластера и базы данных. Если вы решили использовать Azure CLI, установите расширение Kusto, чтобы обеспечить наличие последних команд CLI для Azure Data Explorer.
Создайте кластер, используя приведенную ниже команду:
az kusto cluster create --cluster-name azureclitest --sku name="Standard_E8ads_v5" tier="Standard" --resource-group testrg --location westus
|
Параметр |
Рекомендуемое значение |
Описание поля |
| имя |
azureclitest |
Необходимое имя кластера. |
| sku |
Standard_E8ads_v5 |
Номер SKU, который будет использоваться для кластера. Параметры: name — имя SKU.
уровень — уровень SKU. |
| группа ресурсов |
testrg |
Имя группы ресурсов, в которой будет создан кластер. |
| расположение |
westus |
Место, где будет создан кластер. |
Можно использовать другие необязательные параметры, например емкость кластера и т. д.
Чтобы проверить, успешно ли создан кластер, можно выполнить следующую команду:
az kusto cluster show --cluster-name azureclitest --resource-group testrg
Подтвердите успешное создание кластера, проверив, что результат содержит provisioningState в качестве Succeeded.
Создание базы данных Azure Data Explorer
В этом разделе описано, как создать базу данных в кластере, созданном в предыдущем разделе.
Кластер и база данных создаются вместе с шаблоном ARM в предыдущем разделе.
Кластер и база данных создаются вместе с шаблоном Bicep в предыдущем разделе.
Создайте базу данных, используя приведенную ниже команду:
New-AzKustoDatabase -ResourceGroupName testrg -ClusterName mykustocluster -Name mykustodatabase -SoftDeletePeriod 3650:00:00:00 -HotCachePeriod 3650:00:00:00
|
Параметр |
Рекомендуемое значение |
Описание поля |
| Имя кластера |
mykustocluster |
Имя кластера, в котором необходимо создать базу данных. |
| Имя. |
mykustodatabase |
Имя базы данных. |
| ResourceGroupName |
testrg |
Имя группы ресурсов, в которой будет создан кластер. |
| SoftDeletePeriod |
3650:00:00:00 |
Время, на протяжении которого данные будут храниться таким образом, чтобы они были доступны для запроса. |
| HotCachePeriod |
3650:00:00:00 |
Время, на протяжении которого данные будут храниться в кэше. |
Выполните следующую команду, чтобы просмотреть созданную базу данных:
Get-AzKustoDatabase -ClusterName mykustocluster -ResourceGroupName testrg -Name mykustodatabase
Создайте базу данных, используя приведенный ниже код:
var cluster = (await clusters.GetAsync(clusterName)).Value;
var databases = cluster.GetKustoDatabases();
var databaseName = "mykustodatabase";
var softDeletePeriod = TimeSpan.FromDays(3650);
var hotCachePeriod = TimeSpan.FromDays(3650);
var databaseData = new KustoReadWriteDatabase
{
Location = clusterData.Location, SoftDeletePeriod = softDeletePeriod, HotCachePeriod = hotCachePeriod
};
await databases.CreateOrUpdateAsync(WaitUntil.Completed, databaseName, databaseData);
Примечание.
Если вы используете C# версии 2.0.0 или ниже, используйте базу данных вместо ReadWriteDatabase.
|
Параметр |
Рекомендуемое значение |
Описание поля |
| clusterName |
mykustocluster |
Имя кластера, в котором необходимо создать базу данных. |
| databaseName |
mykustodatabase |
Имя базы данных. |
| resourceGroupName |
testrg |
Имя группы ресурсов, в которой будет создан кластер. |
| softDeletePeriod |
3650:00:00:00 |
Время, на протяжении которого данные будут храниться таким образом, чтобы они были доступны для запроса. |
| hotCachePeriod |
3650:00:00:00 |
Время, на протяжении которого данные будут храниться в кэше. |
Выполните следующую команду, чтобы просмотреть созданную базу данных:
databaseData = (await databases.GetAsync(databaseName)).Value.Data as KustoReadWriteDatabase;
Создайте базу данных, используя приведенную ниже команду:
from azure.mgmt.kusto import KustoManagementClient
from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.kusto.models import ReadWriteDatabase
from datetime import timedelta
#Directory (tenant) ID
tenant_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Application ID
client_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Client Secret
client_secret = "xxxxxxxxxxxxxx"
subscription_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
credentials = ServicePrincipalCredentials(
client_id=client_id,
secret=client_secret,
tenant=tenant_id
)
location = 'Central US'
resource_group_name = 'testrg'
cluster_name = 'mykustocluster'
soft_delete_period = timedelta(days=3650)
hot_cache_period = timedelta(days=3650)
database_name = "mykustodatabase"
kusto_management_client = KustoManagementClient(credentials, subscription_id)
database_operations = kusto_management_client.databases
database = ReadWriteDatabase(location=location,
soft_delete_period=soft_delete_period,
hot_cache_period=hot_cache_period)
poller = database_operations.begin_create_or_update(resource_group_name = resource_group_name, cluster_name = cluster_name, database_name = database_name, parameters = database)
poller.wait()
Примечание.
Если вы используете Python версии 0.4.0 или ниже, используйте базу данных вместо ReadWriteDatabase.
|
Параметр |
Рекомендуемое значение |
Описание поля |
| cluster_name |
mykustocluster |
Имя кластера, в котором необходимо создать базу данных. |
| database_name |
mykustodatabase |
Имя базы данных. |
| resource_group_name |
testrg |
Имя группы ресурсов, в которой будет создан кластер. |
| soft_delete_period |
3650 дней, 0:00:00 |
Время, на протяжении которого данные будут храниться таким образом, чтобы они были доступны для запроса. |
| период горячего кэша |
3650 дней, 0:00:00 |
Время, на протяжении которого данные будут храниться в кэше. |
Выполните следующую команду, чтобы просмотреть созданную базу данных:
database_operations.get(resource_group_name = resource_group_name, cluster_name = cluster_name, database_name = database_name)
В следующем коде показано, как создать базу данных. Импорт пакета и запуск переменной среды совпадает с предыдущим разделом.
Выполните следующий код, чтобы создать базу данных:
func createDatabase(sub, rgName, clusterName, location, dbName string) {
ctx := context.Background()
client := getDBClient(sub)
future, err := client.BeginCreateOrUpdate(ctx, rgName, clusterName, dbName, &armkusto.ReadWriteDatabase{Kind: to.Ptr(armkusto.KindReadWrite), Location: &location}, nil)
if err != nil {
log.Fatal("failed to start database creation ", err)
}
log.Printf("waiting for database creation to complete - %s\n", dbName)
resp, err := future.PollUntilDone(ctx, nil)
if err != nil {
log.Fatal(err)
}
kdb := resp.GetDatabase()
log.Printf("created DB %s with ID %s and type %s\n", *kdb.Name, *kdb.ID, *kdb.Type)
}
createDatabase(subscription, rgName, clusterNamePrefix+clusterName, location, dbNamePrefix+databaseName)
Перечислите базы данных, чтобы обеспечить успешное создание:
func listDatabases(sub, rgName, clusterName string) {
log.Printf("listing databases in cluster %s\n", clusterName)
ctx := context.Background()
result := getDBClient(sub).NewListByClusterPager(rgName, clusterName, nil)
data := [][]string{}
for result.More() {
temp, err := result.NextPage(ctx)
if err != nil {
log.Fatal(err)
}
for _, db := range temp.Value {
if *db.GetDatabase().Kind == armkusto.KindReadWrite {
data = append(data, []string{*db.GetDatabase().Name, string(*db.GetDatabase().Kind), *db.GetDatabase().Location, *db.GetDatabase().Type})
}
}
}
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string{"Name", "State", "Location", "Type"})
for _, v := range data {
table.Append(v)
}
table.Render()
}
listDatabases(subscription, rgName, clusterNamePrefix+clusterName)
Important
Расширение Kusto для Azure CLI устарело и не поддерживается. Мы рекомендуем использовать шаблоны PowerShell или ARM/Bicep для создания кластера и базы данных. Если вы решили использовать Azure CLI, установите расширение Kusto, чтобы обеспечить наличие последних команд CLI для Azure Data Explorer.
Создайте базу данных, используя приведенную ниже команду:
az kusto database create --cluster-name azureclitest --database-name clidatabase --resource-group testrg --read-write-database soft-delete-period=P365D hot-cache-period=P31D location=westus
|
Параметр |
Рекомендуемое значение |
Описание поля |
| имя кластера |
azureclitest |
Имя кластера, в котором необходимо создать базу данных. |
| имя-базы-данных |
clidatabase |
Имя базы данных. |
| группа ресурсов |
testrg |
Имя группы ресурсов, в которой будет создан кластер. |
| база данных для чтения и записи |
P365DP31Dwestus |
Тип базы данных. Параметры: soft-delete-period — указывает количество времени, в течение которого данные будут доступны для запроса. Дополнительные сведения см. в статье Политика хранения.
hot-cache-period — указывает количество времени, в течение которого данные будут храниться в кэше. Дополнительные сведения см. в статье Политика кэша.
место — место, где будет создана база данных. |
Выполните следующую команду, чтобы просмотреть созданную базу данных:
az kusto database show --database-name clidatabase --resource-group testrg --cluster-name azureclitest
Следующий шаг