Beralih layanan menggunakan menu tarik-turun Versi.
Pelajari selengkapnya tentang navigasi.
Berlaku untuk: ✅ Microsoft Fabric ✅ Azure Data Explorer
Dalam artikel ini, Anda mempelajari cara:
Prasyarat
Siapkan lingkungan pengembangan Anda untuk menggunakan pustaka klien Kusto.
Jalankan perintah manajemen dan proses hasilnya
Di IDE atau editor teks pilihan Anda, buat proyek atau file bernama perintah manajemen menggunakan konvensi yang sesuai untuk bahasa pilihan Anda. Kemudian tambahkan kode berikut:
Buat aplikasi klien yang menghubungkan kluster Anda. Ganti placeholder <your_cluster_uri> dengan nama kluster Anda.
Nota
Untuk perintah manajemen, Anda akan menggunakan metode pabrik klien CreateCslAdminProvider.
using Kusto.Data;
using Kusto.Data.Net.Client;
namespace ManagementCommands {
class ManagementCommands {
static void Main(string[] args) {
var clusterUri = "<your_cluster_uri>";
var kcsb = new KustoConnectionStringBuilder(clusterUri)
.WithAadUserPromptAuthentication();
using (var kustoClient = KustoClientFactory.CreateCslAdminProvider(kcsb)) {
}
}
}
}
from azure.kusto.data import KustoClient, KustoConnectionStringBuilder
def main():
cluster_uri = "<your_cluster_uri>"
kcsb = KustoConnectionStringBuilder.with_interactive_login(cluster_uri)
with KustoClient(kcsb) as kusto_client:
if __name__ == "__main__":
main()
import { Client as KustoClient, KustoConnectionStringBuilder } from "azure-kusto-data/";
import { InteractiveBrowserCredentialInBrowserOptions } from "@azure/identity";
async function main() {
const clusterUri = "<your_cluster_uri>";
const authOptions = {
clientId: "00001111-aaaa-2222-bbbb-3333cccc4444",
redirectUri: "http://localhost:5173",
} as InteractiveBrowserCredentialInBrowserOptions;
const kcsb = KustoConnectionStringBuilder.withUserPrompt(clusterUri, authOptions);
const kustoClient = new KustoClient(kcsb);
}
main();
Nota
Untuk aplikasi Node.js, gunakan InteractiveBrowserCredentialNodeOptions alih-alih InteractiveBrowserCredentialInBrowserOptions.
import com.microsoft.azure.kusto.data.Client;
import com.microsoft.azure.kusto.data.ClientFactory;
import com.microsoft.azure.kusto.data.KustoOperationResult;
import com.microsoft.azure.kusto.data.KustoResultSetTable;
import com.microsoft.azure.kusto.data.KustoResultColumn;
import com.microsoft.azure.kusto.data.auth.ConnectionStringBuilder;
public class ManagementCommands {
public static void main(String[] args) throws Exception {
try {
String clusterUri = "<your_cluster_uri>";
ConnectionStringBuilder kcsb = ConnectionStringBuilder.createWithUserPrompt(clusterUri);
try (Client kustoClient = ClientFactory.createClient(kcsb)) {
}
}
}
}
Tentukan fungsi yang mencetak perintah yang dijalankan dan tabel yang dihasilkan. Fungsi ini membongkah nama kolom dalam tabel hasil dan mencetak setiap pasangan nilai nama pada baris baru.
static void PrintResultsAsValueList(string command, IDataReader response) {
while (response.Read()) {
Console.WriteLine("\n{0}\n", new String('-', 20));
Console.WriteLine("Command: {0}", command);
Console.WriteLine("Result:");
for (int i = 0; i < response.FieldCount; i++) {
Console.WriteLine("\t{0} - {1}", response.GetName(i), response.IsDBNull(i) ? "None" : response.GetString(i));
}
}
}
def print_result_as_value_list(command, response):
# create a list of columns
cols = (col.column_name for col in response.primary_results[0].columns)
print("\n" + "-" * 20 + "\n")
print("Command: " + command)
# print the values for each row
for row in response.primary_results[0]:
print("Result:")
for col in cols:
print("\t", col, "-", row[col])
function printResultsAsValueList(command: string, response: KustoResponseDataSet) {
// create a list of columns
const cols = response.primaryResults[0].columns;
console.log("\n" + "-".repeat(20) + "\n")
console.log("Command: " + command)
// print the values for each row
for (const row of response.primaryResults[0].rows()) {
console.log("Result:")
for (col of cols)
console.log("\t", col.name, "-", row.getValueAt(col.ordinal) ? row.getValueAt(col.ordinal).toString() : "None")
}
}
public static void printResultsAsValueList(String command, KustoResultSetTable results) {
while (results.next()) {
System.out.println("\n" + "-".repeat(20) + "\n");
System.out.println("Command: " + command);
System.out.println("Result:");
KustoResultColumn[] columns = results.getColumns();
for (int i = 0; i < columns.length; i++) {
System.out.println("\t" + columns[i].getColumnName() + " - " + (results.getObject(i) == null ? "None" : results.getString(i)));
}
}
}
Tentukan perintah yang akan dijalankan. Perintah membuat tabel yang disebut MyStormEvents dan menentukan skema tabel sebagai daftar nama dan jenis kolom. Ganti pengganti <your_database> dengan nama database Anda.
string database = "<your_database>";
string table = "MyStormEvents";
// Create a table named MyStormEvents
// The brackets contain a list of column Name:Type pairs that defines the table schema
string command = @$".create table {table}
(StartTime:datetime,
EndTime:datetime,
State:string,
DamageProperty:int,
DamageCrops:int,
Source:string,
StormSummary:dynamic)";
database = "<your_database>"
table = "MyStormEvents"
# Create a table named MyStormEvents
# The brackets contain a list of column Name:Type pairs that defines the table schema
command = ".create table " + table + " " \
"(StartTime:datetime," \
" EndTime:datetime," \
" State:string," \
" DamageProperty:int," \
" DamageCrops:int," \
" Source:string," \
" StormSummary:dynamic)"
const database = "<your_database>";
const table = "MyStormEvents";
// Create a table named MyStormEvents
// The brackets contain a list of column Name:Type pairs that defines the table schema
const command = `.create table ${table}
(StartTime:datetime,
EndTime:datetime,
State:string,
DamageProperty:int,
Source:string,
StormSummary:dynamic)`;
String database = "<your_database>";
String table = "MyStormEvents";
// Create a table named MyStormEvents
// The brackets contain a list of column Name:Type pairs that defines the table schema
String command = ".create table " + table + " " +
"(StartTime:datetime," +
" EndTime:datetime," +
" State:string," +
" DamageProperty:int," +
" DamageCrops:int," +
" Source:string," +
" StormSummary:dynamic)";
Jalankan perintah dan cetak hasilnya menggunakan fungsi yang ditentukan sebelumnya.
Nota
Anda akan menggunakan metode ExecuteControlCommand untuk menjalankan perintah.
using (var response = kustoClient.ExecuteControlCommand(database, command, null)) {
PrintResultsAsValueList(command, response);
}
Nota
Anda akan menggunakan metode execute_mgmt untuk menjalankan perintah.
response = kusto_client.execute_mgmt(database, command)
print_result_as_value_list(command, response)
Nota
Anda akan menggunakan metode executeMgmt untuk menjalankan perintah.
const response = await kustoClient.executeMgmt(database, command);
printResultsAsValueList(command, response)
KustoOperationResult response = kusto_client.execute(database, command);
printResultsAsValueList(command, response.getPrimaryResults());
Kode lengkap akan terlihat seperti ini:
using Kusto.Data;
using Kusto.Data.Net.Client;
namespace ManagementCommands {
class ManagementCommands {
static void Main(string[] args) {
string clusterUri = "https://<your_cluster_uri>";
var kcsb = new KustoConnectionStringBuilder(clusterUri)
.WithAadUserPromptAuthentication();
using (var kustoClient = KustoClientFactory.CreateCslAdminProvider(kcsb)) {
string database = "<your_database>";
string table = "MyStormEvents";
// Create a table named MyStormEvents
// The brackets contain a list of column Name:Type pairs that defines the table schema
string command = @$".create table {table}
(StartTime:datetime,
EndTime:datetime,
State:string,
DamageProperty:int,
DamageCrops:int,
Source:string,
StormSummary:dynamic)";
using (var response = kustoClient.ExecuteControlCommand(database, command, null)) {
PrintResultsAsValueList(command, response);
}
}
}
static void PrintResultsAsValueList(string command, IDataReader response) {
while (response.Read()) {
Console.WriteLine("\n{0}\n", new String('-', 20));
Console.WriteLine("Command: {0}", command);
Console.WriteLine("Result:");
for (int i = 0; i < response.FieldCount; i++) {
Console.WriteLine("\t{0} - {1}", response.GetName(i), response.IsDBNull(i) ? "None" : response.GetString(i));
}
}
}
}
}
from azure.kusto.data import KustoClient, KustoConnectionStringBuilder
def main():
cluster_uri = "https://<your_cluster_uri>"
kcsb = KustoConnectionStringBuilder.with_interactive_login(cluster_uri)
with KustoClient(kcsb) as kusto_client:
database = "<your_database>"
table = "MyStormEvents"
# Create a table named MyStormEvents
# The brackets contain a list of column Name:Type pairs that defines the table schema
command = ".create table " + table + " " \
"(StartTime:datetime," \
" EndTime:datetime," \
" State:string," \
" DamageProperty:int," \
" DamageCrops:int," \
" Source:string," \
" StormSummary:dynamic)"
response = kusto_client.execute_mgmt(database, command)
print_result_as_value_list(command, response)
def print_result_as_value_list(command, response):
# create a list of columns
cols = (col.column_name for col in response.primary_results[0].columns)
print("\n" + "-" * 20 + "\n")
print("Command: " + command)
# print the values for each row
for row in response.primary_results[0]:
print("Result:")
for col in cols:
print("\t", col, "-", row[col])
if __name__ == "__main__":
main()
import { Client as KustoClient, KustoConnectionStringBuilder, KustoResponseDataSet } from "azure-kusto-data/";
import { InteractiveBrowserCredentialInBrowserOptions } from "@azure/identity";
async function main() {
const clusterUri = "<your_cluster_uri>";
const authOptions = {
clientId: "00001111-aaaa-2222-bbbb-3333cccc4444",
redirectUri: "http://localhost:5173",
} as InteractiveBrowserCredentialInBrowserOptions;
const kcsb = KustoConnectionStringBuilder.withUserPrompt(clusterUri, authOptions);
const kustoClient = new KustoClient(kcsb);
const database = "<your_database>";
const table = "MyStormEvents";
// Create a table named MyStormEvents
// The brackets contain a list of column Name:Type pairs that defines the table schema
const command = `.create table ${table}
(StartTime:datetime,
EndTime:datetime,
State:string,
DamageProperty:int,
Source:string,
StormSummary:dynamic)`;
const response = await kustoClient.executeMgmt(database, command);
printResultsAsValueList(command, response)
}
function printResultsAsValueList(command: string, response: KustoResponseDataSet) {
// create a list of columns
const cols = response.primaryResults[0].columns;
console.log("\n" + "-".repeat(20) + "\n")
console.log("Command: " + command)
// print the values for each row
for (const row of response.primaryResults[0].rows()) {
console.log("Result:")
for (const col of cols) {
console.log("\t", col.name, "-", row.getValueAt(col.ordinal) ? row.getValueAt(col.ordinal).toString() : "None")
}
}
}
main();
Nota
Untuk aplikasi Node.js, gunakan InteractiveBrowserCredentialNodeOptions alih-alih InteractiveBrowserCredentialInBrowserOptions.
import com.microsoft.azure.kusto.data.Client;
import com.microsoft.azure.kusto.data.ClientFactory;
import com.microsoft.azure.kusto.data.KustoOperationResult;
import com.microsoft.azure.kusto.data.KustoResultSetTable;
import com.microsoft.azure.kusto.data.KustoResultColumn;
import com.microsoft.azure.kusto.data.auth.ConnectionStringBuilder;
public class ManagementCommands {
public static void main(String[] args) throws Exception {
try {
String clusterUri = "https://<your_cluster_uri>";
ConnectionStringBuilder kcsb = ConnectionStringBuilder.createWithUserPrompt(clusterUri);
try (Client kustoClient = ClientFactory.createClient(kcsb)) {
String database = "<your_database>";
String table = "MyStormEvents";
// Create a table named MyStormEvents
// The brackets contain a list of column Name:Type pairs that defines the table schema
String command = ".create table " + table + " " +
"(StartTime:datetime," +
" EndTime:datetime," +
" State:string," +
" DamageProperty:int," +
" DamageCrops:int," +
" Source:string," +
" StormSummary:dynamic)";
KustoOperationResult response = kustoClient.execute(database, command);
printResultsAsValueList(command, response.getPrimaryResults());
}
}
}
public static void printResultsAsValueList(String command, KustoResultSetTable results) {
while (results.next()) {
System.out.println("\n" + "-".repeat(20) + "\n");
System.out.println("Command: " + command);
System.out.println("Result:");
KustoResultColumn[] columns = results.getColumns();
for (int i = 0; i < columns.length; i++) {
System.out.println("\t" + columns[i].getColumnName() + " - " + (results.getObject(i) == null ? "None" : results.getString(i)));
}
}
}
}
Jalankan aplikasi Anda
Di shell perintah, gunakan perintah berikut untuk menjalankan aplikasi Anda:
# Change directory to the folder that contains the management commands project
dotnet run .
python management_commands.py
Di lingkungan Node.js:
node management-commands.js
Di lingkungan browser, gunakan perintah yang sesuai untuk menjalankan aplikasi Anda. Misalnya, untuk Vite-React:
npm run dev
Nota
Di lingkungan browser, buka konsol alat pengembang untuk melihat outputnya.
mvn install exec:java -Dexec.mainClass="<groupId>.ManagementCommands"
Anda akan melihat hasil yang mirip dengan yang berikut ini:
--------------------
Command: .create table MyStormEvents
(StartTime:datetime,
EndTime:datetime,
State:string,
DamageProperty:int,
Source:string,
StormSummary:dynamic)
Result:
TableName - MyStormEvents
Schema - {"Name":"MyStormEvents","OrderedColumns":[{"Name":"StartTime","Type":"System.DateTime","CslType":"datetime"},{"Name":"EndTime","Type":"System.DateTime","CslType":"datetime"},{"Name":"State","Type":"System.String","CslType":"string"},{"Name":"DamageProperty","Type":"System.Int32","CslType":"int"},{"Name":"Source","Type":"System.String","CslType":"string"},{"Name":"StormSummary","Type":"System.Object","CslType":"dynamic"}]}
DatabaseName - MyDatabaseName
Folder - None
DocString - None
Mengubah kebijakan pemrosesan batch tingkat tabel
Anda dapat menyesuaikan perilaku pengelompokan pengumpulan data untuk tabel dengan mengubah kebijakan pada tabel tersebut. Untuk informasi selengkapnya, lihat kebijakan IngestionBatching.
Nota
Jika Anda tidak menentukan semua parameter PolicyObject, parameter yang tidak ditentukan akan diatur ke nilai default. Misalnya, menentukan hanya "MaximumBatchingTimeSpan" maka "MaximumNumberOfItems" dan "MaximumRawDataSizeMB" akan diatur ke nilai default.
Misalnya, Anda dapat memodifikasi aplikasi untuk menetapkan batas waktu kebijakan batching penyerapan sebagai 30 detik dengan menyesuaikan kebijakan ingestionBatching pada tabel MyStormEvents menggunakan perintah berikut:
// Reduce the default batching timeout to 30 seconds
command = @$".alter-merge table {table} policy ingestionbatching '{{ ""MaximumBatchingTimeSpan"":""00:00:30"" }}'";
using (var response = kustoClient.ExecuteControlCommand(database, command, null))
{
PrintResultsAsValueList(command, response);
}
# Reduce the default batching timeout to 30 seconds
command = ".alter-merge table " + table + " policy ingestionbatching '{ \"MaximumBatchingTimeSpan\":\"00:00:30\" }'"
response = kusto_client.execute_mgmt(database, command)
print_result_as_value_list(command, response)
// Reduce the default batching timeout to 30 seconds
command = ".alter-merge table " + table + " policy ingestionbatching '{ \"MaximumBatchingTimeSpan\":\"00:00:30\" }'"
response = await kustoClient.executeMgmt(database, command)
printResultsAsValueList(command, response)
// Reduce the default batching timeout to 30 seconds
command = ".alter-merge table " + table + " policy ingestionbatching '{ \"MaximumBatchingTimeSpan\":\"00:00:30\" }'";
response = kusto_client.execute(database, command);
printResultsAsValueList(command, response.getPrimaryResults());
Saat menambahkan kode ke aplikasi dan menjalankannya, Anda akan melihat hasil yang mirip dengan yang berikut ini:
--------------------
Command: .alter-merge table MyStormEvents policy ingestionbatching '{ "MaximumBatchingTimeSpan":"00:00:30" }'
Result:
PolicyName - IngestionBatchingPolicy
EntityName - [YourDatabase].[MyStormEvents]
Policy - {
"MaximumBatchingTimeSpan": "00:00:30",
"MaximumNumberOfItems": 500,
"MaximumRawDataSizeMB": 1024
}
ChildEntities - None
EntityType - Table
Perlihatkan kebijakan penyimpanan tingkat database
Anda dapat menggunakan perintah manajemen untuk menampilkan kebijakan penyimpanan database.
Misalnya, Anda dapat mengubah aplikasi untuk menampilkan kebijakan penyimpanan database Anda menggunakan kode berikut. Hasilnya diatur untuk mengeluarkan dua kolom dari hasil:
// Show the database retention policy (drop some columns from the result)
command = @$".show database {database} policy retention | project-away ChildEntities, EntityType";
using (var response = kustoClient.ExecuteControlCommand(database, command, null)) {
PrintResultsAsValueList(command, response);
}
# Show the database retention policy (drop some columns from the result)
command = ".show database " + database + " policy retention | project-away ChildEntities, EntityType"
response = kusto_client.execute_mgmt(database, command)
print_result_as_value_list(command, response)
// Show the database retention policy (drop some columns from the result)
command = ".show database " + database + " policy retention | project-away ChildEntities, EntityType"
response = await kustoClient.executeMgmt(database, command)
printResultsAsValueList(command, response)
// Show the database retention policy (drop some columns from the result)
command = ".show database " + database + " policy retention | project-away ChildEntities, EntityType";
response = kusto_client.execute(database, command);
printResultsAsValueList(command, response.getPrimaryResults());
Saat menambahkan kode ke aplikasi dan menjalankannya, Anda akan melihat hasil yang mirip dengan yang berikut ini:
--------------------
Command: .show database YourDatabase policy retention | project-away ChildEntities, EntityType
Result:
PolicyName - RetentionPolicy
EntityName - [YourDatabase]
Policy - {
"SoftDeletePeriod": "365.00:00:00",
"Recoverability": "Enabled"
}
Langkah berikutnya