You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

托管身份/证书认证本地文件导入Kusto的技术问询及代码问题

关于Kusto导入本地CSV的认证及代码问题

一、托管身份认证支持本地CSV导入吗?

支持。托管身份(系统分配或用户分配类型)可用于Kusto连接认证,进而完成本地CSV文件导入操作。

示例代码(C#)

using Kusto.Data;
using Kusto.Data.Common;
using Kusto.Ingest;

var clusterUri = "https://<cluster-name>.kusto.windows.net";
var databaseName = "<database-name>";
var tableName = "<table-name>";
var csvFilePath = @"C:\local\data.csv";

// 构建托管身份认证的连接字符串
var kustoConnectionString = new KustoConnectionStringBuilder(clusterUri, databaseName)
{
    FederatedSecurity = true,
    // 用户分配身份需指定此参数,系统分配身份可省略
    ManagedIdentityClientId = "<user-assigned-mi-client-id>" 
};

// 创建 ingestion 客户端
var ingestClient = KustoIngestFactory.CreateQueuedIngestClient(kustoConnectionString);

// 配置导入属性
var ingestionProperties = new KustoQueuedIngestionProperties(databaseName, tableName)
{
    Format = DataSourceFormat.Csv,
    IgnoreFirstRecord = true // CSV含表头时设置为true
};

// 执行本地CSV导入
await ingestClient.IngestFromStorageAsync(csvFilePath, ingestionProperties);

二、证书认证支持本地文件导入吗?

支持。使用ApplicationCertificateBlob证书认证可完成Kusto连接并导入本地CSV,你遇到的**"缺少Application Key"错误源于连接字符串构建方式错误**:当使用证书认证时,不能通过带数据库的格式化字符串初始化连接,需直接用集群URI构建,再单独配置数据库与认证参数,避免SDK误判认证方式。

修复后的证书认证导入示例代码

using Kusto.Data;
using Kusto.Data.Common;
using Kusto.Ingest;
using System.Security.Cryptography.X509Certificates;

var clusterUri = "https://<cluster-name>.kusto.windows.net";
var databaseName = "<database-name>";
var tableName = "<table-name>";
var csvFilePath = @"C:\local\data.csv";
var clientId = "<application-client-id>";
var tenantId = "<tenant-id>";
// 加载证书文件
var certificate = new X509Certificate2(@"C:\path\to\certificate.pfx", "<certificate-password>");

// 正确构建证书认证的连接字符串
var kustoConnectionString = new KustoConnectionStringBuilder(clusterUri)
{
    FederatedSecurity = true,
    ApplicationClientId = clientId,
    Authority = tenantId,
    ApplicationCertificateBlob = certificate.Export(X509ContentType.Pfx, "<certificate-password>"),
    ApplicationCertificateSendX5c = true
};

// 创建 ingestion 客户端
var ingestClient = KustoIngestFactory.CreateQueuedIngestClient(kustoConnectionString);

var ingestionProperties = new KustoQueuedIngestionProperties(databaseName, tableName)
{
    Format = DataSourceFormat.Csv,
    IgnoreFirstRecord = true
};

// 执行本地CSV导入
await ingestClient.IngestFromStorageAsync(csvFilePath, ingestionProperties);

错误原因说明

你之前的代码通过string.Format(KustoConnectionString, clusterName, dbName)构建连接字符串,若模板格式存在错误(比如包含了密钥相关占位符),会导致SDK误将证书认证判定为需要密钥的认证方式,从而抛出错误。直接用集群URI初始化KustoConnectionStringBuilder可避免此问题。


内容的提问来源于stack exchange,提问作者H A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:46:02