Python-Spracherweiterung in SQL ServerPython language extension in SQL Server

Gilt für: JaSQL Server NeinAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Die Python-Erweiterung ist Teil des SQL Server Machine Learning Services-Add-Ons für die relationale Datenbank-Engine.The Python extension is part of the SQL Server Machine Learning Services add-on to the relational database engine. Es werden eine Python-Ausführungsumgebung, eine Anaconda-Distribution mit Python-Runtime und Python-Interpreter Version 3.5, Standardbibliotheken und -tools sowie die Microsoft-Produktbibliotheken für Python hinzugefügt: revoscalepy für skalierte Analysen und microsoftml für Algorithmen für maschinelles Lernen.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.

Die Python-Integration wird als SQL Server Machine Learning Services installiert.Python integration is installed as SQL Server Machine Learning Services.

Die Installation von Python-Runtime und -Interpreter Version 3.5 gewährleistet eine nahezu vollständige Kompatibilität mit Python-Standardlösungen.Installation of the Python 3.5 runtime and interpreter ensures near-complete compatibility with standard Python solutions. Python wird in einem separaten Prozess von SQL Server ausgeführt, um sicherzustellen, dass die Datenbankvorgänge nicht beeinträchtigt werden.Python runs in a separate process from SQL Server, to guarantee that database operations are not compromised.

Python-KomponentenPython components

SQL Server enthält sowohl Open Source- als auch proprietäre Pakete.SQL Server includes both open-source and proprietary packages. Die von Setup installierte Python-Runtime ist Anaconda 4.2 mit Python 3.5.The Python runtime installed by Setup is Anaconda 4.2 with Python 3.5. Python-Runtime wird unabhängig von SQL-Tools installiert und außerhalb der Kernprozesse der Engine im Erweiterbarkeitsframework ausgeführt.The Python runtime is installed independently of SQL tools, and is executed outside of core engine processes, in the extensibility framework. Im Rahmen der Installation von Machine Learning Services mit Python müssen Sie den Bedingungen der öffentlichen GNU-Lizenz zustimmen.As part of the installation of Machine Learning Services with Python, you must consent to the terms of the GNU Public License.

SQL Server ändert die ausführbaren Python-Dateien nicht. Sie müssen jedoch die Version von Python verwenden, die von Setup installiert wird, da auf dieser Version die proprietären Pakete erstellt und getestet werden.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. Eine Liste der von der Anaconda-Distribution unterstützten Pakete finden Sie auf der Website „Anaconda Documentation“: Anaconda-Paketliste.For a list of packages supported by the Anaconda distribution, see the Continuum analytics site: Anaconda package list.

Die Anaconda-Distribution, die mit einer bestimmten Datenbank-Engine verknüpft ist, finden Sie in dem Ordner, der mit der Instanz verknüpft ist.The Anaconda distribution associated with a specific database engine instance can be found in the folder associated with the instance. Wenn Sie beispielsweise die SQL Server 2017-Datenbank-Engine mit Machine Learning Services und Python auf der Standardinstanz installiert haben, suchen Sie unter 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.

Python-Pakete, die von Microsoft für parallele und verteilte Workloads hinzugefügt wurden, umfassen die folgenden Bibliotheken.Python packages added by Microsoft for parallel and distributed workloads include the following libraries.

BibliothekLibrary BeschreibungDescription
revoscalepyrevoscalepy Unterstützt Datenquellenobjekte sowie die Exploration, Manipulation, Transformation und Visualisierung von Daten.Supports data source objects and data exploration, manipulation, transformation, and visualization. Unterstützt die Erstellung von Remotecomputekontexten sowie verschiedene skalierbare Machine Learning-Modelle wie rxLinMod.It supports creation of remote compute contexts, as well as a various scalable machine learning models, such as rxLinMod. Weitere Informationen finden Sie unter revoscalepy (Python-Modul in SQL Server).For more information, see revoscalepy module with SQL Server.
microsoftmlmicrosoftml Enthält Algorithmen für das maschinelle Lernen, die hinsichtlich Geschwindigkeit und Genauigkeit optimiert wurden, sowie Inline-Transformationen für die Arbeit mit Text und Bildern.Contains machine learning algorithms that have been optimized for speed and accuracy, as well as in-line transformations for working with text and images. Weitere Informationen finden Sie unter microsoftml (Python-Modul in SQL Server).For more information, see microsoftml module with SQL Server.

