MATLAB을 사용하여 데이터 쿼리
MATLAB은 데이터를 분석하고, 알고리즘을 개발하고, 모델을 만드는 데 사용되는 프로그래밍 및 숫자 컴퓨팅 플랫폼입니다. 이 문서에서는 Azure Data Explorer용 MATLAB에서 권한 부여 토큰을 가져오는 방법과 토큰을 사용하여 클러스터와 상호 작용하는 방법을 설명합니다.
필수 조건
MATLAB을 실행하는 데 사용되는 운영 체제의 탭을 선택합니다.
NuGet에서 Microsoft ID 클라이언트 및 Microsoft ID 추상화 패키지를 다운로드합니다.
lib\net45에서 다운로드한 패키지 및 DLL 파일을 원하는 폴더로 추출합니다. 이 문서에서는 C:\Matlab\DLL 폴더를 사용합니다.
사용자 인증 수행
사용자 인증을 사용하면 브라우저 창을 통해 로그인하라는 메시지가 표시됩니다. 로그인에 성공하면 사용자 권한 부여 토큰이 부여됩니다. 이 섹션에서는 이 대화형 로그인 흐름을 구성하는 방법을 보여줍니다.
사용자 인증을 수행하려면 다음을 수행합니다.
권한 부여에 필요한 상수 정의 이러한 값에 대한 자세한 내용은 인증 매개 변수를 참조 하세요.
% The Azure Data Explorer cluster URL clusterUrl = 'https://<adx-cluster>.kusto.windows.net'; % The Azure AD tenant ID tenantId = ''; % Send a request to https://<adx-cluster>.kusto.windows.net/v1/rest/auth/metadata % The appId should be the value of KustoClientAppId appId = ''; % The Azure AD scopes scopesToUse = strcat(clusterUrl,'/.default ');
MATLAB 스튜디오에서 추출된 DLL 파일을 로드합니다.
% Access the folder that contains the DLL files dllFolder = fullfile("C:","Matlab","DLL"); % Load the referenced assemblies in the MATLAB session matlabDllFiles = dir(fullfile(dllFolder,'*.dll')); for k = 1:length(matlabDllFiles) baseFileName = matlabDllFiles(k).name; fullFileName = fullfile(dllFolder,baseFileName); fprintf(1, 'Reading %s\n', fullFileName); end % Load the downloaded assembly in MATLAB NET.addAssembly(fullFileName);
PublicClientApplicationBuilder를 사용하여 사용자 대화형 로그인을 묻는 메시지를 표시합니다.
% Create an PublicClientApplicationBuilder app = Microsoft.Identity.Client.PublicClientApplicationBuilder.Create(appId)... .WithAuthority(Microsoft.Identity.Client.AzureCloudInstance.AzurePublic,tenantId)... .WithRedirectUri('http://localhost:8675')... .Build(); % System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; NET.setStaticProperty ('System.Net.ServicePointManager.SecurityProtocol',System.Net.SecurityProtocolType.Tls12) % Start with creating a list of scopes scopes = NET.createGeneric('System.Collections.Generic.List',{'System.String'}); % Add the actual scopes scopes.Add(scopesToUse); fprintf(1, 'Using appScope %s\n', scopesToUse); % Get the token from the service % and show the interactive dialog in which the user can login tokenAcquirer = app.AcquireTokenInteractive(scopes); result = tokenAcquirer.ExecuteAsync; % Extract the token and when it expires % and retrieve the returned token token = char(result.Result.AccessToken); fprintf(2, 'User token aquired and will expire at %s & extended expires at %s', result.Result.ExpiresOn.LocalDateTime.ToString,result.Result.ExtendedExpiresOn.ToLocalTime.ToString);
권한 부여 토큰을 사용하여 REST API를 통해 클러스터를 쿼리합니다.
options=weboptions('HeaderFields',{'RequestMethod','POST';'Accept' 'application/json';'Authorization' ['Bearer ', token]; 'Content-Type' 'application/json; charset=utf-8'; 'Connection' 'Keep-Alive'; 'x-ms-app' 'Matlab'; 'x-ms-client-request-id' 'Matlab-Query-Request'}); % The DB and KQL variables represent the database and query to execute querydata = struct('db', "<DB>", 'csl', "<KQL>"); querryresults = webwrite("https://sdktestcluster.westeurope.dev.kusto.windows.net/v2/rest/query", querydata, options); % Extract the results row results=querryresults{3}.Rows
애플리케이션 인증 수행
Microsoft Entra 애플리케이션 권한 부여는 대화형 로그인이 필요하지 않고 자동화된 실행이 필요한 시나리오에 사용할 수 있습니다.
애플리케이션 인증을 수행하려면 다음을 수행합니다.
Microsoft Entra 애플리케이션을 프로비전합니다. 리디렉션 URI의 경우 웹 및 입력 http://localhost:8675 을 URI로 선택합니다.
권한 부여에 필요한 상수 정의 이러한 값에 대한 자세한 내용은 인증 매개 변수를 참조 하세요.
% The Azure Data Explorer cluster URL clusterUrl = 'https://<adx-cluster>.kusto.windows.net'; % The Azure AD tenant ID tenantId = ''; % The Azure AD application ID and key appId = ''; appSecret = '';
MATLAB 스튜디오에서 추출된 DLL 파일을 로드합니다.
% Access the folder that contains the DLL files dllFolder = fullfile("C:","Matlab","DLL"); % Load the referenced assemblies in the MATLAB session matlabDllFiles = dir(fullfile(dllFolder,'*.dll')); for k = 1:length(matlabDllFiles) baseFileName = matlabDllFiles(k).name; fullFileName = fullfile(dllFolder,baseFileName); fprintf(1, 'Reading %s\n', fullFileName); end % Load the downloaded assembly NET.addAssembly(fullFileName);
ConfidentialClientApplicationBuilder를 사용하여 Microsoft Entra 애플리케이션에서 비대화형 자동화 로그인을 수행합니다.
% Create an ConfidentialClientApplicationBuilder app = Microsoft.Identity.Client.ConfidentialClientApplicationBuilder.Create(appId)... .WithAuthority(Microsoft.Identity.Client.AzureCloudInstance.AzurePublic,tenantId)... .WithRedirectUri('http://localhost:8675')... .WithClientSecret(appSecret)... .Build(); % System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; NET.setStaticProperty ('System.Net.ServicePointManager.SecurityProtocol',System.Net.SecurityProtocolType.Tls12) % Start with creating a list of scopes scopes = NET.createGeneric('System.Collections.Generic.List',{'System.String'}); % Add the actual scopes scopes.Add(scopesToUse); fprintf(1, 'Using appScope %s\n', scopesToUse); % Get the token from the service and cache it until it expires tokenAcquirer = app.AcquireTokenForClient(scopes); result = tokenAcquirer.ExecuteAsync; % Extract the token and when it expires % retrieve the returned token token = char(result.Result.AccessToken); fprintf(2, 'User token aquired and will expire at %s & extended expires at %s', result.Result.ExpiresOn.LocalDateTime.ToString,result.Result.ExtendedExpiresOn.ToLocalTime.ToString);
권한 부여 토큰을 사용하여 REST API를 통해 클러스터를 쿼리합니다.
options=weboptions('HeaderFields',{'RequestMethod','POST';'Accept' 'application/json';'Authorization' ['Bearer ', token]; 'Content-Type' 'application/json; charset=utf-8'; 'Connection' 'Keep-Alive'; 'x-ms-app' 'Matlab'; 'x-ms-client-request-id' 'Matlab-Query-Request'}); % The DB and KQL variables represent the database and query to execute querydata = struct('db', "<DB>", 'csl', "<KQL>"); querryresults = webwrite("https://sdktestcluster.westeurope.dev.kusto.windows.net/v2/rest/query", querydata, options); % Extract the results row results=querryresults{3}.Rows
관련 콘텐츠
- REST API를 사용하여 클러스터 쿼리