sp_execute_external_script (Transact-SQL)sp_execute_external_script (Transact-SQL)

GILT FÜR: JaSQL Server 2016 und höher NeinAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data WarehouseAPPLIES TO: yesSQL Server 2016 and later noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Die gespeicherte Prozedur sp_execute_external_script führt ein als Eingabe Argument bereitgestelltes Skript für die Prozedur aus und wird mit Machine Learning Services -und Spracherweiterungenverwendet.The sp_execute_external_script stored procedure executes a script provided as an input argument to the procedure, and is used with Machine Learning Services and Language Extensions.

Für Machine Learning Services werden python und R unterstützte Sprachen.For Machine Learning Services, Python and R are supported languages. Für Spracherweiterungen wird Java unterstützt, muss aber mit Create externe Languagedefiniert werden.For Language Extensions, Java is supported but must be defined with CREATE EXTERNAL LANGUAGE.

Zum Ausführen von sp_execute_external_scriptmüssen Sie zuerst Machine Learning Services oder Spracherweiterungen installieren.To execute sp_execute_external_script, you must first install Machine Learning Services or Language Extensions. Weitere Informationen finden Sie unter Installieren von SQL Server Machine Learning Services (python und R) unter Windows und Linuxoder Installieren von SQL Server Spracherweiterungen unter Windows und Linux.For more information, see Install SQL Server Machine Learning Services (Python and R) on Windows and Linux, or Install SQL Server Language Extensions on Windows and Linux.

Die gespeicherte Prozedur sp_execute_external_script führt ein Skript aus, das als Eingabe Argument für die Prozedur bereitgestellt wird, und wird mit Machine Learning Services auf SQL Server 2017 verwendet.The sp_execute_external_script stored procedure executes a script provided as an input argument to the procedure, and is used with Machine Learning Services on SQL Server 2017.

Für Machine Learning Services werden python und R unterstützte Sprachen.For Machine Learning Services, Python and R are supported languages.

Zum Ausführen von sp_execute_external_scriptmüssen Sie zuerst Machine Learning Services installieren.To execute sp_execute_external_script, you must first install Machine Learning Services. Weitere Informationen finden Sie unter Installieren von SQL Server Machine Learning Services (python und R) unter Windows.For more information, see Install SQL Server Machine Learning Services (Python and R) on Windows.

Die gespeicherte Prozedur sp_execute_external_script führt ein als Eingabe Argument bereitgestelltes Skript für die Prozedur aus und wird mit R Services auf SQL Server 2016 verwendet.The sp_execute_external_script stored procedure executes a script provided as an input argument to the procedure, and is used with R Services on SQL Server 2016.

R Services ist die unterstützte Sprache.For R Services, R is the supported language.

Zum Ausführen von sp_execute_external_scriptmüssen Sie zuerst R Services installieren.To execute sp_execute_external_script, you must first install R Services. Weitere Informationen finden Sie unter Installieren von SQL Server Machine Learning Services (python und R) unter Windows.For more information, see Install SQL Server Machine Learning Services (Python and R) on Windows.

Symbol für Themenlink Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

sp_execute_external_script   
    @language = N'language',   
    @script = N'script'  
    [ , @input_data_1 = N'input_data_1' ]   
    [ , @input_data_1_name = N'input_data_1_name' ]  
    [ , @input_data_1_order_by_columns = N'input_data_1_order_by_columns' ]    
    [ , @input_data_1_partition_by_columns = N'input_data_1_partition_by_columns' ]  
    [ , @output_data_1_name = N'output_data_1_name' ]  
    [ , @parallel = 0 | 1 ]  
    [ , @params = N'@parameter_name data_type [ OUT | OUTPUT ] [ ,...n ]' ] 
    [ , @parameter1 = 'value1' [ OUT | OUTPUT ] [ ,...n ] ]

Syntax für 2017 und früherSyntax for 2017 and earlier

sp_execute_external_script   
    @language = N'language',   
    @script = N'script'  
    [ , @input_data_1 = N'input_data_1' ]   
    [ , @input_data_1_name = N'input_data_1_name' ]  
    [ , @output_data_1_name = N'output_data_1_name' ]  
    [ , @parallel = 0 | 1 ]  
    [ , @params = N'@parameter_name data_type [ OUT | OUTPUT ] [ ,...n ]' ] 
    [ , @parameter1 = 'value1' [ OUT | OUTPUT ] [ ,...n ] ]