microsoftml und revoscalepy sind eng miteinander verbunden; in microsoftsoftml verwendete Datenquellen sind als revoscalepy-Objekte definiert.Microsoftml and revoscalepy are tightly coupled; data sources used in microsoftml are defined as revoscalepy objects. Berechnen Sie Kontextbeschränkungen bei der revoscalepy-Übertragung nach microsoftml.Compute context limitations in revoscalepy transfer to microsoftml. Die gesamte Funktionalität für lokale Vorgänge ist zwar verfügbar, aber der Wechsel zu einem Remotecomputekontext erfordert RxInSqlServer.Namely, all functionality is available for local operations, but switching to a remote compute context requires RxInSqlServer.

Verwenden von Python in SQL ServerUsing Python in SQL Server

Sie importieren das Modul revoscalepy in Ihren Python-Code und rufen dann Funktionen aus dem Modul auf, wie bei allen anderen Python-Funktionen.You import the revoscalepy module into your Python code, and then call functions from the module, like any other Python functions.

Unterstützte Datenquellen sind ODBC-Datenbanken, SQL Server und das XDF-Dateiformat, um Daten mit anderen Quellen oder mit R-Lösungen auszutauschen.Supported data sources include ODBC databases, SQL Server, and XDF file format to exchange data with other sources, or with R solutions. Die Eingabedaten für Python müssen tabellarisch sein.Input data for Python must be tabular. Alle Python-Ergebnisse müssen in Form eines Pandas-Datenrahmens zurückgegeben werden.All Python results must be returned in the form of a pandas data frame.

Unterstützte Computekontexte sind lokale oder SQL Server-Remotecomputekontexte.Supported compute contexts include local, or remote SQL Server compute context. Ein Remotecomputekontext bezieht sich auf die Codeausführung, die auf einem Computer (beispielsweise einer Arbeitsstation) beginnt, aber dann die Skriptausführung auf einen Remotecomputer schaltet.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. Zum Wechseln des Computekontexts müssen beide Systeme dieselbe revoscalepy-Bibliothek aufweisen.Switching the compute context requires that both systems have the same revoscalepy library.

Ein lokaler Computekontext umfasst naturgemäß die Ausführung von Python-Code auf demselben Server wie die Instanz der Datenbank-Engine, wobei sich der Code in T-SQL befindet oder in eine gespeicherte Prozedur eingebettet ist.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. Sie können den Code auch aus einer lokalen Python-IDE ausführen und das Skript auf dem SQL Server-Computer ausführen lassen, indem Sie einen Remotecomputekontext definieren.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.

AusführungsarchitekturExecution architecture

Die folgenden Diagramme zeigen die Interaktion von SQL Server-Komponenten mit Python-Runtime in jedem der unterstützten Szenarios: datenbankinternes Ausführen von Skripts und Remoteausführung von einer Python-Befehlszeile aus, indem ein SQL Server-Computekontext verwendet wird.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.

Datenbankinternes Ausführen von Python-SkriptsPython scripts executed in-database

Wenn Sie Python „innerhalb“ von SQL Server ausführen, müssen Sie das Python-Skript in einer speziellen gespeicherten Prozedur kapseln, 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.

Nachdem das Skript in die gespeicherte Prozedur eingebettet wurde, kann jede Anwendung, die einen Aufruf der gespeicherten Prozedur ausführen kann, die Ausführung von Python-Code einleiten.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. Anschließend verwaltet SQL Server die Ausführung des Codes. Dies wird im folgenden Diagramm gezeigt.Thereafter SQL Server manages code execution as summarized in the following diagram.

