Azure Data Explorer에 대한 데이터베이스 및 테이블 정책 만들기

Azure 데이터 탐색기는 로그 및 원격 분석 데이터에 사용 가능한 빠르고 확장성이 우수한 데이터 탐색 서비스입니다. 이 문서에서는 C# 또는 Python을 사용하여 Azure Data Explorer에 대한 데이터베이스 및 테이블 정책을 만듭니다.

이전 SDK 버전을 기반으로 하는 코드 샘플은 보관된 문서를 참조하세요.

필수 구성 요소

패키지 설치

인증

이 문서의 예제를 실행하려면 리소스에 액세스할 수 있는 Microsoft Entra 애플리케이션 및 서비스 주체가 필요합니다. 필요한 경우 Microsoft Entra 애플리케이션 을 만들고 구독에 적절한 역할 할당을 부여합니다. 디렉터리(테넌트) ID, 애플리케이션 ID 및 클라이언트 비밀을 저장합니다.

새 Microsoft Entra 애플리케이션을 데이터베이스의 보안 주체로 추가해야 할 수도 있습니다. 자세한 내용은 Azure Data Explorer 데이터베이스 권한 관리를 참조하세요.

데이터베이스 보존 정책 변경

다음 예제에서는 10일 일시 삭제 기간으로 보존 정책을 설정합니다.

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; // Azure AD Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; // Application ID
var clientSecret = "PlaceholderClientSecret"; // Application secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, subscriptionId);
var resourceGroupName = "testrg";
// The cluster and database that are created as part of the prerequisites
var clusterName = "mykustocluster";
var databaseName = "mykustodatabase";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(clusterName)).Value;
var database = (await cluster.GetKustoDatabaseAsync(databaseName)).Value;
var databasePatch = new KustoReadWriteDatabase { SoftDeletePeriod = TimeSpan.FromDays(10) };
await database.UpdateAsync(WaitUntil.Completed, databasePatch);

데이터베이스 캐시 정책 변경

다음 예제에서는 데이터베이스에 대한 캐시 정책을 설정합니다. 이전 5일 간의 데이터는 클러스터 SSD에 있습니다.

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; // Azure AD Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; // Application ID
var clientSecret = "PlaceholderClientSecret"; // Application secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, subscriptionId);
var resourceGroupName = "testrg";
// The cluster and database that are created as part of the prerequisites
var clusterName = "mykustocluster";
var databaseName = "mykustodatabase";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(clusterName)).Value;
var database = (await cluster.GetKustoDatabaseAsync(databaseName)).Value;
var databasePatch = new KustoReadWriteDatabase { HotCachePeriod = TimeSpan.FromDays(5) };
await database.UpdateAsync(WaitUntil.Completed, databasePatch);

테이블 캐시 정책 변경

다음 예제에서는 Kusto Data SDK를 사용하여 테이블에 대한 캐시 정책을 설정합니다. 이 코드 조각은 가장 최근 5일 분량의 데이터를 보관하도록 클러스터(로컬 SSD)의 핫 캐시를 구성합니다.

var kustoUri = "https://<clusterName>.<region>.kusto.windows.net/";
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; // Azure AD Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; // Application ID
var clientSecret = "PlaceholderClientSecret"; // Application secret
var kustoConnectionStringBuilder = new KustoConnectionStringBuilder(kustoUri)
    .WithAadApplicationKeyAuthentication(clientId, clientSecret, tenantId);
using var kustoClient = KustoClientFactory.CreateCslAdminProvider(kustoConnectionStringBuilder);
var command = CslCommandGenerator.GenerateAlterTableCachingPolicyCommand(
    "<tableName>", hotSpan: TimeSpan.FromDays(5)
);
await kustoClient.ExecuteControlCommandAsync("<databaseName>", command);

데이터베이스에 대한 새 주체 추가

다음 예제에서는 새 Microsoft Entra 애플리케이션을 데이터베이스의 관리자 보안 주체로 추가합니다.

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; // Azure AD Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; // Application ID
var clientSecret = "PlaceholderClientSecret"; // Application secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, subscriptionId);
var resourceGroupName = "testrg";
// The cluster and database that are created as part of the prerequisites
var clusterName = "mykustocluster";
var databaseName = "mykustodatabase";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(clusterName)).Value;
var database = (await cluster.GetKustoDatabaseAsync(databaseName)).Value;
var databasePrincipalList = new DatabasePrincipalList();
databasePrincipalList.Value.Add(
    new KustoDatabasePrincipal(
        KustoDatabasePrincipalRole.Admin, "<databasePrincipleName>", KustoDatabasePrincipalType.App
    ) { AppId = clientId }
);
database.AddPrincipals(databasePrincipalList);