ArgumenteArguments

Sprache = N 'Sprache' ** @**@language = N'language'

Gibt die Skriptsprache an.Indicates the script language. Language ist vom Datentyp vom Datentyp sysname.language is sysname. Gültige Werte sind R, pythonund jede Sprache, die in externer Sprache erstellen (z. b. Java) definiert ist.Valid values are R, Python, and any language defined with CREATE EXTERNAL LANGUAGE (for example, Java).

Gibt die Skriptsprache an.Indicates the script language. Language ist vom Datentyp vom Datentyp sysname.language is sysname. Gültige Werte in SQL Server 2017 sind R und python.In SQL Server 2017, valid values are R and Python.

Gibt die Skriptsprache an.Indicates the script language. Language ist vom Datentyp vom Datentyp sysname.language is sysname. In SQL Server 2016 ist Rder einzige gültige Wert.In SQL Server 2016, the only valid value is R.

Skript =N Skript Skriptfür externe Sprache als Literale oder Variablen Eingabe angegeben. ** @**@script = N'script' External language script specified as a literal or variable input. Skript ist vom Datentyp nvarchar (max).script is nvarchar(max).

[ @input_data_1 = N'input_data_1' ]Gibt die Eingabedaten an, die vom externen Skript in Form einer Transact-SQLTransact-SQL Abfrage verwendet werden.[ @input_data_1 = N'input_data_1' ] Specifies the input data used by the external script in the form of a Transact-SQLTransact-SQL query. Der Datentyp von input_data_1 ist vom Datentyp nvarchar (max).The data type of input_data_1 is nvarchar(max).

[ @input_data_1_name = N'input_data_1_name' ]Gibt den Namen der Variablen an, die für die Darstellung der durch @input_data_1definierten Abfrage verwendet wird.[ @input_data_1_name = N'input_data_1_name' ] Specifies the name of the variable used to represent the query defined by @input_data_1. Der Datentyp der Variablen im externen Skript hängt von der Sprache ab.The data type of the variable in the external script depends on the language. Im Fall von R ist die Eingabe Variable ein Datenrahmen.In case of R, the input variable is a data frame. Im Fall von python müssen Eingaben tabellarisch sein.In the case of Python, input must be tabular. input_data_1_name ist vom Datentyp vom Datentyp sysname.input_data_1_name is sysname. Der Standardwert ist Input DataSet.Default value is InputDataSet.

[ @input_data_1_order_by_columns = N'input_data_1_order_by_columns' ]Wird verwendet, um Modelle pro Partition zu erstellen.[ @input_data_1_order_by_columns = N'input_data_1_order_by_columns' ] Used to build per-partition models. Gibt den Namen der Spalte an, die zum Sortieren des Resultsets verwendet wird, z. b. nach Produktname.Specifies the name of the column used to order the result set, for example by product name. Der Datentyp der Variablen im externen Skript hängt von der Sprache ab.The data type of the variable in the external script depends on the language. Im Fall von R ist die Eingabe Variable ein Datenrahmen.In case of R, the input variable is a data frame. Im Fall von python müssen Eingaben tabellarisch sein.In the case of Python, input must be tabular.

[ @input_data_1_partition_by_columns = N'input_data_1_partition_by_columns' ]Wird verwendet, um Modelle pro Partition zu erstellen.[ @input_data_1_partition_by_columns = N'input_data_1_partition_by_columns' ] Used to build per-partition models. Gibt den Namen der Spalte an, die zum Segmentieren von Daten verwendet wird, z. b. geografische Region oder DatumSpecifies the name of the column used to segment data, such as geographic region or date. Der Datentyp der Variablen im externen Skript hängt von der Sprache ab.The data type of the variable in the external script depends on the language. Im Fall von R ist die Eingabe Variable ein Datenrahmen.In case of R, the input variable is a data frame. Im Fall von python müssen Eingaben tabellarisch sein.In the case of Python, input must be tabular.