script-in-db-python

  1. Eine Anforderung für Python-Runtime wird vom Parameter @language='Python' angegeben, der an die gespeicherte Prozedur weitergegeben wird.A request for the Python runtime is indicated by the parameter @language='Python' passed to the stored procedure. SQL Server sendet diese Anforderung an den Launchpad-Dienst.SQL Server sends this request to the launchpad service. Unter Linux verwendet SQL einen launchpadd-Dienst, um mit einem separaten Launchpad-Prozess für jeden Benutzer zu kommunizieren.In Linux, SQL uses a launchpadd service to communicate with a separate launchpad process for each user. Ausführliche Informationen finden Sie im Diagramm zur Erweiterbarkeitsarchitektur.See the Extensibility architecture diagram for details.
  2. Der Launchpad-Dienst startet das entsprechende Startprogramm; in diesem Fall „PythonLauncher“.The launchpad service starts the appropriate launcher; in this case, PythonLauncher.
  3. PythonLauncher startet den externen Python35-Prozess.PythonLauncher starts the external Python35 process.
  4. BxlServer koordiniert mit Python-Runtime, um die Austauschvorgänge von Daten und der Speicherung von Arbeitsergebnissen zu verwalten.BxlServer coordinates with the Python runtime to manage exchanges of data, and storage of working results.
  5. SQL Satellite verwaltet die Kommunikation über zugehörige Aufgaben und Prozesse mit SQL Server.SQL Satellite manages communications about related tasks and processes with SQL Server.
  6. BxlServer verwendet SQL Satellite, um Status und Ergebnisse an SQL Server zu übermitteln.BxlServer uses SQL Satellite to communicate status and results to SQL Server.
  7. SQL Server ruft die Ergebnisse ab und schließt zugehörige Aufgaben und Prozesse.SQL Server gets results and closes related tasks and processes.

Von einem Remoteclient ausgeführte Python-SkriptsPython scripts executed from a remote client

Sie können Python-Skripts von einem Remotecomputer, z. B. einem Laptop, ausführen und im Kontext des SQL Server-Computers ausführen lassen, wenn diese Bedingungen erfüllt sind: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:

  • Sie entwerfen die Skripts entsprechend.You design the scripts appropriately
  • Der Remotecomputer hat die Erweiterbarkeitsbibliotheken installiert, die von Machine Learning Services verwendet werden.The remote computer has installed the extensibility libraries that are used by Machine Learning Services. Das revoscalepy-Paket ist zur Verwendung von Remotecomputekontexten erforderlich.The revoscalepy package is required to use remote compute contexts.

Das folgende Diagramm stellt den gesamten Workflow dar, wenn Skripts von einem Remotecomputer gesendet werden.The following diagram summarizes the overall workflow when scripts are sent from a remote computer.

remote-sqlcc-from-python

  1. Python-Runtime ruft für in revoscalepy unterstützte Funktionen eine Verknüpfungsfunktion auf, die wiederum Bxlserver aufruft.For functions that are supported in revoscalepy, the Python runtime calls a linking function, which in turn calls BxlServer.
  2. BxlServer ist in Machine Learning Services (datenbankintern) enthalten und läuft in einem separaten Prozess von Python-Runtime.BxlServer is included with Machine Learning Services (In-Database) and runs in a separate process from the Python runtime.
  3. BxlServer bestimmt das Verbindungsziel und initiiert eine Verbindung mithilfe von ODBC, wobei Anmeldeinformationen, die als Teil der Verbindungszeichenfolge im Python-Skript bereitgestellt werden, übergeben werden.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 öffnet eine Verbindung mit der SQL Server-Instanz.BxlServer opens a connection to the SQL Server instance.
  5. Beim Aufruf einer externen Skriptruntime wird der Launchpad-Dienst aufgerufen, der wiederum das entsprechenden Startprogramm startet: in diesem Fall 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. Danach wird die Verarbeitung von Python-Code in einem Workflow ähnlich behandelt wie beim Aufruf von Python-Code aus einer gespeicherten Prozedur in 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 ruft die Python-Instanz ab, die auf dem SQL Server-Computer installiert ist.PythonLauncher makes a call to the instance of the Python that is installed on the SQL Server computer.
  7. Ergebnisse werden an BxlServer zurückgegeben.Results are returned to BxlServer.
  8. SQL Satellite verwaltet die Kommunikation mit SQL Server sowie die Bereinigung zugehöriger Auftragsobjekte.SQL Satellite manages communication with SQL Server and cleanup of related job objects.
  9. SQL Server gibt die Ergebnisse an den Client zurück.SQL Server passes results back to the client.

Nächste SchritteNext steps