Extension du langage Python dans SQL ServerPython language extension in SQL Server

S’APPLIQUE À : ouiSQL Server nonAzure SQL Database nonAzure Synapse Analytics (SQL DW) nonParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

L’extension Python fait partie intégrante du module complémentaire SQL Server Machine Learning Services du moteur de base de données relationnelle.The Python extension is part of the SQL Server Machine Learning Services add-on to the relational database engine. Il ajoute un environnement d’exécution Python, une distribution Anaconda avec le runtime et l’interpréteur Python 3.5, des bibliothèques et outils standard ainsi que les bibliothèques de produits Microsoft pour Python : revoscalepy pour un analytique à la bonne échelle et microsoftml pour les algorithmes de Machine Learning.It adds a Python execution environment, Anaconda distribution with the Python 3.5 runtime and interpreter, standard libraries and tools, and the Microsoft product libraries for Python: revoscalepy for analytics at scale and microsoftml for machine learning algorithms.

L’intégration Python est installée en tant que SQL Server Machine Learning Services.Python integration is installed as SQL Server Machine Learning Services.

L’installation du runtime et de l’interpréteur Python 3.5 assure une compatibilité quasi-complète avec les solutions Python standard.Installation of the Python 3.5 runtime and interpreter ensures near-complete compatibility with standard Python solutions. Python s’exécute dans un processus distinct de SQL Server pour éviter de compromettre les opérations de base de données.Python runs in a separate process from SQL Server, to guarantee that database operations are not compromised.

Composants PythonPython components

SQL Server comporte des packages open source et propriétaires.SQL Server includes both open-source and proprietary packages. Le runtime Python installé par le programme d’installation est Anaconda 4.2 avec Python 3.5.The Python runtime installed by Setup is Anaconda 4.2 with Python 3.5. Le runtime Python est installé indépendamment des outils SQL et est exécuté en dehors des processus du moteur de base, dans le framework d’extensibilité.The Python runtime is installed independently of SQL tools, and is executed outside of core engine processes, in the extensibility framework. Pendant l’installation de Machine Learning Services avec Python, vous devez accepter les termes du contrat de la licence publique GNU.As part of the installation of Machine Learning Services with Python, you must consent to the terms of the GNU Public License.

SQL Server ne modifie pas les exécutables Python, mais vous devez utiliser la version de Python qui est installée par le programme d’installation, car c’est à partir de cette version que les packages propriétaires sont créés et testés.SQL Server does not modify the Python executables, but you must use the version of Python installed by Setup because that version is the one that the proprietary packages are built and tested on. Pour obtenir la liste des packages pris en charge par la distribution Anaconda, consultez le site Continuum Analytics : Liste des packages Anaconda.For a list of packages supported by the Anaconda distribution, see the Continuum analytics site: Anaconda package list.

La distribution Anaconda associée à une instance de moteur de base de données spécifique se trouve dans le dossier associé à l’instance.The Anaconda distribution associated with a specific database engine instance can be found in the folder associated with the instance. Par exemple, si vous avez installé le moteur de base de données SQL Server 2017 avec Machine Learning Services et Python sur l’instance par défaut, regardez sous C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES.For example, if you installed SQL Server 2017 database engine with Machine Learning Services and Python on the default instance, look under C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES.

Les packages Python ajoutés par Microsoft pour les charges de travail parallèles et distribuées incluent les bibliothèques suivantes.Python packages added by Microsoft for parallel and distributed workloads include the following libraries.

BibliothèqueLibrary DescriptionDescription
revoscalepyrevoscalepy Prend en charge les objets de source de données ainsi que l’exploration, la manipulation, la transformation et la visualisation des données.Supports data source objects and data exploration, manipulation, transformation, and visualization. Prend en charge la création de contextes de calcul distants ainsi qu’un certain nombre de modèles de Machine Learning scalables, comme rxLinMod.It supports creation of remote compute contexts, as well as a various scalable machine learning models, such as rxLinMod. Pour plus d’informations, consultez Module revoscalepy avec SQL Server.For more information, see revoscalepy module with SQL Server.
microsoftmlmicrosoftml Contient des algorithmes de Machine Learning qui ont été optimisés pour la vitesse et la précision ainsi que des transformations en ligne pour une utilisation avec du texte et des images.Contains machine learning algorithms that have been optimized for speed and accuracy, as well as in-line transformations for working with text and images. Pour plus d’informations, consultez Module microsoftml avec SQL Server.For more information, see microsoftml module with SQL Server.