[ @output_data_1_name = N'output_data_1_name' ]Gibt den Namen der Variablen im externen Skript an, die die Daten enthält, die nach dem SQL ServerSQL Server Abschluss des Aufrufens einer gespeicherten Prozedur zurückgegeben werden sollen.[ @output_data_1_name = N'output_data_1_name' ] Specifies the name of the variable in the external script that contains the data to be returned to SQL ServerSQL Server upon completion of the stored procedure call. Der Datentyp der Variablen im externen Skript hängt von der Sprache ab.The data type of the variable in the external script depends on the language. Bei R muss die Ausgabe ein Datenrahmen sein.For R, the output must be a data frame. Bei python muss die Ausgabe ein Pandas-dataframe sein.For Python, the output must be a pandas data frame. output_data_1_name ist vom Datentyp vom Datentyp sysname.output_data_1_name is sysname. Der Standardwert ist outputdataset.Default value is OutputDataSet.

[ @parallel = 0 | 1 ]Aktivieren Sie die parallele Ausführung von R-Skripts, indem Sie den @parallel Parameter auf 1 festlegen.[ @parallel = 0 | 1 ] Enable parallel execution of R scripts by setting the @parallel parameter to 1. Der Standardwert für diesen Parameter ist 0 (keine Parallelität).The default for this parameter is 0 (no parallelism). Wenn @parallel = 1 und die Ausgabe direkt an den Client Computer gestreamt werden, ist die WITH RESULT SETS -Klausel erforderlich, und es muss ein Ausgabe Schema angegeben werden.If @parallel = 1 and the output is being streamed directly to the client machine, then the WITH RESULT SETS clause is required and an output schema must be specified.

  • Bei R-Skripts, in denen keine revoscaler-Funktionen @parallel verwendet werden, kann die Verwendung des-Parameters für die Verarbeitung großer Datasets vorteilhaft sein, vorausgesetzt, das Skript kann triviell parallelisiert werden.For R scripts that do not use RevoScaleR functions, using the @parallel parameter can be beneficial for processing large datasets, assuming the script can be trivially parallelized. Wenn Sie z. b. die predict R-Funktion mit einem Modell verwenden, um neue @parallel = 1 Vorhersagen zu generieren, legen Sie als Hinweis auf die Abfrage-Engine fest.For example, when using the R predict function with a model to generate new predictions, set @parallel = 1 as a hint to the query engine. Wenn die Abfrage parallelisiert werden kann, werden die Zeilen entsprechend der MAXDOP -Einstellung verteilt.If the query can be parallelized, rows are distributed according to the MAXDOP setting.

  • Bei R-Skripts, die revoscaler-Funktionen verwenden, wird die parallele Verarbeitung automatisch verarbeitet @parallel = 1 , und Sie sollten nicht für den sp_execute_external_script -Befehl angeben.For R scripts that use RevoScaleR functions, parallel processing is handled automatically and you should not specify @parallel = 1 to the sp_execute_external_script call.

[ @params = N'@parameter_name data_type [ OUT | OUTPUT ] [ ,...n ]' ]Eine Liste der Eingabeparameter Deklarationen, die im externen Skript verwendet werden.[ @params = N'@parameter_name data_type [ OUT | OUTPUT ] [ ,...n ]' ] A list of input parameter declarations that are used in the external script.

[ @parameter1 = 'value1' [ OUT | OUTPUT ] [ ,...n ] ]Eine Liste von Werten für die Eingabeparameter, die vom externen Skript verwendet werden.[ @parameter1 = 'value1' [ OUT | OUTPUT ] [ ,...n ] ] A list of values for the input parameters used by the external script.

BemerkungenRemarks

Wichtig

Die Abfrage Struktur wird von SQL ServerSQL Server gesteuert, und Benutzer können keine beliebigen Vorgänge für die Abfrage ausführen.The query tree is controlled by SQL ServerSQL Server and users cannot perform arbitrary operations on the query.

