Python-språktillägg i SQL Server Machine Learning Services

Gäller för: SQL Server 2017 (14.x) och senare versioner

I den här artikeln beskrivs Python-tillägget för att köra externa Python-skript med SQL Server Machine Learning Services. Tillägget lägger till:

  • En Python-körningsmiljö
  • Anaconda-distribution med Python 3.5-körning och tolk
  • Standardbibliotek och -verktyg
  • Microsoft Python-paket:

Installationen av Python 3.5-körningen och tolken säkerställer nästan fullständig kompatibilitet med python-standardlösningar. Python körs i en separat process från SQL Server för att garantera att databasåtgärder inte komprometteras.

Python-komponenter

SQL Server innehåller både paket med öppen källkod och proprietära paket. Python-körningen som installeras av installationsprogrammet är Anaconda 4.2 med Python 3.5. Python-körningen installeras oberoende av SQL-verktyg och körs utanför kärnmotorprocesser i utökningsramverket. Som en del av installationen av Machine Learning Services med Python måste du godkänna villkoren i GNU Public License.

SQL Server ändrar inte python-körbara filer, men du måste använda den version av Python som installerats av installationsprogrammet eftersom den versionen är den som de egna paketen skapas och testas på. En lista över paket som stöds av Anaconda-distributionen finns på Continuum Analytics-webbplatsen: Anaconda-paketlistan.

Anaconda-distributionen som är associerad med en specifik databasmotorinstans finns i mappen som är associerad med instansen. Om du till exempel har installerat SQL Server 2017-databasmotorn med Machine Learning Services och Python på standardinstansen tittar du under C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES.

Python-paket som lagts till av Microsoft för parallella och distribuerade arbetsbelastningar innehåller följande bibliotek.

Bibliotek Description
revoscalepy Stöder datakällans objekt och datautforskning, manipulering, transformering och visualisering. Den stöder skapande av fjärrberäkningskontexter samt olika skalbara maskininlärningsmodeller, till exempel rxLinMod. Mer information finns i revoscalepy-modulen med SQL Server.
microsoftml Innehåller maskininlärningsalgoritmer som har optimerats för hastighet och noggrannhet, samt in-line transformationer för att arbeta med text och bilder. Mer information finns i microsoftml-modulen med SQL Server.

Microsoftml och revoscalepy är tätt kopplade; datakällor som används i microsoftml definieras som revoscalepy-objekt. Beräkningskontextbegränsningar vid revoscalepy-överföring till microsoftml. Det vill säga att alla funktioner är tillgängliga för lokala åtgärder, men för att växla till en fjärrberäkningskontext krävs RxInSqlServer.

Använda Python i SQL Server

Du importerar modulen revoscalepy till Python-koden och anropar sedan funktioner från modulen, precis som andra Python-funktioner.

Datakällor som stöds är ODBC-databaser, SQL Server- och XDF-filformat för att utbyta data med andra källor eller med R-lösningar. Indata för Python måste vara tabellbaserade. Alla Python-resultat måste returneras i form av en Pandas-dataram .

Beräkningskontexter som stöds är lokala eller fjärranslutna SQL Server-beräkningskontexter. En fjärrberäkningskontext refererar till kodkörning som startar på en dator, till exempel en arbetsstation, men som sedan växlar skriptkörning till en fjärrdator. Om du byter beräkningskontext måste båda systemen ha samma revoscalepy-bibliotek.

Den lokala beräkningskontexten omfattar som förväntat körning av Python-kod på samma server som databasmotorinstansen, med kod i T-SQL eller inbäddad i en lagrad procedur. Du kan också köra koden från en lokal Python IDE och låta skriptet köras på SQL Server-datorn genom att definiera en fjärrberäkningskontext.

Körningsarkitektur

Följande diagram visar interaktionen mellan SQL Server-komponenter och Python-körningen i vart och ett av de scenarier som stöds: köra skript i databasen och fjärrkörning från en Python-terminal med hjälp av en SQL Server-beräkningskontext.

Python-skript som körs i databasen

När du kör Python "inuti" SQL Server måste du kapsla in Python-skriptet i en särskild lagrad procedur , sp_execute_external_script.

När skriptet har bäddats in i den lagrade proceduren kan alla program som kan göra ett lagrat proceduranrop initiera körningen av Python-koden. Därefter hanterar SQL Server kodkörning enligt sammanfattningen i följande diagram.

script-in-db-python

  1. En begäran för Python-körmiljö anges av parametern @language='Python' som skickas till den lagrade proceduren. SQL Server skickar den här begäran till launchpad-tjänsten. På Linux använder SQL en launchpad-tjänst för att kommunicera med en separat launchpad-process för varje användare. Mer information finns i arkitekturdiagrammet Utökningsbarhet .
  2. Launchpad-tjänsten startar lämpligt startprogram; i det här fallet PythonLauncher.
  3. PythonLauncher startar den externa Python35-processen.
  4. BxlServer koordinerar med Python-körningen för att hantera datautbyten och lagring av arbetsresultat.
  5. SQL Satellite hanterar kommunikation om relaterade uppgifter och processer med SQL Server.
  6. BxlServer använder SQL Satellite för att kommunicera status och resultat till SQL Server.
  7. SQL Server hämtar resultat och stänger relaterade uppgifter och processer.

Python-skript som körs från en fjärrklient

Du kan köra Python-skript från en fjärrdator, till exempel en bärbar dator, och låta dem köras i kontexten för SQL Server-datorn, om dessa villkor uppfylls:

  • Du utformar skripten på rätt sätt
  • Fjärrdatorn har installerat utökningsbiblioteken som används av Machine Learning Services. Revoscalepy-paketet krävs för att använda fjärrberäkningskontexter.

Följande diagram sammanfattar det övergripande arbetsflödet när skript skickas från en fjärrdator.

remote-sqlcc-from-python

  1. För funktioner som stöds i revoscalepy anropar Python-körningen en länkfunktion som i sin tur anropar BxlServer.
  2. BxlServer ingår i Machine Learning Services (In-Database) och körs i en separat process från Python-körningen.
  3. BxlServer avgör anslutningsmålet och initierar en anslutning med HJÄLP av ODBC och skickar autentiseringsuppgifter som anges som en del av anslutningssträngen i Python-skriptet.
  4. BxlServer öppnar en anslutning till SQL Server-instansen.
  5. När en extern skripttid anropas aktiveras launchpad-tjänsten, vilket i sin tur startar den lämpade startmodulen: i det här fallet PythonLauncher.dll. Därefter hanteras bearbetningen av Python-kod i ett arbetsflöde som liknar det när Python-kod anropas från en lagrad procedur i T-SQL.
  6. PythonLauncher anropar instansen av Python som är installerad på SQL Server-datorn.
  7. Resultaten returneras till BxlServer.
  8. SQL Satellite hanterar kommunikation med SQL Server och rensning av relaterade jobbobjekt.
  9. SQL Server skickar tillbaka resultaten till klienten.

Nästa steg