Les modules microsoftml et revoscalepy sont étroitement couplés ; les sources de données utilisées dans microsoftml sont définies en tant qu’objets revoscalepy.Microsoftml and revoscalepy are tightly coupled; data sources used in microsoftml are defined as revoscalepy objects. Les limitations du contexte de calcul dans revoscalepy sont transférées à microsoftml.Compute context limitations in revoscalepy transfer to microsoftml. À savoir, toutes les fonctionnalités sont disponibles pour les opérations locales, mais le basculement vers un contexte de calcul distant nécessite RxInSqlServer.Namely, all functionality is available for local operations, but switching to a remote compute context requires RxInSqlServer.

Utilisation de Python dans SQL ServerUsing Python in SQL Server

Vous importez le module revoscalepy dans votre code Python, puis vous appelez des fonctions à partir du module, comme n’importe quelle autre fonction Python.You import the revoscalepy module into your Python code, and then call functions from the module, like any other Python functions.

Parmi les sources de données prises en charge figurent les bases de données ODBC, SQL Server et le format de fichier XDF pour l’échange de données avec d’autres sources ou avec des solutions R.Supported data sources include ODBC databases, SQL Server, and XDF file format to exchange data with other sources, or with R solutions. Les données d’entrée pour Python doivent être tabulaires.Input data for Python must be tabular. Tous les résultats Python doivent être retournés sous la forme d’une trame de données pandas.All Python results must be returned in the form of a pandas data frame.

Parmi les contextes de calcul pris en charge figurent le contexte de calcul SQL Server local ou distant.Supported compute contexts include local, or remote SQL Server compute context. Un contexte de calcul distant fait référence à une exécution de code qui commence sur un ordinateur, par exemple une station de travail, avant que l’exécution du script bascule sur un ordinateur distant.A remote compute context refers to code execution that starts on one computer such as a workstation, but then switches script execution to a remote computer. Pour que le basculement du contexte de calcul s’opère, les deux systèmes doivent avoir la même bibliothèque revoscalepy.Switching the compute context requires that both systems have the same revoscalepy library.

Comme vous pouvez le comprendre, le contexte de calcul local exécute notamment le code Python sur le même serveur que l’instance du moteur de base de données, avec le code à l’intérieur de T-SQL ou incorporé dans une procédure stockée.Local compute context, as you might expect, includes execution of Python code on the same server as the database engine instance, with code inside T-SQL or embedded in a stored procedure. Vous pouvez aussi exécuter le code à partir d’un IDE Python local et faire en sorte que le script s’exécute sur l’ordinateur SQL Server, en définissant un contexte de calcul distant.You can also run the code from a local Python IDE and have the script execute on the SQL Server computer, by defining a remote compute context.

Architecture d’exécutionExecution architecture

Les schémas ci-dessous décrivent l’interaction des composants SQL Server avec le runtime Python dans chacun des scénarios pris en charge suivants : exécution de script dans la base de données et exécution à distance à partir d’un terminal Python, en utilisant un contexte de calcul SQL Server.The following diagrams depict the interaction of SQL Server components with the Python runtime in each of the supported scenarios: running script in-database, and remote execution from a Python terminal, using a SQL Server compute context.

Scripts Python exécutés dans la base de donnéesPython scripts executed in-database

Quand vous exécutez Python « à l’intérieur » de SQL Server, vous devez encapsuler le script Python à l’intérieur d’une procédure stockée spéciale, sp_execute_external_script.When you run Python "inside" SQL Server, you must encapsulate the Python script inside a special stored procedure, sp_execute_external_script.

Une fois que le script a été incorporé dans la procédure stockée, toute application capable d’effectuer un appel de procédure stockée peut lancer l’exécution du code Python.After the script has been embedded in the stored procedure, any application that can make a stored procedure call can initiate execution of the Python code. SQL Server gère ensuite l’exécution du code comme le résume le schéma suivant.Thereafter SQL Server manages code execution as summarized in the following diagram.