Verwenden Sie sp_execute_external_script , um in einer unterstützten Sprache geschriebene Skripts auszuführen.Use sp_execute_external_script to execute scripts written in a supported language. Unterstützte Sprachen sind python und R , die mit Machine Learning Services verwendet werden, sowie alle Sprachen, die mit Spracherweiterungen für die Erstellung externer Sprache (z. b. Java) definiert sind.Supported languages are Python and R used with Machine Learning Services, and any language defined with CREATE EXTERNAL LANGUAGE (for example, Java) used with Language Extensions.

Verwenden Sie sp_execute_external_script , um in einer unterstützten Sprache geschriebene Skripts auszuführen.Use sp_execute_external_script to execute scripts written in a supported language. Unterstützte Sprachen sind python und R in SQL Server 2017 Machine Learning Services.Supported languages are Python and R in SQL Server 2017 Machine Learning Services.

Verwenden Sie sp_execute_external_script , um in einer unterstützten Sprache geschriebene Skripts auszuführen.Use sp_execute_external_script to execute scripts written in a supported language. Die einzige unterstützte Sprache ist r in SQL Server 2016 r-Diensten.The only supported language is R in SQL Server 2016 R Services.

Standardmäßig werden Resultsets, die von dieser gespeicherten Prozedur zurückgegeben werden, mit unbenannten Spalten ausgegeben.By default, result sets returned by this stored procedure are output with unnamed columns. Spaltennamen, die in einem Skript verwendet werden, sind für die Skript Umgebung lokal und werden im Ausgabe Ergebnissatz nicht wiedergegeben.Column names used within a script are local to the scripting environment and are not reflected in the outputted result set. Verwenden Sie die WITH RESULT SET -Klausel von EXECUTE, um Resultsetspalten zu benennen.To name result set columns, use the WITH RESULT SET clause of EXECUTE.

Zusätzlich zum Zurückgeben eines Resultsets können Sie skalare Werte mithilfe von SQL ServerSQL Server Output-Parametern an zurückgeben.In addition to returning a result set, you can return scalar values to SQL ServerSQL Server by using OUTPUT parameters.

Sie können die Ressourcen steuern, die von externen Skripts verwendet werden, indem Sie einen externen Ressourcenpool konfigurieren.You can control the resources used by external scripts by configuring an external resource pool. Weitere Informationen finden Sie unter CREATE EXTERNAL RESOURCE POOL (Transact-SQL).For more information, see CREATE EXTERNAL RESOURCE POOL (Transact-SQL). Informationen über die Arbeitsauslastung können aus den Katalog Sichten der Ressourcenkontrolle, den DMV-und-Leistungsindikatoren abgerufen werden.Information about the workload can be obtained from the resource governor catalog views, DMV's, and counters. Weitere Informationen finden Sie unter Resource Governor Katalog Sichten (Transact-SQL-), Resource Governor zugehörige dynamische Verwaltungs Sichten (Transact-SQL-)und SQL Server externen Scripts-Objekts.For more information, see Resource Governor Catalog Views (Transact-SQL), Resource Governor Related Dynamic Management Views (Transact-SQL), and SQL Server, External Scripts Object.

Überwachen der SkriptausführungMonitor script execution

Überwachen Sie die Skriptausführung mit sys. dm_external_script_requests und sys. dm_external_script_execution_stats.Monitor script execution using sys.dm_external_script_requests and sys.dm_external_script_execution_stats.

Parameter für die Partitions ModellierungParameters for partition modeling

Sie können zwei zusätzliche Parameter festlegen, die das Modellieren von partitionierten Daten ermöglichen. Partitionen basieren auf einer oder mehreren Spalten, die Sie bereitstellen, die auf natürliche Weise ein Dataset in logische Partitionen segmentieren, die nur während der Skriptausführung erstellt und verwendet werden.You can set two additional parameters that enable modeling on partitioned data, where partitions are based on one or more columns you provide that naturally segment a data set into logical partitions created and used only during script execution. Spalten mit sich wiederholenden Werten für Alter, Geschlecht, geografische Region, Datum oder Uhrzeit sind einige Beispiele, die partitionierten DataSets verleihen.Columns containing repeating values for age, gender, geographic region, date or time, are a few examples that lend themselves to partitioned data sets.

