Megosztás a következőn keresztül:


A Python és az R ismert problémái az SQL Server Machine Learning Servicesben

A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók

Fontos

A Machine Learning Server (korábbi nevén R Server) támogatása 2022. július 1-jén megszűnt. További információ: Mi történik a Machine Learning Serverrel?

Ez a cikk az SQL Server Machine Learning Servicesben és az SQL Server 2016 R Servicesben biztosított Python- és R-összetevőkkel kapcsolatos ismert problémákat vagy korlátozásokat ismerteti.

Beállítási és konfigurációs problémák

A kezdeti beállítással és konfigurációval kapcsolatos folyamatok leírását az SQL Server Machine Learning Services telepítése című témakörben talál. Információkat tartalmaz a frissítésekről, a párhuzamos telepítésről és az új R- vagy Python-összetevők telepítéséről.

Inkonzisztens eredmények MKL-számításokban hiányzó környezeti változó miatt

A következőkre vonatkozik: R_SERVER bináris fájlok 9.0, 9.1, 9.2 vagy 9.3.

R_SERVER az Intel Math Kernel Könyvtárat (MKL) használja. Az MKL-t érintő számítások esetén következetlen eredmények fordulhatnak elő, ha a rendszer hiányzik egy környezeti változóból.

Állítsa be a környezeti változót 'MKL_CBWR'=AUTO , hogy biztosítsa a feltételes numerikus reprodukálhatóságot R_SERVER. További információ: Bevezetés a feltételes numerikus reprodukálhatóság (CNR) használatába.

Megoldás

  1. A Vezérlőpulton válassza a Rendszer és biztonság>Rendszer>Speciális rendszerbeállítások>Környezeti változók lehetőséget.

  2. Hozzon létre egy új felhasználói vagy rendszerváltozót.

    • A változó értékét állítsa MKL_CBWR-re.
    • Állítsa be az értéket a következőre AUTO: .
  3. Indítsa újra R_SERVER. Az SQL Serveren újraindíthatja az SQL Server Launchpad szolgáltatást.

Megjegyzés:

Ha a Linux rendszeren futó SQL Server 2019 (15.x) verziót használja, szerkessze vagy hozza létre a .bash_profile fájlt a felhasználói kezdőkönyvtárában, és adja hozzá a következő sort: export MKL_CBWR="AUTO". Hajtsa végre ezt a fájlt egy bash parancssorba való beírással source .bash_profile . Indítsa újra R_SERVER az R parancssorba való beírással Sys.getenv() .

R-szkript futásidejű hibája (SQL Server 2017 CU 5 – CU 7 regresszió)

Sql Server 2017 (14.x) esetén az 5–7. kumulatív frissítésekben regresszió van a rlauncher.config fájlban, ahol az ideiglenes könyvtár elérési útja szóközt tartalmaz. Ez a regresszió a CU 8-ban van javítva.

Az R-szkript futtatásakor megjelenő hiba a következő üzeneteket tartalmazza:

Nem lehet kommunikálni az "R" szkript futtatókörnyezetével. Ellenőrizze az "R" futtatókörnyezet követelményeit.

STDERR-üzenet(ek) külső szkriptből:

Végzetes hiba: nem hozható létre "R_TempDir"

Megoldás

Amikor elérhetővé válik, alkalmazza a CU 8-at. Másik lehetőségként újra létrehozhatja rlauncher.config, ha rendszergazda jogú parancssorban futtatja a registerrext parancsot az eltávolítás/telepítés végrehajtásával.

<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /uninstall /sqlbinnpath:<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>

<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRExt.exe /install /sqlbinnpath:<SQLInstanceBinnPath> /userpoolsize:0 /instance:<SQLInstanceName>

Az alábbi példa a "MSSQL14.MSSQLSERVER" alapértelmezett példányhoz tartozó parancsokat mutatja be, amelyek telepítve vannak a következő helyre: C:\Program Files\Microsoft SQL Server\.

"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /uninstall /sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0 /instance:MSSQLSERVER

"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64\RegisterRext.exe" /install /sqlbinnpath:"C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn" /userpoolsize:0 /instance:MSSQLSERVER

Az SQL Server gépi tanulási funkciói nem telepíthetők tartományvezérlőre

Ha az SQL Server 2016 (13.x) R Servicest vagy az SQL Server Machine Learning Servicest próbálja tartományvezérlőre telepíteni, a telepítés sikertelen lesz, a következő hibákkal:

Hiba történt a funkció beállítási folyamata során

Nem található identitással rendelkező csoport

Összetevő hibakódja: 0x80131509

A hiba azért fordul elő, mert egy tartományvezérlőn a szolgáltatás nem tudja létrehozni a gépi tanulás futtatásához szükséges 20 helyi fiókot. Általában nem javasoljuk az SQL Server tartományvezérlőre való telepítését. További információ: Támogatási közlemény 2032911.

A legújabb szolgáltatáskiadás telepítése a Microsoft R-ügyféllel való kompatibilitás biztosítása érdekében

Ha telepíti a Microsoft R-ügyfél legújabb verzióját, és az R futtatására használja az SQL Serveren távoli számítási környezetben, az alábbihoz hasonló hibaüzenet jelenhet meg:

A Microsoft R-ügyfél 9.x.x verzióját futtatja a számítógépen, amely nem kompatibilis a Microsoft R Server 8.x.x-es verziójával. Töltsön le és telepítsen egy kompatibilis verziót.

Az SQL Server 2016 (13.x) megköveteli, hogy az ügyfél R-kódtárai pontosan egyezzenek a kiszolgálón lévő R-kódtárakval. A korlátozást az R Server 9.0.1-nél későbbi kiadásokra eltávolítottuk. Ha azonban ez a hiba jelentkezik, ellenőrizze az ügyfél és a kiszolgáló által használt R-kódtárak verzióját, és szükség esetén frissítse az ügyfelet a kiszolgáló verziójának megfelelően.

Az SQL Server R Services szolgáltatással telepített R verziója minden alkalommal frissül, amikor egy SQL Server-szolgáltatás kiadása telepítve van. Annak érdekében, hogy mindig az R-összetevők legfrissebb verzióival rendelkezzen, mindenképpen telepítse az összes szervizcsomagot.

Hibaüzenet jelenhet meg az R Server 8.0.3 SQL Server 2016-on való futtatásakor: You are running version 9.0.0 of Microsoft R client on your computer, which is incompatible with the Microsoft R server version 8.0.3. Download and install a compatible version. Az ALÁBBI javítások biztosítják a Microsoft R Client 9.0.0-val való kompatibilitást az SQL Server 2016-ban:

Az R-csomagokkal kapcsolatos problémák elkerülése érdekében frissítheti a kiszolgálón telepített R-kódtárak verzióját is, ha módosítja a karbantartási szerződést a modern életciklus-támogatási szabályzat használatára a következő szakaszban leírtak szerint. Ha így tesz, az SQL Serverrel telepített R verziója a Machine Learning Server (korábbi nevén Microsoft R Server) frissítéséhez használt ütemezés szerint frissül.

A következőkre vonatkozik: SQL Server 2016 (13.x) R Services, az R Server 9.0.0-s vagy korábbi verziójával

Az SQL Server 2017 CU 3 beállításából hiányzó R-összetevők

Korlátozott számú Azure-beli virtuális gép lett kiépítve az SQL Serverhez tartozó R telepítési fájlok nélkül. A probléma a 2018.01.05. és 2018. 01. 23. közötti időszakban kiépített virtuális gépekre vonatkozik. Ez a probléma a helyszíni telepítéseket is érintheti, ha a 2018.01. és 2018. 01. 23. közötti időszakban alkalmazta az SQL Server 2017 CU 3 frissítését (14.x).

