Azure Machine Learning Studio:无法从Azure SQL数据库创建数据存储

问题描述

我正在尝试从Azure Machine Learning Studio内部连接到Azure sql数据库。基于https://docs.microsoft.com/en-us/python/api/azureml-core/azureml.core.datastore.datastore?view=azure-ml-py,似乎推荐的模式是使用Datastore.register_azure_sql_database方法创建数据存储,如下所示:

import os
from azureml.core import Workspace,Datastore

ws = Workspace.from_config() # asks for interactive authentication the first time

sql_datastore_name  = "datastore_test_01" # any name should be fine
server_name         = os.getenv("sql_SERVERNAME","{sql_SERVERNAME}") # Name of the Azure sql server
database_name       = os.getenv("sql_DATABASENAME","{sql_DATABASENAME}") # Name of the Azure sql database
username            = os.getenv("sql_USER_NAME","{sql_USER_NAME}") # The username of the database user.
password            = os.getenv("sql_USER_PASSWORD","{sql_USER_PASSWORD}") # The password of the database user.

sql_datastore = Datastore.register_azure_sql_database(workspace      = ws,datastore_name = sql_datastore_name,server_name    = server_name,database_name  = database_name,username       = username,password       = password)

我很确定我已经正确设置了所有参数,已经从我的sql数据库资源上的ADO.NET连接字符串中复制了它们->设置->连接字符串:

Server=tcp:{sql_SERVERNAME}.database.windows.net,1433;Initial Catalog={sql_DATABASENAME};Persist Security Info=False;User ID={sql_USER_NAME};Password={sql_USER_PASSWORD};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

但是,出现以下错误

Registering datastore Failed with a 400 error code and error message 'Azure sql Database Error -2146232060: Please check the correctness of the datastore information.'

我错过了什么吗?例如防火墙规则?我还尝试将Azure ML计算资源的公用IP地址添加sql数据库资源中允许的IP地址列表中,但仍然没有成功。


更新:将skip_validation = True添加Datastore.register_azure_sql_database解决此问题。然后,我可以使用

查询数据
from azureml.core import Dataset
from azureml.data.datapath import DataPath

query   = DataPath(sql_datastore,'SELECT * FROM my_table')
tabular = Dataset.Tabular.from_sql_query(query,query_timeout = 10)
df = tabular.to_pandas_dataframe()

解决方法

数据存储在vnet后面吗?您在哪里运行上面的注册码?在同一个vnet后面的计算实例上? 这是文档,描述了连接到vnet背后的数据所需执行的操作: https://docs.microsoft.com/en-us/azure/machine-learning/how-to-enable-virtual-network#use-datastores-and-datasets