Die beiden Parameter sind input_data_1_partition_by_columns und input_data_1_order_by_columns, wobei der zweite Parameter verwendet wird, um das Resultset zu sortieren.The two parameters are input_data_1_partition_by_columns and input_data_1_order_by_columns, where the second parameter is used to order the result set. Die Parameter werden als Eingaben an, sp_execute_external_script wobei das externe Skript einmal für jede Partition ausgeführt wird.The parameters are passed as inputs to sp_execute_external_script with the external script executing once for every partition. Weitere Informationen und Beispiele finden Sie unter Tutorial: Erstellen von Partitions basierten Modellen.For more information and examples, see Tutorial: Create partition-based models.

Sie können das Skript parallel ausführen, indem @parallel=1Sie angeben.You can execute script in parallel by specifying @parallel=1. Wenn die Eingabe Abfrage parallelisiert werden kann, sollten Sie als @parallel=1 Teil ihrer Argumente auf sp_execute_external_scriptfestlegen.If the input query can be parallelized, you should set @parallel=1 as part of your arguments to sp_execute_external_script. Standardmäßig arbeitet der Abfrageoptimierer unter @parallel=1 Tabellen mit mehr als 256 Zeilen, aber wenn Sie diesen explizit behandeln möchten, enthält dieses Skript den Parameter als Demonstration.By default, the query optimizer operates under @parallel=1 on tables having more than 256 rows, but if you want to handle this explicitly, this script includes the parameter as a demonstration.

Tipp

Für Trainingsworkloads können Sie @parallel mit einem beliebigen arbiträren Trainingsskript verwenden, sogar solche, die nicht von Microsoft stammende RX-Algorithmen verwendenFor training workoads, you can use @parallel with any arbitrary training script, even those using non-Microsoft-rx algorithms. In der Regel bieten nur RevoScaleR-Algorithmen (mit dem RX-Präfix) Parallelität in Trainingsszenarios in SQL Server.Typically, only RevoScaleR algorithms (with the rx prefix) offer parallelism in training scenarios in SQL Server. Mit den neuen Parametern in SQL Server vNext können Sie jedoch ein Skript parallelisieren, das Funktionen aufruft, die nicht speziell mit dieser Funktion entwickelt wurden.But with the new parameters in SQL Server vNext, you can parallelize a script that calls functions not specifically engineered with that capability.

Streaming-Ausführung für python-und R-SkriptsStreaming execution for Python and R scripts

Streaming ermöglicht das Python-oder R-Skript, mit mehr Daten zu arbeiten, als in den Arbeitsspeicher passen.Streaming allows the Python or R script to work with more data than can fit in memory. Geben Sie @r_rowsPerRead in der @params -Auflistung einen ganzzahligen Wert für den-Parameter an, um die Anzahl der beim Streaming übergebenen Zeilen zu steuern.To control the number of rows passed during streaming, specify an integer value for the parameter, @r_rowsPerRead in the @params collection. Wenn Sie z. b. ein Modell trainieren, das sehr große Daten verwendet, können Sie den Wert so anpassen, dass weniger Zeilen gelesen werden, um sicherzustellen, dass alle Zeilen in einem Daten Segment gesendet werden können.For example, if you are training a model that uses very wide data, you could adjust the value to read fewer rows, to ensure that all rows can be sent in one chunk of data. Sie können diesen Parameter auch verwenden, um die Anzahl der Zeilen zu verwalten, die gleichzeitig gelesen und verarbeitet werden, um Probleme mit der Serverleistung zu verringern.You might also use this parameter to manage the number of rows being read and processed at one time, to mitigate server performance issues.

Sowohl der @r_rowsPerRead Parameter für das Streaming als @parallel auch das-Argument sollten als Hinweise angesehen werden.Both the @r_rowsPerRead parameter for streaming and the @parallel argument should be considered hints. Damit der Hinweis angewendet wird, muss es möglich sein, einen SQL-Abfrageplan zu generieren, der die parallele Verarbeitung einschließt.For the hint to be applied, it must be possible to generate a SQL query plan that includes parallel processing. Wenn dies nicht möglich ist, kann die parallele Verarbeitung nicht aktiviert werden.If this is not possible, parallel processing cannot be enabled.

Hinweis