Rendelkezésre áll egy szolgáltatáskiadás, amely tartalmazza az R telepítési fájljainak megfelelő verzióját.

Az összetevők telepítéséhez és az SQL Server 2017 (14.x) CU 3 javításához el kell távolítania a CU 3-at, és újra kell telepítenie a frissített verziót:

  1. Töltse le a frissített CU 3 telepítőfájlt, amely tartalmazza az R-telepítőket.
  2. Távolítsa el a CU 3-at. A Vezérlőpulton keressen Frissítés eltávolítása, majd válassza a "Hotfix 3015 for SQL Server 2017 (KB4052987) (64-bit)" lehetőséget. Folytassa az eltávolítási lépésekkel.
  3. Telepítse újra a CU 3 frissítést, ha duplán kattint a letöltött KB4052987 frissítésére: SQLServer2017-KB4052987-x64.exe. Kövesse a telepítési utasításokat.

A Python-összetevők nem telepíthetők az SQL Server 2017 vagy újabb verziójának offline telepítéseibe

Ha az SQL Server 2017 (14.x) előzetes verzióját internet-hozzáféréssel nem rendelkező számítógépre telepíti, előfordulhat, hogy a telepítő nem tudja megjeleníteni azt a lapot, amely a letöltött Python-összetevők helyét kéri. Ilyen esetben telepítheti a Machine Learning Services szolgáltatást, a Python-összetevőket azonban nem.

Ezt a problémát a kiadási verzióban kijavítottuk. Ez a korlátozás az R-összetevőkre sem vonatkozik.

A következőkre vonatkozik: SQL Server 2017 (14.x) Pythonnal

Figyelmeztetés az inkompatibilis verzióról, ha az SQL Server R Services egy korábbi verziójához csatlakozik egy ügyfélről az SQL Server 2017 használatával

Amikor R-kódot futtat egy SQL Server 2016 (13.x) számítási környezetben, a következő hibaüzenet jelenhet meg:

A Microsoft R-ügyfél 9.0.0-s verzióját futtatja a számítógépén, amely nem kompatibilis a Microsoft R Server 8.0.3-s verziójával. Töltsön le és telepítsen egy kompatibilis verziót.

Ez az üzenet akkor jelenik meg, ha az alábbi két állítás valamelyike igaz:

Annak biztosítása érdekében, hogy a kiszolgáló és az ügyfél ugyanazt a verziót használják, szükség lehet a Microsoft R Server 9.0-s és újabb kiadásaihoz támogatott kötés alkalmazására, hogy frissíthesse az R-összetevőket az SQL Server 2016 (13.x) példányokban. Annak megállapításához, hogy az R-szolgáltatások verziójához elérhető-e a frissítések támogatása, olvassa el az R Services egy példányának frissítése SqlBindR.exe.

A következőkre vonatkozik: SQL Server 2016 (13.x) R Services, az R Server 9.0.0-s vagy korábbi verziójával

Előfordulhat, hogy az SQL Server 2016 szolgáltatáskiadásainak telepítése nem sikerül telepíteni az R-összetevők újabb verzióit

Ha kumulatív frissítést telepít vagy szervizcsomagot telepít az SQL Server 2016-hoz (13.x) egy olyan számítógépre, amely nem csatlakozik az internethez, előfordulhat, hogy a telepítővarázsló nem tudja megjeleníteni azt a kérést, amely lehetővé teszi az R-összetevők frissítését letöltött CAB-fájlok használatával. Ez a hiba általában akkor fordul elő, ha több összetevőt telepítettek az adatbázismotorral együtt.

Áthidaló megoldásként a parancssor használatával telepítheti a szolgáltatás kiadását, és megadhatja a MRCACHEDIRECTORY példában látható argumentumot, amely 1. CU-frissítéseket telepít:

C:\<path to installation media>\SQLServer2016-KB3164674-x64.exe /Action=Patch /IACCEPTROPENLICENSETERMS /MRCACHEDIRECTORY=<path to CU 1 CAB files>

A legújabb telepítők beszerzéséhez lásd: Gépi tanulási összetevők telepítése internet-hozzáférés nélkül.

A következőkre vonatkozik: SQL Server 2016 (13.x) R Services, az R Server 9.0.0-s vagy korábbi verziójával

A Launchpad-szolgáltatások nem indulnak el, ha a verzió eltér az R-verziótól

Ha az SQL Server R Servicest külön telepíti az adatbázismotortól, és a buildverziók eltérnek, a rendszeresemény-naplóban a következő hiba jelenhet meg:

Az SQL Server Launchpad szolgáltatás a következő hiba miatt nem indult el: A szolgáltatás nem válaszolt időben az indítási vagy vezérlési kérésre.

Ez a hiba például akkor fordulhat elő, ha az adatbázismotort a kiadási verzióval telepíti, javítást alkalmaz az adatbázismotor frissítéséhez, majd hozzáadja az R Services szolgáltatást a kiadási verzióval.

A probléma elkerülése érdekében használjon egy segédprogramot, például a File Managert, hogy összehasonlítsa a Launchpad.exe verzióit az SQL bináris fájljainak verziójával, például sqldk.dll. Minden összetevőnek ugyanazzal a verziószámmal kell rendelkeznie. Ha egy összetevőt frissít, mindenképpen alkalmazza ugyanazt a frissítést az összes többi telepített összetevőre.

Keresse meg a Launchpadet a Binn példányhoz tartozó mappában. Az SQL Server 2016 (13.x) alapértelmezett telepítésében például az elérési út lehet C:\Program Files\Microsoft SQL Server\MSSQL.13.InstanceNameMSSQL\Binn.

A távoli számítási környezeteket tűzfal blokkolja az Azure-beli virtuális gépeken futó SQL Server-példányokban

Ha azure-beli virtuális gépen telepítette az SQL Servert, előfordulhat, hogy nem tud olyan számítási környezeteket használni, amelyek a virtuális gép munkaterületének használatát igénylik. Ennek az az oka, hogy az Azure-beli virtuális gépek tűzfala alapértelmezés szerint tartalmaz egy szabályt, amely letiltja a helyi R-felhasználói fiókok hálózati hozzáférését.

Áthidaló megoldásként az Azure-beli virtuális gépen nyissa meg a Windows tűzfalat speciális biztonsággal, válassza a Kimenő szabályok lehetőséget, és tiltsa le a következő szabályt: R helyi felhasználói fiókok hálózati hozzáférésének letiltása az SQL Server MSSQLSERVER-példányában. A szabályt engedélyezve is hagyhatja, de ha biztonságos, módosítsa a biztonsági tulajdonságot Engedélyezés beállításra.

Implicit hitelesítés az SQL Server 2016 Express kiadásban

Ha R-feladatokat futtat egy távoli adatelemzési munkaállomásról integrált Windows-hitelesítéssel, az SQL Server hallgatólagos hitelesítést használ a szkript által esetleg szükséges helyi ODBC-hívások létrehozásához. Ez a funkció azonban nem működött az SQL Server 2016 (13.x) Express kiadás RTM-buildjében.

A probléma megoldásához javasoljuk, hogy frissítsen egy későbbi szolgáltatáskiadásra. Ha a frissítés nem megvalósítható, kerülő megoldásként sql-bejelentkezéssel futtathat olyan távoli R-feladatokat, amelyek beágyazott ODBC-hívásokat igényelhetnek.

A következőkre vonatkozik: SQL Server 2016 (13.x) R Services Express kiadás

Teljesítménykorlátok, ha az SQL Server által használt kódtárakat más eszközökről hívják meg

Az SQL Serverhez telepített gépi tanulási kódtárak meghívhatóak külső alkalmazásból, például RGui-ból. Ez lehet a legkényelmesebb módja bizonyos feladatok elvégzésének, például új csomagok telepítésének vagy ad hoc tesztek futtatásának nagyon rövid kódmintákon. Az SQL Serveren kívül azonban a teljesítmény korlátozott lehet.

