Попытка запроса базы данных SQL Azure с помощью образа Azure ML / Docker - PullRequest
0 голосов
/ 08 октября 2019

Я хотел выполнить развертывание моей модели в режиме реального времени в Azure, поэтому я планирую создать изображение, которое сначала запрашивает идентификатор в Azure SQL db, чтобы получить необходимые функции, затем прогнозирует с использованием моей модели и возвращает прогнозы. Ошибка, которую я получаю из библиотеки PyODBC, заключается в том, что драйверы не установлены

Я попытался установить это на ноутбуке azure ML jupyter, чтобы установить соединение, и обнаружил, что драйверы не устанавливаются в самой среде. После некоторых исследований я обнаружил, что я должен создать образ докера и развернуть его там, но я все еще встречал те же результаты

    driver= '{ODBC Driver 13 for SQL Server}'
    cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password+';Encrypt=yes'+';TrustServerCertificate=no'+';Connection Timeout=30;')

('01000', "[01000] [unixODBC] [Диспетчер драйверов] Не удается открыть библиотеку «Драйвер ODBC 13 для SQL Server»: файл не найден (0) (SQLDriverConnect) »)

Я хочу получить результат запроса, вместо этого я получаю это сообщение

Ответы [ 3 ]

1 голос
/ 08 октября 2019

и / или вы можете использовать pymssql == 2.1.1, если вы добавите следующие шаги докера в конфигурации развертывания (используя либо Среды, либо ContainerImages - предпочтительнее Среды):

from azureml.core import Environment
from azureml.core.environment import CondaDependencies
conda_dep = CondaDependencies()
conda_dep.add_pip_package('pymssql==2.1.1')
myenv = Environment(name="mssqlenv")
myenv.python.conda_dependencies=conda_dep
myenv.docker.enabled = True
myenv.docker.base_dockerfile = 'FROM mcr.microsoft.com/azureml/base:latest\nRUN apt-get update && apt-get -y install freetds-dev freetds-bin vim gcc'
myenv.docker.base_image = None

Или, если вы используете класс ContainerImage, вы можете добавить эти Docker Steps

from azureml.core.image import Image, ContainerImage
image_config = ContainerImage.image_configuration(runtime= "python", execution_script="score.py", conda_file="myenv.yml", docker_file="Dockerfile.steps")
# Assuming this : 
# RUN apt-get update && apt-get -y install freetds-dev freetds-bin vim gcc
# is in a file called Dockerfile.steps, it should produce the same result.

См. этот ответ для получения дополнительной информации о том, как я это сделал, используя шаг Estimator и пользовательский Docker-контейнер. Вы можете использовать этот Dockerfile для локального создания контейнера Docker для этого шага Estimator (нет необходимости делать это, если вы просто используете Estimator, запускаемый вне конвейера):

FROM continuumio/miniconda3:4.4.10
RUN apt-get update && apt-get -y install freetds-dev freetds-bin gcc
RUN pip install Cython

Для получения дополнительной информации см. Этоотправка: с использованием оценщика в конвейере с пользовательскими образами докера . Надеюсь, это поможет!

0 голосов
/ 09 октября 2019

Судя по моему опыту, я думаю, что комментарий @ DavidBrowne-Microsoft правильный.

Существует аналогичный поток SO Я получаю сообщение об ошибке при подключении к базе данных sql в Jupyter Notebook , на который я отвечаю, и думаю, это поможет вам установить последнюю версию msodbcsqlДрайвер для Linux для Microsoft Azure Notebook или Docker.

Между тем, есть подробные сведения о строке подключения для базы данных SQL Azure, которые необходимо внимательно отметить, что вам следует использовать {ODBC Driver 17 for SQL Server} вместо {ODBC Driver 13 for SQL Server}, еслибаза данных SQL Azure была создана недавно (игнорируйте строку подключения, показанную на портале Azure).

0 голосов
/ 08 октября 2019

вы можете использовать встроенный набор данных AzureML для подключения к вашему SQL-серверу. Для этого вы можете сначала создать хранилище данных azure_sql_database. ссылка здесь

Затем создайте набор данных, передав созданное вами хранилище данных и запрос, который вы хотите выполнить. ссылка здесь

пример кода

from azureml.core import Dataset, Datastore, Workspace

workspace = Workspace.from_config()

sql_datastore = Datastore.register_azure_sql_database(workspace = workspace,
                                                      datastore_name = 'sql_dstore', 
                                                      server_name = 'your SQL server name', 
                                                      database_name = 'your SQL database name', 
                                                      tenant_id = 'your directory ID/tenant ID of the service principal', 
                                                      client_id = 'the Client ID/Application ID of the service principal', 
                                                      client_secret = 'the secret of the service principal')

sql_dataset = Dataset.Tabular.from_sql_query((sql_datastore, 'SELECT * FROM my_table'))

Вы также можете сделать это через пользовательский интерфейс на ml.azure.com , где вы можете зарегистрировать лазурьХранилище данных SQL с использованием вашего имени пользователя и пароля.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...