Streaming und parallele Verarbeitung werden nur in der Enterprise Edition unterstützt.Streaming and parallel processing are supported only in Enterprise Edition. Sie können die Parameter in den Abfragen in der Standard Edition einschließen, ohne einen Fehler zu erhalten, aber die Parameter haben keine Auswirkung, und R-Skripts werden in einem einzelnen Prozess ausgeführt.You can include the parameters in your queries in Standard Edition without raising an error, but the parameters have no effect and R scripts run in a single process.

BeschränkungenRestrictions

DatentypenData types

Die folgenden Datentypen werden nicht unterstützt, wenn Sie in der Eingabe Abfrage oder den Parametern sp_execute_external_script Prozedur verwendet werden, und es wird ein nicht unterstützter Typfehler zurückgegeben.The following data types are not supported when used in the input query or parameters of sp_execute_external_script procedure, and return an unsupported type error.

Um dieses Problem zu umgehen, wandeln Sie die Spalte oder den Wert in Transact-SQLTransact-SQL einen unterstützten Typ um, bevor Sie Sie an das externe Skript senden.As a workaround, CAST the column or value to a supported type in Transact-SQLTransact-SQL before sending it to the external script.

  • Handcursor

  • timestamptimestamp

  • datetime2, DateTimeOffset, Zeitdatetime2, datetimeoffset, time

  • sql_variantsql_variant

  • Text, Bildtext, image

  • basixml

  • hierarchyid, Geometrie, Geografiehierarchyid, geometry, geography

  • Benutzerdefinierte CLR-TypenCLR user-defined types

Im Allgemeinen wird jedes Resultset, das einem Transact-SQLTransact-SQL Datentyp nicht zugeordnet werden kann, als NULL ausgegeben.In general, any result set that cannot be mapped to a Transact-SQLTransact-SQL data type, is output as NULL.

Spezifische Einschränkungen für RRestrictions specific to R

Wenn die Eingabe DateTime -Werte enthält, die nicht in den zulässigen Wertebereich in R passen, werden die Werte in nakonvertiert.If the input includes datetime values that do not fit the permissible range of values in R, values are converted to NA. Dies ist erforderlich, SQL ServerSQL Server da einen größeren Bereich von Werten zulässt, als in der Sprache R unterstützt werden.This is required because SQL ServerSQL Server permits a larger range of values than is supported in the R language.

Float-Werte ( +Infz. b -Inf. NaN,,) werden in SQL ServerSQL Server nicht unterstützt, obwohl beide Sprachen IEEE 754 verwenden.Float values (for example, +Inf, -Inf, NaN) are not supported in SQL ServerSQL Server even though both languages use IEEE 754. Aktuelles Verhalten sendet die Werte lediglich direkt SQL ServerSQL Server an. Folglich löst der SQL-Client in einen Management StudioManagement Studio Fehler aus.Current behavior just sends the values to SQL ServerSQL Server directly; as a result, the SQL client in Management StudioManagement Studio throws an error. Daher werden diese Werte in nullkonvertiert.Therefore, these values are converted to NULL.

BerechtigungenPermissions

Erfordert die Berechtigung zum Ausführen beliebiger externer Skript Datenbanken.Requires EXECUTE ANY EXTERNAL SCRIPT database permission.

BeispieleExamples

Dieser Abschnitt enthält Beispiele dafür, wie diese gespeicherte Prozedur zum Ausführen von R-oder python-Skripts mit Transact-SQLTransact-SQLverwendet werden kann.This section contains examples of how this stored procedure can be used to execute R or Python scripts using Transact-SQLTransact-SQL.

A.A. Zurückgeben eines R-Datasets auf SQL ServerReturn an R data set to SQL Server

Im folgenden Beispiel wird eine gespeicherte Prozedur erstellt, die sp_execute_external_script verwendet, um das in R enthaltene IRIS- SQL ServerSQL ServerDataSet in zurückzugeben.The following example creates a stored procedure that uses sp_execute_external_script to return the Iris dataset included with R to SQL ServerSQL Server.