script-in-db-python

  1. Une demande pour le runtime Python est indiquée par le paramètre @language='Python' transmis à la procédure stockée.A request for the Python runtime is indicated by the parameter @language='Python' passed to the stored procedure. SQL Server envoie cette demande au service launchpad.SQL Server sends this request to the launchpad service. Dans Linux, SQL utilise un service launchpad pour communiquer avec un processus launchpad distinct pour chaque utilisateur.In Linux, SQL uses a launchpadd service to communicate with a separate launchpad process for each user. Pour plus d’informations, consultez le schéma de l’architecture d’extensibilité.See the Extensibility architecture diagram for details.
  2. Le service launchpad démarre le lanceur approprié (en l’occurrence, PythonLauncher).The launchpad service starts the appropriate launcher; in this case, PythonLauncher.
  3. PythonLauncher démarre le processus Python35 externe.PythonLauncher starts the external Python35 process.
  4. En coordination avec le runtime Python, BxlServer gère les échanges de données et le stockage des résultats du travail.BxlServer coordinates with the Python runtime to manage exchanges of data, and storage of working results.
  5. SQL Satellite gère les communications avec SQL Server sur les tâches et les processus associés.SQL Satellite manages communications about related tasks and processes with SQL Server.
  6. BxlServer utilise SQL Satellite pour communiquer l’état et les résultats à SQL Server.BxlServer uses SQL Satellite to communicate status and results to SQL Server.
  7. SQL Server obtient les résultats et ferme les tâches et les processus associés.SQL Server gets results and closes related tasks and processes.

Scripts Python exécutés à partir d’un client distantPython scripts executed from a remote client

Vous pouvez exécuter les scripts Python à partir d’un ordinateur distant, par exemple un ordinateur portable, et les faire exécuter dans le contexte de l’ordinateur SQL Server, si les conditions suivantes sont réunies :You can run Python scripts from a remote computer, such as a laptop, and have them execute in the context of the SQl Server computer, if these conditions are met:

  • Vous concevez les scripts de manière appropriéeYou design the scripts appropriately
  • Les bibliothèques d’extensibilité utilisées par Machine Learning Services sont installées sur l’ordinateur distant.The remote computer has installed the extensibility libraries that are used by Machine Learning Services. Le package revoscalepy est nécessaire à l’utilisation de contextes de calcul distants.The revoscalepy package is required to use remote compute contexts.

Le schéma suivant résume le workflow global correspondant à l’envoi de scripts à partir d’un ordinateur distant.The following diagram summarizes the overall workflow when scripts are sent from a remote computer.

remote-sqlcc-from-python

  1. Pour les fonctions prises en charge dans revoscalepy, le runtime Python appelle une fonction de liaison, qui à son tour appelle BxlServer.For functions that are supported in revoscalepy, the Python runtime calls a linking function, which in turn calls BxlServer.
  2. BxlServer est fourni avec Machine Learning Services (dans la base de données) et s’exécute dans un processus distinct du runtime Python.BxlServer is included with Machine Learning Services (In-Database) and runs in a separate process from the Python runtime.
  3. BxlServer détermine la cible de connexion et initie une connexion à l’aide d’ODBC, en transmettant les informations d’identification fournies dans la chaîne de connexion du script Python.BxlServer determines the connection target and initiates a connection using ODBC, passing credentials supplied as part of the connection string in the Python script.
  4. BxlServer ouvre une connexion à l’instance SQL Server.BxlServer opens a connection to the SQL Server instance.
  5. Quand le runtime d’un script externe est appelé, le service launchpad est invoqué, lequel démarre à son tour le lanceur approprié (en l’occurrence, PythonLauncher.dll).When an external script runtime is called, the launchpad service is invoked, which in turn starts the appropriate launcher: in this case, PythonLauncher.dll. Après quoi, le traitement du code Python est géré dans un workflow similaire à celui au cours duquel le code Python est invoqué à partir d’une procédure stockée dans T-SQL.Thereafter, processing of Python code is handled in a workflow similar to that when Python code is invoked from a stored procedure in T-SQL.
  6. PythonLauncher effectue un appel à l’instance du runtime Python qui est installé sur l’ordinateur SQL Server.PythonLauncher makes a call to the instance of the Python that is installed on the SQL Server computer.
  7. Les résultats sont retournés à BxlServer.Results are returned to BxlServer.
  8. SQL Satellite gère la communication avec SQL Server et le nettoyage des objets de travail associés.SQL Satellite manages communication with SQL Server and cleanup of related job objects.
  9. SQL Server transmet en retour les résultats au client.SQL Server passes results back to the client.

Étapes suivantesNext steps