Ha például az SQL Server Enterprise kiadását használja, az R egyszálas módban fut, amikor külső eszközökkel futtatja az R-kódot. Az SQL Server teljesítménybeli előnyeinek kihasználásához hozzon létre egy SQL Server-kapcsolatot, és a sp_execute_external_script használatával hívja meg a külső szkript futtatókörnyezetét.

Általában kerülje az SQL Server által használt gépi tanulási kódtárak meghívását külső eszközökről. Ha R- vagy Python-kódot kell hibakeresni, ez általában egyszerűbb az SQL Serveren kívül végezni. Ha ugyanazokat a kódtárakat szeretné beszerezni, amelyek az SQL Serverben találhatók, telepítheti a Microsoft R-ügyfelet vagy az SQL Server 2017 Machine Learning Servert (önálló) is.

Az SQL Server Data Tools nem támogatja a külső szkriptekhez szükséges engedélyeket

Ha a Visual Studio vagy az SQL Server Data Tools használatával tesz közzé egy adatbázisprojektet, ha bármely tag rendelkezik külső szkriptvégrehajtásra vonatkozó engedélyekkel, az alábbihoz hasonló hibaüzenet jelenhet meg:

TSQL-modell: Hiba észlelhető az adatbázis visszafejtésekor. Az engedély nem lett felismerve, és nem lett importálva.

A DACPAC-modell jelenleg nem támogatja az R Services vagy a Machine Learning Services által használt engedélyeket, például GRANT ANY EXTERNAL SCRIPT vagy EXECUTE ANY EXTERNAL SCRIPT. Ez a probléma egy későbbi kiadásban lesz kijavítva.

Kerülő megoldásként futtassa a további GRANT utasításokat egy üzembe helyezés utáni szkriptben.

A külső szkriptek végrehajtása az erőforrás-korlátozás alapértelmezett értékei miatt van korlátozva.

Az Enterprise kiadásban erőforráskészletekkel kezelheti a külső szkriptfolyamatokat. Egyes korai kiadású buildekben az R-folyamatokhoz lefoglalható maximális memória 20 százalék volt. Ezért ha a kiszolgáló 32 GB RAM-mal rendelkezik, az R-végrehajtható fájlok (RTerm.exe és BxlServer.exe) legfeljebb 6,4 GB-ot használhatnak egyetlen kérelemben.

Ha erőforrás-korlátozásokat tapasztal, ellenőrizze az aktuális alapértelmezett értéket. Ha a 20 százalék nem elég, tekintse meg az SQL Server dokumentációját az érték módosításáról.

A következőkre vonatkozik: SQL Server 2016 (13.x) R Services, Enterprise kiadás

Hiba, amikor a sp_execute_external_script-t libc++.so nélküli használata Linuxon történik

Egy olyan tiszta Linux-gépen, amelyen nincs libc++.so telepítve, egy (SPEES)-lekérdezés Java vagy külső nyelv használatával történő futtatása sp_execute_external_script meghiúsul, mert commonlauncher.so nem töltődik be libc++.so.

Például:

EXECUTE sp_execute_external_script @language = N'Java'
    , @script = N'JavaTestPackage.PassThrough'
    , @parallel = 0
    , @input_data_1 = N'select 1'
WITH RESULT SETS((col1 INT NOT NULL));
GO

Ez a következőhöz hasonló üzenettel meghiúsul:

Msg 39012, Level 16, State 14, Line 0

Unable to communicate with the runtime for 'Java' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'Java' runtime.

A mssql-launchpadd naplók az alábbihoz hasonló hibaüzenetet fognak megjeleníteni:

Oct 18 14:03:21 sqlextmls launchpadd[57471]: [launchpad] 2019/10/18 14:03:21 WARNING: PopulateLauncher failed: Library /opt/mssql-extensibility/lib/commonlauncher.so not loaded. Error: libc++.so.1: cannot open shared object file: No such file or directory

Megoldás

A következő áthidaló megoldások egyikét hajthatja végre:

  1. Másolja libc++* -t /opt/mssql/lib az alapértelmezett rendszerútvonalra /lib64

  2. Adja hozzá a következő bejegyzéseket az elérési út felfedéséhez /var/opt/mssql/mssql.conf :

    [extensibility]
    readabledirectories = /opt/mssql
    

A következőkre vonatkozik: SQL Server 2019 (15.x) Linux rendszeren

Telepítési vagy frissítési hiba a FIPS-kompatibilis kiszolgálókon

Ha az SQL Server 2019 -et (15.x) a Machine Learning Services és a Language Extensions szolgáltatással telepíti, vagy frissíti az SQL Server-példányt egy Federal Information Processing Standard (FIPS) kompatibilis kiszolgálón, a következő hibaüzenet jelenik meg:

Hiba történt a bővíthetőségi funkció telepítése közben a következő hibaüzenettel: Az AppContainer létrehozása a NONE hibaüzenettel meghiúsult, állapot Ez az implementáció nem része a Windows Platform FIPS által ellenőrzött titkosítási algoritmusainak.

Megoldás

Tiltsa le a FIPS-t az SQL Server 2019 (15.x) telepítése előtt a Machine Learning Services és a Language Extensions szolgáltatással, vagy frissítse az SQL Server-példányt. A telepítés vagy a frissítés befejezése után újra lehet telepíteni a FIPS-t.

A következőkre vonatkozik: SQL Server 2019 (15.x)

R-kódtárak adott algoritmusokkal, streameléssel vagy particionálással

Probléma

Az alábbi korlátozások az SQL Server 2017 -re (14.x) vonatkoznak a futtatókörnyezet frissítésével. Ez a probléma az Enterprise kiadásra vonatkozik.

  • Párhuzamosság: RevoScaleR és MicrosoftML az algoritmusszál-párhuzamosság forgatókönyvek esetében legfeljebb két szálra korlátozódik.
  • Adatfolyam és particionálás: A T-SQL-hoz átadott @r_rowsPerReadsp_execute_external_script paramétert érintő forgatókönyvek nem kerülnek alkalmazásra.
  • Streamelés és particionálás: RevoScaleR és MicrosoftML adatforrások (azaz ODBC, XDF) nem támogatják a sorok részenkénti olvasását betanítási vagy értékelési folyamatokban. Ezek a forgatókönyvek mindig az összes adatot a memóriába viszik a számításhoz, és a műveletek memóriakorlátot jelentenek

Megoldás

A legjobb megoldás az SQL Server 2019-re (15.x) való frissítés. Másik lehetőségként továbbra is használhatja az SQL Server 2017 -et (14.x) a RegisterRext.exe /configure használatával konfigurált futtatókörnyezet-frissítéssel, miután elvégezte az alábbi feladatokat.

  1. A rendszerleíró adatbázis szerkesztésével hozzon létre egy kulcsot Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\150, majd adjon hozzá egy értéket SharedCode az C:\Program Files\Microsoft SQL Server\150\Shared-es adatokkal, vagy válassza a példány megosztott könyvtárát a konfigurációnak megfelelően.
  2. Hozzon létre egy mappát C:\Program Files\Microsoft SQL Server\150\Shared and copy instapi140.dll a mappából C:\Program Files\Microsoft SQL Server\140\Shared az újonnan létrehozott mappába.
  3. Nevezze át a instapi140.dllinstapi150.dll az új mappába C:\Program Files\Microsoft SQL Server\150\Shared.

Fontos

Ha a fenti lépéseket hajtja végre, manuálisan kell eltávolítania a hozzáadott kulcsot az SQL Server egy későbbi verziójára való frissítés előtt.

A folyamatkészletezés teljesítményproblémái az ML-szolgáltatásokban (R és Python)