DROP PROC IF EXISTS get_iris_dataset;  
go  
CREATE PROC get_iris_dataset
AS  
BEGIN  
 EXEC   sp_execute_external_script  
       @language = N'R'  
     , @script = N'iris_data <- iris;'
     , @input_data_1 = N''  
     , @output_data_1_name = N'iris_data'
     WITH RESULT SETS (("Sepal.Length" float not null,   
           "Sepal.Width" float not null,  
        "Petal.Length" float not null,   
        "Petal.Width" float not null, "Species" varchar(100)));  
END;
GO

B.B. Generieren eines R-Modells auf der Grundlage von Daten aus SQL ServerGenerate an R model based on data from SQL Server

Im folgenden Beispiel wird eine gespeicherte Prozedur erstellt, die sp_execute_external_script verwendet, um ein Iris-Modell zu generieren SQL ServerSQL Serverund das Modell an zurückzugeben.The following example creates a stored procedure that uses sp_execute_external_script to generate an iris model and return the model to SQL ServerSQL Server.

Hinweis

Für dieses Beispiel ist eine vorab Installation des e1071-Pakets erforderlich.This example requires advance installation of the e1071 package. Weitere Informationen finden Sie unter Installieren zusätzlicher R-Pakete auf SQL Server.For more information, see Install additional R packages on SQL Server.

DROP PROC IF EXISTS generate_iris_model;
GO
CREATE PROC generate_iris_model
AS
BEGIN
 EXEC sp_execute_external_script  
      @language = N'R'  
     , @script = N'  
          library(e1071);  
          irismodel <-naiveBayes(iris_data[,1:4], iris_data[,5]);  
          trained_model <- data.frame(payload = as.raw(serialize(irismodel, connection=NULL)));  
'  
     , @input_data_1 = N'select "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species" from iris_data'  
     , @input_data_1_name = N'iris_data'  
     , @output_data_1_name = N'trained_model'  
    WITH RESULT SETS ((model varbinary(max)));  
END;
GO

Um ein ähnliches Modell mithilfe von Python zu generieren, ändern Sie die Sprachen-ID von @language=N'R' zu @language = N'Python' und nehmen die notwendigen Änderungen im @script-Argument vor.To generate a similar model using Python, you would change the language identifier from @language=N'R' to @language = N'Python', and make necessary modifications to the @script argument. Alle anderen Parameter funktionieren genauso wie bei R.Otherwise, all parameters function the same way as for R.

C.C. Erstellen eines Python-Modells und Generieren von Bewertungen darausCreate a Python model and generate scores from it

Dieses Beispiel veranschaulicht, wie Sie „sp_execute_external_script“ verwenden, um Bewertungen in einem einfachen Python-Modell zu generieren.This example illustrates how to use sp_execute_external_script to generate scores on a simple Python model.

CREATE PROCEDURE [dbo].[py_generate_customer_scores]
AS
BEGIN

-- Input query to generate the customer data
DECLARE @input_query NVARCHAR(MAX) = N'SELECT customer, orders, items, cost FROM dbo.Sales.Orders'

EXEC sp_execute_external_script @language = N'Python', @script = N'
import pandas as pd
from sklearn.cluster import KMeans

# Get data from input query
customer_data = my_input_data

# Define the model
n_clusters = 4
est = KMeans(n_clusters=n_clusters, random_state=111).fit(customer_data[["orders","items","cost"]])
clusters = est.labels_
customer_data["cluster"] = clusters

OutputDataSet = customer_data
'
, @input_data_1 = @input_query
, @input_data_1_name = N'my_input_data'
WITH RESULT SETS (("CustomerID" int, "Orders" float,"Items" float,"Cost" float,"ClusterResult" float));
END;
GO

Spaltenüberschriften, die im Python-Code verwendet werden, werden nicht in SQL Server ausgegeben. Verwenden Sie daher die with result-Anweisung, um die Spaltennamen und Datentypen anzugeben, die von SQL verwendet werden sollen.Column headings used in Python code are not output to SQL Server; therefore, use the WITH RESULT statement to specify the column names and data types for SQL to use.

Zur Bewertung können Sie auch die native PREDICT-Funktion verwenden, die in der Regel schneller ist, weil sie die Python- bzw. R-Laufzeit nicht aufrufen muss.For scoring, you can also use the native PREDICT function, which is typically faster because it avoids calling the Python or R runtime.

Weitere InformationenSee also