使用 MATLAB 查詢數據
MATLAB 是一種程式設計與數值運算平臺,可用來分析數據、開發演算法,以及建立模型。 本文說明如何在適用於 Azure 數據總管的 MATLAB 中取得授權令牌,以及如何使用令牌與叢集互動。
必要條件
選取用來執行 MATLAB 之作業系統的索引標籤。
從 NuGet 下載 Microsoft Identity Client 和 Microsoft Identity Abstractions 套件。
將下載的套件和 DLL 檔案從 lib\net45 解壓縮到您選擇的資料夾。 在本文中,我們將使用 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 Studio 中,載入擷取的 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],選取 [Web ] 和 [輸入 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 Studio 中,載入擷取的 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