如何从SQL Server获取数据至Azure ML管道或数据存储?
从SQL Server向Azure ML管道/数据存储导入数据的可行方案
1. 注册SQL Server为Azure ML数据存储
直接把SQL Server注册成Azure ML的Datastore,后续就能在管道里直接调用:
- 用Azure ML SDK注册的代码示例:
from azureml.core import Workspace, Datastore ws = Workspace.from_config() # 注册SQL Server数据存储 sql_datastore = Datastore.register_sql_server( workspace=ws, datastore_name="sql_server_store", server_name="你的SQL Server地址", database_name="目标数据库名", username="数据库账号", password="数据库密码", port="1433" # 默认端口,按需修改 ) - 注册后可以直接用SQL查询创建数据集,供管道步骤使用:
from azureml.core import Dataset query = "SELECT * FROM 你的表名" sql_dataset = Dataset.Tabular.from_sql_query((sql_datastore, query)) # 数据集可以直接传入管道的训练步骤
2. 在管道步骤中直连SQL Server读取
如果不想注册数据存储,直接在管道的Python脚本里用数据库连接库读数据:
- 用pyodbc的示例代码:
import pyodbc import pandas as pd # 建立连接 conn_str = ( "DRIVER={ODBC Driver 17 for SQL Server};" "SERVER=你的SQL Server地址;" "DATABASE=目标数据库名;" "UID=数据库账号;" "PWD=数据库密码" ) conn = pyodbc.connect(conn_str) # 读取数据到DataFrame df = pd.read_sql("SELECT * FROM 你的表名", conn) # 后续可以把DataFrame存入Azure ML数据存储,或直接用于训练 - 注意:要在管道使用的环境里安装
pyodbc,可以在环境定义里加pip_packages=["pyodbc"]。
3. 批量同步到Azure数据存储
如果需要定期批量导入,用工具做数据同步更高效:
- 用Azure Data Factory创建同步管道,把SQL Server的数据定期同步到Azure Blob Storage或ADLS Gen2,然后Azure ML管道直接从这些存储读数据。
- 用SQL Server Integration Services (SSIS) 导出数据到Azure存储,再供ML管道使用。
常见问题排查
- 防火墙配置:本地SQL Server要开放端口并允许Azure服务访问;Azure SQL Database要在防火墙里添加Azure ML工作区的公网IP,或开启“允许Azure服务和资源访问此服务器”。
- 连接信息校验:确认服务器地址、数据库名、账号密码、端口全部正确。
- 权限检查:SQL Server账号必须有目标表的读取权限。
内容的提问来源于stack exchange,提问作者Mikey
相关产品推荐
相关产品推荐

