在Synapse Notebook中用PySpark读取Log Analytics表失败,求可行方法
可行的Log Analytics与Synapse PySpark连接方法
方法1:使用托管标识(MSI)认证
若你的Synapse工作区已启用系统/用户分配的托管标识,且该标识被授予Log Analytics工作区的读取者权限,可采用此无凭据硬编码的方式:
df_lg_tb = spark.read.format("com.microsoft.kusto.spark.datasource") \ .option("kustoCluster", "https://<workspace-id>.ods.opinsights.azure.com") \ .option("kustoDatabase", "<my-log-analytics-database-name>") \ .option("kustoQuery", "AzureActivity|take 10") \ .option("useAadMSI", "true") \ # 若使用用户分配的MSI,添加以下行并替换为对应客户端ID # .option("msiClientId", "<your-msi-client-id>") \ .load()
方法2:使用服务主体认证
先创建AAD服务主体并为其分配Log Analytics工作区读取权限,再通过服务主体凭据连接:
df_lg_tb = spark.read.format("com.microsoft.kusto.spark.datasource") \ .option("kustoCluster", "https://<workspace-id>.ods.opinsights.azure.com") \ .option("kustoDatabase", "<my-log-analytics-database-name>") \ .option("kustoQuery", "AzureActivity|take 10") \ .option("kustoAADClientId", "<service-principal-client-id>") \ .option("kustoAADClientSecret", "<service-principal-client-secret>") \ .option("kustoAADAuthorityID", "<tenant-id>") \ .load()
方法3:使用Synapse链接服务
先在Synapse Studio中创建指向Log Analytics工作区的链接服务,之后直接通过链接服务读取数据:
# 直接读取表 df_lg_tb = spark.read \ .synapsesql("<linked-service-name>.<database-name>.<table-name>") \ .limit(10) # 或通过SQL查询读取 df_lg_tb = spark.sql("SELECT * FROM OPENROWSET('Microsoft.LogAnalytics', '<linked-service-name>', '<database-name>', 'AzureActivity') LIMIT 10")
原代码的核心问题
你提供的代码中认证参数配置错误:kustoAADUserId需填写AAD用户的邮箱账号,而非Log Analytics工作区ID;kustoAADPassword是该AAD用户的登录密码,并非工作区密钥,这是连接失败的主要原因。
内容的提问来源于stack exchange,提问作者coding
相关产品推荐
相关产品推荐