Ez a szakasz ismert problémákat és kerülő megoldásokat tartalmaz az ML-szolgáltatások (R és Python) SQL Serverben való használatához.

A folyamatkészletezés hidegindítási teljesítménye az ML-szolgáltatásokban

A végrehajtás sp_execute_external_scriptután a launchpad szolgáltatás olyan műholdas folyamatokat indít el, amelyek elindítják a külső futtatókörnyezeteket, például az R-t és a Pythont. Az indítási költség amortizálásához létrejön egy folyamatkészlet, amely felhasználható a következő végrehajtás során sp_execute_external_script. Ez a folyamatkészlet erre a felhasználóra, adatbázisra és a használt nyelvre (R vagy Python az ML Servicesben) vonatkozik.

Első lekérdezés végrehajtása

A műholdas folyamatokat fel kell melegíteni, amikor sp_execute_external_script első alkalommal vagy tétlen időszak után hajtják végre (a folyamatokat tisztítási feladaton keresztül kell leállítani, ha egy ideig nem használják őket). Az ilyen készletezett folyamatok hidegindítása lassú lehet (például erőforrás-korlátozások miatt).

Megoldás

Ha az első hívás teljesítménye fontos, ajánlott előmelegítve tartani a lekérdezéseket. Egy háttérfeladat például végrehajtható, amely egy egyszerű sp_execute_external_script lekérdezést aktivál a folyamatok lejárta előtt. Az R-lekérdezések melegen tartásához például rendszeresen végrehajthatja a következő lekérdezést.

EXECUTE sp_execute_external_script @language = N'R', @script = N'';
GO

Egyidejű lekérdezések nagy száma

Ha az egyidejű végrehajtások sp_execute_external_script száma magasabb, mint a készlet aktív R/Python-folyamatai, a készlethez további folyamatok hozzáadásának hideg kezdete lassú lehet (például erőforrás-korlátozások miatt).

Megoldás

A skálázási teljesítmény problémájának megoldásához több kérés is kötegelhető (például hurokcsatlakozásokon keresztül, vagy a szkript újraírásával több kérés kezelésére). Emellett valós idejű forgatókönyvek esetén az SQL PREDICT használható.

R-szkript végrehajtásával kapcsolatos problémák

Ez a szakasz az R SQL Serveren való futtatásával kapcsolatos ismert problémákat, valamint a Microsoft által közzétett R-kódtárakhoz és eszközökhöz kapcsolódó néhány problémát tartalmaz, beleértve a RevoScaleR-t is.

Az R-megoldásokat érintő további ismert problémákért tekintse meg a Machine Learning Server webhelyét.

Hozzáférés megtagadva figyelmeztetés, amikor R-szkripteket hajtanak végre SQL Serveren nem alapértelmezett helyen.

Ha az SQL Server példánya nem alapértelmezett helyre lett telepítve, például a Program Files mappán kívülre, akkor a csomagot telepítő szkriptek futtatásakor figyelmeztetés jelenik meg: ACCESS_DENIED. Például:

In normalizePath(path.expand(path), winslash, mustWork) : path[2]="~ExternalLibraries/R/8/1": A hozzáférés megtagadva

Ennek az az oka, hogy egy R-függvény megpróbálja beolvasni az elérési utat, és meghiúsul, ha az SQLRUserGroup beépített felhasználói csoport nem rendelkezik olvasási hozzáféréssel. A megjelenő figyelmeztetés nem blokkolja az aktuális R-szkript végrehajtását, de a figyelmeztetés ismétlődően ismétlődhet, amikor a felhasználó bármilyen más R-szkriptet futtat.

Ha az SQL Servert az alapértelmezett helyre telepítette, ez a hiba nem fordul elő, mert minden Windows-felhasználó olvasási engedélyekkel rendelkezik a Program Files mappában.

Ez a probléma egy közelgő szolgáltatáskiadásban van megoldva. Áthidaló megoldásként adja meg az SQLRUserGroup nevű csoportot olvasási hozzáféréssel az összes szülőmappához ExternalLibraries.

Szerializálási hiba a RevoScaleR régi és új verziói között

Ha szerializált formátumot használó modellt ad át egy távoli SQL Server-példánynak, a következő hibaüzenet jelenhet meg:

Hiba a memDecompress(data, type = decompress) függvényben: belső hiba -3 a memDecompress(2) függvényben.

Ez a hiba akkor jelentkezik, ha a modellt a szerializálási függvény ( rxSerializeModel) legújabb verziójával mentette, de a modell deszerializálását lehetővé tevő SQL Server-példány az SQL Server 2017 (14.x) CU 2-es vagy korábbi verziójával rendelkezik a RevoScaleR API-k régebbi verziójával.

Áthidaló megoldásként frissítheti az SQL Server 2017 (14.x) példányt CU 3 vagy újabb verzióra.

A hiba nem jelenik meg, ha az API-verzió azonos, vagy ha egy régebbi szerializálási függvénnyel mentett modellt helyez át egy olyan kiszolgálóra, amely a szerializálási API újabb verzióját használja.

Más szóval a RevoScaleR ugyanazt a verzióját használja szerializálási és deszerializálási műveletekhez is.

A valós idejű pontozás nem kezeli megfelelően a learningRate paramétert fa- és erdőmodellekben

Ha egy döntési fa vagy döntéserdő módszerrel hoz létre modellt és megadja a tanulási arányt, előfordulhat, hogy inkonzisztens eredményeket tapasztal a sp_rxpredict vagy az SQL PREDICT függvény használatakor, összehasonlítva a rxPredict használatával.

Az ok egy olyan hiba az API-ban, amely szerializált modelleket dolgoz fel, és a learningRate paraméterre korlátozódik: például rxBTrees vagy

Ez a probléma egy közelgő szolgáltatáskiadásban van megoldva.

Az R-feladatok processzor-affinitásának korlátozásai

Az SQL Server 2016 (13.x) kezdeti kiadási buildjében a processzor affinitását csak az első k-csoport processzoraihoz állíthatja be. Ha például a kiszolgáló kétcsatornás gép két k-csoporttal, az R-folyamatokhoz csak az első k-csoport processzorait használja a rendszer. Ugyanez a korlátozás vonatkozik az R-szkriptfeladatok erőforrás-szabályozásának konfigurálására is.

Ez a probléma az SQL Server 2016 (13.x) Service Pack 1 szervizcsomagban van kijavítva. Javasoljuk, hogy frissítsen a legújabb szolgáltatáskiadásra.

A következőkre vonatkozik: SQL Server 2016 (13.x) R Services (RTM-verzió)

Az oszloptípusok módosítása sql serveres számítási környezetben történő adatolvasáskor nem végezhető el

Ha a számítási környezet az SQL Server-példányra van állítva, nem használhatja a colClasses argumentumot (vagy más hasonló argumentumokat) az R-kódban lévő oszlopok adattípusának módosításához.

A következő utasítás például hibát eredményezne, ha a CRSDepTimeStr oszlop még nem egész szám:

data <- RxSqlServerData(
  sqlQuery = "SELECT CRSDepTimeStr, ArrDelay FROM AirlineDemoSmall",
  connectionString = connectionString,
  colClasses = c(CRSDepTimeStr = "integer"))

Áthidaló megoldásként átírhatja az SQL-lekérdezést, hogy CAST vagy CONVERT használatával és a helyes adattípus alkalmazásával mutassa be az adatokat az R-nek. Általánosságban elmondható, hogy a teljesítmény jobb, ha az adatokkal az SQL használatával dolgozik, nem pedig az R-kódban lévő adatok módosításával.

A következőkre vonatkozik: SQL Server 2016 (13.x) R Services

A szerializált modellek méretének korlátai

Amikor egy modellt SQL Server-táblába ment, szerializálnia kell a modellt, és bináris formátumban kell mentenie. Elméletileg az ezzel a módszerrel tárolható modellek maximális mérete 2 GB, ami az SQL Server varbináris oszlopainak maximális mérete.

Ha nagyobb modelleket szeretne használni, a következő áthidaló megoldások érhetők el:

  • Tegyen lépéseket a modell méretének csökkentésére. Egyes nyílt forráskódú R-csomagok nagy mennyiségű információt tartalmaznak a modellobjektumban, és ezek nagy része eltávolítható az üzembe helyezéshez.

  • A funkció kiválasztásával eltávolíthatja a szükségtelen oszlopokat.

  • Ha nyílt forráskódú algoritmust használ, fontolja meg a hasonló implementációt a MicrosoftML vagy a RevoScaleR megfelelő algoritmusával. Ezek a csomagok üzembe helyezési forgatókönyvekhez lettek optimalizálva.

  • A modell észszerűsítése és a méret csökkentése után az előző lépések végrehajtásával ellenőrizze, hogy a memCompress függvény használható-e a modell méretének csökkentésére az SQL Servernek való átadás előtt. Ez a beállítás akkor a legjobb, ha a modell közel van a 2 GB-os korláthoz.

  • Nagyobb modellek esetén az SQL Server FileTable funkciójával tárolhatja a modelleket ahelyett, hogy varbináris oszlopot használna.

    A FileTables használatához tűzfalkivételt kell hozzáadnia, mivel a FileTablesban tárolt adatokat az SQL Server Filestream fájlrendszer-illesztőprogramja kezeli, az alapértelmezett tűzfalszabályok pedig letiltják a hálózati fájlhozzáférést. További információ: A FileTable előfeltételeinek engedélyezése.

    Miután engedélyezte a FileTable-t, hogy megírja a modellt, a FileTable API használatával lekér egy útvonalat az SQL-ből, majd a kódból erre a helyre írja a modellt. Amikor be kell olvasni a modellt, lekérdezi az elérési utat az SQL Serverből, majd a lekérdezett elérési úttal hívja meg a modellt a szkriptből. További információért lásd: Filetáblák elérése fájlbeviteli-kiviteli API-kkal.

Kerülje a munkaterületek törlését, ha R-kódot hajt végre SQL Server számítási környezetben

Ha R-paranccsal törli az objektumok munkaterületét, miközben R-kódot futtat egy SQL Server számítási környezetben, vagy ha a munkaterületet a sp_execute_external_script használatával hívott R-szkript részeként törli, a következő hibaüzenet jelenhet meg: a munkaterület objektumának revoScriptConnection nem található

revoScriptConnection Egy objektum az R-munkaterületen, amely az SQL Serverről hívott R-munkamenetre vonatkozó információkat tartalmazza. Ha azonban az R-kód tartalmaz egy parancsot a munkaterület törléséhez (például rm(list=ls()))az R-munkaterület munkamenetével és egyéb objektumaival kapcsolatos összes információ is törlődik).

Kerülő megoldásként kerülje a változók és egyéb objektumok válogatás nélküli törlését az R SQL Serveren való futtatása során. Bár a munkaterület törlése gyakori az R-konzolon való munka során, nem szándékos következményekkel járhat.

  • Adott változók törléséhez használja az R remove függvényt: például: remove('name1', 'name2', ...)
  • Ha több változót is törölni szeretne, mentse az ideiglenes változók nevét egy listára, és végezzen rendszeres szemétgyűjtést.

Az R-szkript bemeneteként megadható adatok korlátozásai

R-szkriptekben nem használhatja a következő lekérdezési eredmények típusait:

  • AlwaysEncrypted oszlopokra hivatkozó Transact-SQL lekérdezés adatai.

  • Maszkolt oszlopokra hivatkozó Transact-SQL lekérdezés adatai.

    Ha maszkolt adatokat kell használnia egy R-szkriptben, lehetséges megkerülő megoldás, ha egy ideiglenes táblában másolatot készít az adatokról, és ehelyett ezeket az adatokat használja.

A karakterláncok tényezőkként való használata teljesítménycsökkenéshez vezethet

A sztring típusú változók tényezőként való használata jelentősen növelheti az R-műveletekhez használt memória mennyiségét. Ez általánosan ismert probléma az R-vel kapcsolatban, és számos cikk van a témában. Lásd például: A Tényezők nem első osztályú állampolgárok az R-ben, John Mount, R-bloggerek) vagy stringsAsFactors: Jogosulatlan életrajz Roger Pengtől.

Bár a probléma nem az SQL Serverre vonatkozik, nagyban befolyásolhatja az R-kód SQL Serveren való futtatásának teljesítményét. A sztringek általában varcharként vagy nvarcharként vannak tárolva, és ha egy sztringadatoszlop számos egyedi értékkel rendelkezik, a belső átalakítás folyamata egész számokká és vissza sztringekké R-ként akár memóriafoglalási hibákhoz is vezethet.

Ha nem feltétlenül igényel sztring típusú adattípust más műveletekhez, a sztringértékek numerikus (egész szám) adattípusra való leképezése az adatelőkészítés részeként hasznos lehet a teljesítmény és a skálázás szempontjából.

A probléma megvitatásához és egyéb tippekért tekintse meg az R-szolgáltatások teljesítményével – adatoptimalizálással foglalkozó témakört.

Az SQL Server-adatforrások nem támogatják a varsToKeep és a varsToDrop argumentumokat

Ha az rxDataStep függvénnyel adatokat ír egy táblába, a varsToKeep és a varsToDrop használatával megadhatja a művelet részeként belefoglalni vagy kizárni kívánt oszlopokat. Az SQL Server-adatforrások esetében azonban ezek az argumentumok nem támogatottak.

Korlátozott támogatás az SQL-adattípusokhoz a következőben: sp_execute_external_script

Az SQL-ben támogatott adattípusok nem használhatók az R-ben. Áthidaló megoldásként érdemes lehet a nem támogatott adattípust egy támogatott adattípusra kiosztani, mielőtt továbbítanák az adatokat sp_execute_external_script.

További információ: R-kódtárak és adattípusok.

Lehetséges a karakterláncok sérülésének veszélye Unicode karakterláncok használatakor a varchar oszlopokban.

Ha Unicode-adatokat ad át a varchar-oszlopokban az SQL Serverről az R/Pythonra, sztringsérülést okozhat. Ennek az az oka, hogy az SQL Server-rendezésekben szereplő Unicode-sztringek kódolása nem egyezik az R/Pythonban használt alapértelmezett UTF-8 kódolással.

Ha nem ASCII-sztringadatokat szeretne küldeni az SQL Serverről az R/Pythonba, használjon UTF-8 kódolást (elérhető az SQL Server 2019-ben (15.x) vagy használjon nvarchar típust ugyanahhoz.

Csak egy raw típusú érték adható vissza a sp_execute_external_script rendszeren keresztül.

Ha egy bináris adattípust (az R nyers adattípust) ad vissza az R-ből, az értéket a kimeneti adatkeretben kell elküldeni.

A nyersen kívüli adattípusok esetén a KIMENETI kulcsszó hozzáadásával a tárolt eljárás eredményei mellett paraméterértékeket is visszaadhat. További információért lásd: Paraméterek.

Ha több olyan kimeneti készletet szeretne használni, amelyek nyers típusú értékeket tartalmaznak, az egyik lehetséges megkerülő megoldás a tárolt eljárás több hívása, vagy az eredményhalmazok ODBC használatával történő visszaküldése az SQL Serverre.

Pontosságvesztés

Mivel a Transact-SQL és az R különböző adattípusokat támogat, a numerikus adattípusok az átalakítás során elveszíthetik a pontosságot.

Az implicit adattípus-átalakításról további információt az R-kódtárak és adattípusok című témakörben talál.

Változó hatókörkezelési hibája a transformFunc paraméter használatakor

Ha modellezés közben szeretné átalakítani az adatokat, átadhat egy transformFunc argumentumot egy függvényben, például rxLinmod vagy rxLogit. A beágyazott függvényhívások azonban hatókörkezelési hibákhoz vezethetnek az SQL Server számítási környezetében, még akkor is, ha a hívások megfelelően működnek a helyi számítási környezetben.

Az elemzés mintaadatkészlete nem rendelkezik változókkal

Tegyük fel például, hogy két függvényt definiált, f és g, a globális környezetben, és g hívja a f-t. Az elosztott vagy távoli hívások esetén a g hívás g hibával meghiúsulhat, mert f nem található meg, még akkor sem, ha mind a f, mind a g átadásra került a távoli hívás során.

Ha ezt a problémát tapasztalja, megkerülheti azt úgy, hogy a f definícióját a g definíciójába ágyazza be, mielőtt a g normálisan hívná a f-at.

Például:

f <- function(x) { 2*x * 3 }
g <- function(y) {
              a <- 10 * y
               f(a)
}

A hiba elkerülése érdekében írja át újra a definíciót az alábbiak szerint:

g <- function(y){
              f <- function(x) { 2*x +3}
              a <- 10 * y
              f(a)
}

Adatok importálása és kezelése a RevoScaleR használatával

Amikor a varchar oszlopokat egy adatbázisból olvassa be, a rendszer levágja a szabad területet. Ennek megakadályozása érdekében a sztringeket nem üres karakterek közé kell tenni.

Ha olyan függvényeket használnak, mint rxDataStep például a varchar oszlopokkal rendelkező adatbázistáblák létrehozásához, az oszlopszélesség becslése az adatok mintája alapján történik. Ha a szélesség eltérő lehet, előfordulhat, hogy az összes karakterláncot egy közös hosszúságúra kell kiegészíteni.

Ha egy változó adattípusának átalakítását ismételt hívásokkal kívánja végrehajtani rxImport vagy rxTextToXdf használatával, amelyek sorok importálására és összefűzésére szolgálnak több bemeneti fájl egyetlen .xdf fájlba, az nem támogatott.

Korlátozott támogatás a következőhöz: rxExec

Az SQL Server 2016 -ban (13.x) a rxExec RevoScaleR-csomag által biztosított függvény csak egyszálas módban használható.

A maximális paraméterméret növelése az rxGetVarInfo támogatásához

Ha rendkívül nagy számú változóval (például több mint 40 000) rendelkező adathalmazt használ, állítsa be a jelölőt az max-ppsize R indításakor az olyan függvények használatára, mint rxGetVarInfoa . A max-ppsize jelző megadja a mutatóvédelmi verem maximális méretét.

Ha az R-konzolt használja (például RGui.exe vagy RTerm.exe), a maximális ppsize értékét 500000-re állíthatja be a következő beírással:

R --max-ppsize=500000

Az rxDTree függvénnyel kapcsolatos problémák

A rxDTree függvény jelenleg nem támogatja a képleten belüli átalakításokat. Az „F()” szintaxis használata a tényezők menet közbeni létrehozására nem támogatott. A numerikus adatok azonban automatikusan rögzítve lesznek.

A rendezett tényezők ugyanúgy vannak kezelve, mint az összes RevoScaleR-elemzési függvény tényezői, kivéve rxDTree.

data.table OutputDataSetként az R-ben

SQL Server 2017 (14.x) 13. kumulatív frissítése (CU 13) és korábbi verziói nem támogatják a data.tableOutputDataSet használatát az R-ben. A következő üzenet jelenhet meg:

Msg 39004, Level 16, State 20, Line 2
A 'R' script error occurred during execution of
'sp_execute_external_script' with HRESULT 0x80004004.
Msg 39019, Level 16, State 2, Line 2
An external script error occurred:
Error in alloc.col(newx) :
  Internal error: length of names (0) is not length of dt (11)
Calls: data.frame ... as.data.frame -> as.data.frame.data.table -> copy -> alloc.col

Error in execution.  Check the output for more information.
Error in eval(expr, envir, enclos) :
  Error in execution.  Check the output for more information.
Calls: source -> withVisible -> eval -> eval -> .Call
Execution halted

data.table OutputDataSet-ként az R-ben az SQL Server 2017 (14.x) 14. kumulatív frissítésében (CU 14) és az újabb kiadásokban támogatott.

A hosszú szkript futtatása sikertelen a kódtár telepítésekor

Ha egy hosszú ideig futó külső parancsfájl-munkamenetet futtat, és a dbo párhuzamosan próbál telepíteni egy kódtárat egy másik adatbázisra, azzal megszakíthatja a szkriptet.

Például futtassa ezt a külső szkriptet az master adatbázison:

USE MASTER
DECLARE @language nvarchar(1) = N'R'
DECLARE @script nvarchar(max) = N'Sys.sleep(100)'
DECLARE @input_data_1 nvarchar(max) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1 with result sets none
go

Míg a dbo párhuzamosan telepíti a könyvtárat a LibraryManagementFunctionalban:

USE [LibraryManagementFunctional]
go

CREATE EXTERNAL LIBRARY [RODBC] FROM (CONTENT = N'/home/ani/var/opt/mssql/data/RODBC_1.3-16.tar.gz') WITH (LANGUAGE = 'R')
go

DECLARE @language nvarchar(1) = N'R'
DECLARE @script nvarchar(14) = N'library(RODBC)'
DECLARE @input_data_1 nvarchar(8) = N'select 1'
EXEC sp_execute_external_script @language = @language, @script = @script, @input_data_1 = @input_data_1
go

Az adatbázison futó master korábbi hosszú ideig futó külső szkript a következő hibaüzenettel fog leállni:

"R" szkripthiba történt a "sp_execute_external_script" végrehajtása során, HRESULT 0x800704d4.

Megoldás

Ne futtassa párhuzamosan a kódtár telepítését a hosszú ideig futó lekérdezéshez. Vagy futtassa újra a hosszú ideig futó lekérdezést a telepítés befejezése után.

A következőkre vonatkozik: SQL Server 2019 (15.x) csak Linuxon és Big Data klasztereken.

Az SQL Server nem válaszol a párhuzamos végrehajtást tartalmazó R-szkriptek végrehajtásakor

Az SQL Server 2019 (15.x) olyan regressziót tartalmaz, amely hatással van a párhuzamos végrehajtást használó R-szkriptekre. Ilyen például a rxExec használata a számítási környezetben, illetve a párhuzamos csomagot használó szkriptek RxLocalPar. Ezt a problémát az okozza, hogy a párhuzamos csomag írás közben hibákat tapasztal a null eszközön az SQL Server futtatása során.

A következőkre vonatkozik: SQL Server 2019 (15.x).

Pontossági veszteség pénz/numerikus/decimális/bigint adattípusok esetén

Az R-szkript végrehajtása lehetővé teszi pénz, numerikus, decimális és bigint típusú adattípusok bemeneti adatként való használatát sp_execute_external_script. Mivel azonban R numerikus típussá konvertálják őket, pontossági veszteség éri őket nagyon magas vagy tizedespontos értékekkel.

  • pénz: Néha a cent értékek pontatlanok lennének, és figyelmeztetést adnának ki: Figyelmeztetés: nem lehet pontosan képviselni a centek értékeit.
  • numerikus/decimális: sp_execute_external_script az R-szkriptek nem támogatják az adattípusok teljes tartományát, és az utolsó néhány tizedesjegyet módosítanák, különösen a töredékkel rendelkezőket.
  • bigint: Az R csak legfeljebb 53 bites egész számokat támogat, és akkor elkezdi a pontosságvesztést.

Az rxExecBy függvénnyel kapcsolatos problémák – az rxExecBy függvény nem találja a telepített csomagot

rxExecBy A függvény meghívásakor egy új R-futtatókörnyezeti folyamat indul el. Ez az új folyamat nem tartalmaz frissített kódtár-elérési utakat, ezért a végrehajtás során nem találhatók az alapértelmezett tárelérési úttól eltérő helyekre telepített csomagok.

Megoldás

Az R-csomagok elérési útját kifejezetten frissíteni kell. Tegyük fel, hogy a csomagok a külső kódtárak elérési útján vannak telepítve, a következő R-szkript használható a kódtár elérési útjának frissítéséhez: .libPaths(c(Sys.getenv("MRS_EXTLIB_USER_PATH"), Sys.getenv("MRS_EXTLIB_SHARED_PATH"), .libPaths()))

Python-szkript végrehajtásával kapcsolatos problémák

Ez a szakasz a Python SQL Serveren való futtatásával kapcsolatos ismert problémákat, valamint a Microsoft által közzétett Python-csomagokkal kapcsolatos problémákat tartalmazza, beleértve a revoscalepy-t és a microsoftml-t.

Az előre betanított modell meghívása meghiúsul, ha a modell elérési útja túl hosszú

Ha az előre betanított modelleket az SQL Server 2017 (14.x) korai kiadásában telepítette, a betanított modellfájl teljes elérési útja túl hosszú lehet ahhoz, hogy a Python elolvassa. Ez a korlátozás egy későbbi szolgáltatáskiadásban van javítva.

Számos lehetséges áthidaló megoldás létezik:

  • Az előre betanított modellek telepítésekor válasszon egy egyéni helyet.
  • Ha lehetséges, telepítse az SQL Server-példányt egy rövidebb elérési úttal rendelkező egyéni telepítési útvonalon, például C:\SQL\MSSQL14.MSSQLSERVER.
  • A Windows segédprogram Fsutil használatával készítsen egy kemény hivatkozást, amely a modellfájlt egy rövidebb útvonalra térképezi le.
  • Frissítsen a legújabb szolgáltatásverzióra.

Hiba a szerializált modell SQL Serverre történő mentésekor

Ha egy modellt egy távoli SQL Server-példánynak ad át, és megpróbálja beolvasni a bináris modellt a rx_unserializerevoscalepy függvény használatával, a következő hibaüzenet jelenhet meg:

NameError: a "rx_unserialize_model" név nincs definiálva

Ez a hiba akkor jelentkezik, ha a modellt a szerializálási függvény legújabb verziójával mentette, de a modell deszerializálására szolgáló SQL Server-példány nem ismeri fel a szerializálási API-t.

A probléma megoldásához frissítse az SQL Server 2017 (14.x) példányt CU 3 vagy újabb verzióra.

A varbináris változó inicializálásának sikertelensége hibát okoz a BxlServer

Ha Python-kódot futtat az SQL Serveren, sp_execute_external_scriptés a kód varbinary(max), varchar(max) vagy hasonló típusú kimeneti változókkal rendelkezik, a változót inicializálni kell vagy be kell állítani a szkript részeként. Ellenkező esetben a BxlServer adatcsere-összetevő hibát jelez, és leáll.

Ez a korlátozás egy közelgő szolgáltatáskiadásban lesz javítva. Kerülő megoldásként győződjön meg arról, hogy a változó inicializálva van a Python-szkriptben. Bármilyen érvényes érték használható, ahogyan az alábbi példákban is látható:

declare @b varbinary(max);
exec sp_execute_external_script
  @language = N'Python'
  , @script = N'b = 0x0'
  , @params = N'@b varbinary(max) OUTPUT'
  , @b = @b OUTPUT;
go
declare @b varchar(30);
exec sp_execute_external_script
  @language = N'Python'
  , @script = N' b = ""  '
  , @params = N'@b varchar(30) OUTPUT'
  , @b = @b OUTPUT;
go

Telemetriai figyelmeztetés a Python-kód sikeres végrehajtásához

Az SQL Server 2017 (14.x) CU 2-től kezdve a következő üzenet akkor is megjelenhet, ha a Python-kód egyébként sikeresen fut:

STDERR-üzenet külső szkriptből:~PYTHON_SERVICES\lib\site-packages\revoscalepy\utils\RxTelemetryLoggerSyntaxWarning: telemetry_state a globális deklaráció előtt használják

Ezt a problémát az SQL Server 2017 (14.x) 3. kumulatív frissítésében (CU 3) javítottuk.

Numerikus, tizedes és pénz típusú adattípusok nem támogatottak

Az SQL Server 2017 (14.x) 12. kumulatív frissítésétől (CU 12) kezdődően a numerikus, tizedes és pénz típusú adattípusok a WITH RESULT SETS használatával nem támogatottak Python esetén sp_execute_external_script. A következő üzenetek jelenhetnek meg:

[Kód: 39004, SQL State: S1000] A "sp_execute_external_script" végrehajtása során "Python" szkripthiba történt a HRESULT 0x80004004.

[Kód: 39019, SQL State: S1000] Külső szkripthiba történt:

SqlSatelliteCall-hiba: Nem támogatott típus a kimeneti sémában. Támogatott típusok: bit, smallint, int, datetime, smallmoney, real és float. char, varchar részben támogatottak.

Ezt kijavítottuk az SQL Server 2017 (14.x) 14. kumulatív frissítésében (CU 14).

Hibás értelmezői hiba a Python-csomagok linuxos pippel történő telepítésekor

Ha pip-et próbál használni az SQL Server 2019 (15.x) verziójában. Például:

/opt/mssql/mlservices/runtime/python/bin/pip -h

Ekkor a következő hibaüzenet jelenik meg:

bash: /opt/mssql/mlservices/runtime/python/bin/pip: /opt/microsoft/mlserver/9.4.7/bin/python/python: rossz értelmező: Nincs ilyen fájl vagy könyvtár

Megoldás

Telepítse a pip-t a Python Package Authority (PyPA)-ból:

wget 'https://bootstrap.pypa.io/get-pip.py'
/opt/mssql/mlservices/bin/python/python ./get-pip.py

A következőkre vonatkozik: SQL Server 2019 (15.x) Linux rendszeren

A Python-csomagok nem telepíthetők pip az SQL Server 2019 Windows rendszeren való telepítése után

Miután telepítette az SQL Server 2019-et (15.x) Windows rendszeren, a PYTHON-csomag dos parancssorból pipen keresztül történő telepítése sikertelen lesz. Például:

pip install quantfolio

Ez a következő hibát adja vissza:

A pip TLS/SSL-t igénylő helyeken van konfigurálva, de a Python ssl-modulja nem érhető el.

Ez az Anaconda-csomagra vonatkozó probléma. Ez egy hamarosan megjelenő szolgáltatáskiadásban lesz javítva.

Megoldás

Másolja ki a következő fájlokat:

  • libssl-1_1-x64.dll
  • libcrypto-1_1-x64.dll

a mappából
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\Library\bin

a mappába
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\DLLs

Ezután nyisson meg egy új DOS parancsablakot.

A következőkre vonatkozik: SQL Server 2019 (15.x) Windows rendszeren

Hiba, amikor a sp_execute_external_script-t libc++abo.so nélküli használata Linuxon történik

Egy olyan tiszta Linux-gépen, amelyen nincs libc++abi.so telepítve, az sp_execute_external_script SPEES-lekérdezés futtatása "Nincs ilyen fájl vagy könyvtár" hibával meghiúsul.

Például:

EXEC sp_execute_external_script
    @language = N'Python'
    , @script = N'
OutputDataSet = InputDataSet'
    , @input_data_1 = N'select 1'
    , @input_data_1_name = N'InputDataSet'
    , @output_data_1_name = N'OutputDataSet'
    WITH RESULT SETS (([output] int not null));
Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'Python' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'Python' runtime.
STDERR message(s) from external script:

Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error libc++abi.so.1: cannot open shared object file: No such file or directory.

SqlSatelliteCall error: Failed to load library /opt/mssql-extensibility/lib/sqlsatellite.so with error libc++abi.so.1: cannot open shared object file: No such file or directory.
STDOUT message(s) from external script:
SqlSatelliteCall function failed. Please see the console output for more information.
Traceback (most recent call last):
  File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/computecontext/RxInSqlServer.py", line 605, in rx_sql_satellite_call
    rx_native_call("SqlSatelliteCall", params)
  File "/opt/mssql/mlservices/libraries/PythonServer/revoscalepy/RxSerializable.py", line 375, in rx_native_call
    ret = px_call(functionname, params)
RuntimeError: revoscalepy function failed.
Total execution time: 00:01:00.387

Megoldás

Futtassa a következő parancsot:

sudo cp /opt/mssql/lib/libc++abi.so.1 /opt/mssql-extensibility/lib/

A következőkre vonatkozik: SQL Server 2019 (15.x) Linux rendszeren

Általános hiba az Ubuntu 20.04-en futó SQL Server 2022 CU6 linuxos futtatásakor sp_execute_external_script

Az SQL Server 2022 CU6 linuxos telepítése az Ubuntu 20.04-re a következő hibát okozhatja R- és Python-szkriptek futtatásakor sp_execute_external_script :

Msg 39012, Level 16, State 14, Line 0
Unable to communicate with the runtime for 'R' script for request id: 94257840-1704-45E8-83D2-2F74AEB46CF7. Please check the requirements of 'R' runtime.

STDERR message(s) from external script: 
/usr/lib/R/library/RevoScaleR/rxLibs/x64/libExaCore.so.2(_Z21CriticalSignalHandleri+0x29)[0x7f2568289d89]
/usr/lib/x86_64-linux-gnu/libc.so.6(+0x43090)[0x7f2568d66090]

Megoldás

Futtassa a következő parancsot a csomagfüggőség libssl-devtelepítéséhez, amely lehetővé teszi, hogy az SQL Server feloldja a rendszer által biztosított megosztott kódtárakat libssl és libcrypto.

sudo apt-get update
sudo apt-get install libssl-dev

Hiba a tűzfalszabály létrehozásakor a(z) modprobe alkalmazásban mssql-launchpadd futtatáskor Linuxon

A mssql-launchpadd naplók megtekintésekor sudo journalctl -a -u mssql-launchpadd használatával a következő kimenettel hasonló tűzfalszabály-létrehozási hiba jelenhet meg.

-- Logs begin at Sun 2021-03-28 12:03:30 PDT, end at Wed 2022-10-12 13:20:17 PDT. --
Mar 22 16:57:51 sqlVm systemd[1]: Started Microsoft SQL Server Extensibility Launchpad Daemon.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: Extensibility Log Header: <timestamp> <process> <sandboxId> <sessionId> <message>
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: No extensibility section in /var/opt/mssql/mssql.conf file. Using default settings.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: DataDirectories =  /bin:/etc:/lib:/lib32:/lib64:/sbin:/usr/bin:/usr/include:/usr/lib:/usr/lib32:/usr/lib64:/usr/libexec/gcc:/usr/sbin:/usr/share:/var/lib:/opt/microsoft:/opt/mssql-extensibility:/opt/mssql/mlservices:/opt/mssql/lib/zulu-jre-11:/opt/mssql-tools
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: [RG] SQL Extensibility Cgroup initialization is done.
Mar 22 16:57:51 sqlVm launchpadd[195658]: 2022/03/22 16:57:51 [launchpadd] INFO: Found 1 IP address(es) from the bridge.
Mar 22 16:57:51 sqlVm launchpadd[195676]: modprobe: ERROR: could not insert 'ip6_tables': Operation not permitted
Mar 22 16:57:51 sqlVm launchpadd[195673]: ip6tables v1.8.4 (legacy): can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
Mar 22 16:57:51 sqlVm launchpadd[195673]: Perhaps ip6tables or your kernel needs to be upgraded.
Mar 22 16:57:51 sqlVm launchpadd[195678]: modprobe: ERROR: could not insert 'ip6_tables': Operation not permitted
Mar 22 16:57:51 sqlVm launchpadd[195677]: ip6tables v1.8.4 (legacy): can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
Mar 22 16:57:51 sqlVm launchpadd[195677]: Perhaps ip6tables or your kernel needs to be upgraded.
Mar 22 16:57:51 sqlVm launchpadd[195670]: 2022/03/22 16:57:51 [setnetbr] ERROR: Failed to set firewall rules: exit status 3

Megoldás

Futtassa a következő parancsokat az SQL Server Launchpad szolgáltatás konfigurálásához modprobeés újraindításához:

sudo modprobe ip6_tables
sudo systemctl restart mssql-launchpadd

A következőkre vonatkozik: SQL Server 2019 (15.x) és újabb verziók Linux rendszeren

A csomag nem telepíthető tensorflow a sqlmlutils használatával

A sqlmlutils csomag Python-csomagok telepítésére szolgál az SQL Server 2019-ben (15.x). Le kell töltenie, telepítenie és frissítenie kell a Microsoft Visual C++ 2015-2019 Terjeszthető (x64) verzióját. A tensorflow csomag azonban nem telepíthető a következővel sqlmlutils: . A tensorflow csomag az SQL Serveren telepített verziónál újabb verziótól numpy függ. Azonban a numpy egy előre telepített rendszercsomag, amelyet nem lehet frissíteni, amikor megpróbálják telepíteni a tensorflow-t.

Megoldás

A parancssor rendszergazdai módban való használatával futtassa a következő parancsot, és cserélje le az "MSSQLSERVER" szót az SQL Server-példány nevére:

"C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\PYTHON_SERVICES\python.exe" -m pip install --upgrade tensorflow

Ha "TLS/SSL" hibaüzenetet kap, lásd : 7. A jelen cikk korábbi szakaszában nem sikerült telepíteni a Python-csomagokat a pip használatával .

A következőkre vonatkozik: SQL Server 2019 (15.x) Windows rendszeren

Revolution R Enterprise és Microsoft R Open

Ez a szakasz a Revolution Analytics által biztosított R-kapcsolati, fejlesztési és teljesítményeszközökkel kapcsolatos problémákat sorolja fel. Ezeket az eszközöket az SQL Server korábbi előzetes verzióiban adták meg.

Általában azt javasoljuk, hogy távolítsa el ezeket a korábbi verziókat, és telepítse az SQL Server vagy a Microsoft R Server legújabb verzióját.

A Revolution R Enterprise jelenleg nem támogatott

A Revolution R Enterprise telepítése az R Services bármely verziójával (In-Database) nem támogatott.

Ha rendelkezik a Revolution R Enterprise meglévő licencével, azt az SQL Server-példánytól és az SQL Server-példányhoz való csatlakozáshoz használni kívánt munkaállomástól eltérő számítógépre kell helyeznie.

Az R Services (In-Database) néhány előzetes verziója tartalmazott egy R fejlesztői környezetet a Windowshoz, amelyet a Revolution Analytics hozott létre. Ez az eszköz már nem érhető el, és nem támogatott.

Az R-szolgáltatásokkal (In-Database) való kompatibilitás érdekében javasoljuk, hogy inkább a Microsoft R-ügyfelet telepítse. Az R Tools for Visual Studio és a Visual Studio Code is támogatja a Microsoft R-megoldásokat.

Kompatibilitási problémák az SQLite ODBC-illesztőprogram és a RevoScaleR használatával

Az SQLite ODBC-illesztő 0.92-es változata nem kompatibilis a RevoScaleR-lel. A 0.88-0.91-0.91-0.93-s és újabb verziók ismerten kompatibilisek.

Következő lépések