Condividi tramite


Problemi noti per Python e R in SQL Server Machine Learning Services

Si applica a: SQL Server 2016 (13.x) e versioni successive

Importante

Il supporto per Machine Learning Server (noto in precedenza come R Server) è terminato il 1° luglio 2022. Per altre informazioni, vedere Informazioni su Machine Learning Server

Questo articolo descrive i problemi noti o le limitazioni per i componenti Python e R forniti in Machine Learning Services per SQL Server e R Services per SQL Server 2016.

Problemi di installazione e configurazione

Per una descrizione dei processi correlati all'installazione e alla configurazione iniziali, vedere Installare Machine Learning Services di SQL Server . Contiene informazioni sugli aggiornamenti, l'installazione side-by-side e l'installazione di nuovi componenti R o Python.

Risultati incoerenti nei calcoli MKL a causa di una variabile di ambiente mancante

Si applica a: File binari di R_SERVER 9.0, 9.1, 9.2 o 9.3.

R_SERVER usa la libreria MKL (Math Kernel Library) di Intel. Per i calcoli che coinvolgono la libreria MKL, è possibile che si verifichino risultati incoerenti se nel sistema manca una variabile di ambiente.

Impostare la variabile di ambiente 'MKL_CBWR'=AUTO per garantire la riproducibilità numerica condizionale in R_SERVER. Per altre informazioni, vedere Introduction to Conditional Numerical Reproducibility (CNR) (Introduzione alla riproducibilità numerica condizionale).

Soluzione alternativa

  1. Nel Pannello di controllo selezionare Sistema e sicurezza>Sistema>Impostazioni di sistema avanzate>Variabili d'ambiente.

  2. Creare una nuova variabile dell'utente o di sistema.

    • Impostare la variabile su MKL_CBWR.
    • Impostare il valore su AUTO.
  3. Riavviare R_SERVER. In SQL Server è possibile riavviare il servizio Launchpad di SQL Server.

Nota

Se si esegue SQL Server 2019 (15.x) in Linux, modificare o creare .bash_profile nella home directory dell'utente, aggiungendo la riga export MKL_CBWR="AUTO". Eseguire questo file digitando source .bash_profile al prompt dei comandi di Bash. Riavviare R_SERVER digitando Sys.getenv() al prompt dei comandi di R.

Errore di runtime per script R (regressione SQL Server 2017 CU5-CU7)

Negli aggiornamenti cumulativi da 5 a 7 di SQL Server 2017 (14.x) esiste una regressione nel file rlauncher.config in cui il percorso della directory temporanea include uno spazio. Questa regressione è stata corretta nell'aggiornamento cumulativo 8.

L'errore che verrà visualizzato quando si esegue lo script R include i messaggi seguenti:

Non è stato possibile comunicare con il runtime per lo script 'R'. Verificare i requisiti del runtime di 'R'.

Messaggi STDERR dallo script esterno:

Errore irreversibile: non è possibile creare 'R_TempDir'

Soluzione alternativa

Applicare l'aggiornamento cumulativo 8 quando diventerà disponibile. In alternativa, è possibile ricreare rlauncher.config eseguendo registerrext con uninstall/install in un prompt dei comandi con privilegi elevati.

<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>

L'esempio seguente mostra i comandi con l'istanza predefinita "MSSQL14.MSSQLSERVER" installata in 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

Non è possibile installare le funzionalità di Machine Learning di SQL Server in un controller di dominio

Se si tenta di installare SQL Server 2016 (13.x) R Services o Servizi di Machine Learning per SQL Server in un controller di dominio, l'installazione non riesce con gli errori seguenti:

Errore durante il processo di installazione della funzionalità

Impossibile trovare il gruppo con identità

Codice errore componente: 0x80131509

L'errore si verifica perché, in un controller di dominio, il servizio non è in grado di creare i 20 account locali necessari per eseguire Machine Learning. In generale, non è consigliabile installare SQL Server in un controller di dominio. Per altre informazioni, vedere il bollettino del supporto tecnico 2032911.

Installare la versione più recente del servizio per garantire la compatibilità con Microsoft R Client

Se si installa la versione più recente di Microsoft R Client e si usa tale versione per eseguire R su SQL Server in un contesto di calcolo remoto, è possibile che venga visualizzato un errore simile al seguente:

Sul computer è in esecuzione la versione 9.x.x di Microsoft R Client, che è incompatibile con la versione Microsoft R Server 8.x.x. Scaricare e installare una versione compatibile.

SQL Server 2016 (13.x) richiede che le librerie R nel client corrispondano esattamente alle librerie R nel server. La restrizione è stata rimossa per le versioni successive a R Server 9.0.1. Tuttavia, se si verifica questo errore, controllare la versione delle librerie R usate dal client e dal server e, se necessario, aggiornare il client in modo che corrisponda alla versione del server.

La versione di R installata con R Services per SQL Server viene aggiornata al momento dell'installazione di una nuova versione del servizio SQL Server. Per essere certi di avere sempre le versioni più aggiornate dei componenti R, assicurarsi di installare tutti i Service Pack.

È possibile che venga visualizzato un messaggio di errore durante l'esecuzione di R Server 8.0.3 in SQL Server 2016: 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. La compatibilità con Microsoft R Client 9.0.0 in SQL Server 2016 era garantita con le seguenti patch:

Per evitare problemi con i pacchetti R, è anche possibile aggiornare la versione delle librerie R installate nel server, modificando il contratto di servizio in modo da usare i criteri moderni relativi al ciclo di vita del supporto, come descritto nella sezione successiva. Quando si esegue questa operazione, la versione di R installata con SQL Server viene aggiornata in base alla stessa pianificazione usata per gli aggiornamenti di Machine Learning Server (in precedenza Microsoft R Server).

Si applica a: SQL Server 2016 (13.x) R Services, con R Server versione 9.0.0 o precedente

Componenti R mancanti nell'installazione di SQL Server 2017 CU 3

Per un numero limitato di macchine virtuali di Azure è stato effettuato il provisioning senza i file di installazione di R che dovrebbero essere inclusi in SQL Server. Il problema si applica alle macchine virtuali di cui è stato effettuato il provisioning nel periodo compreso tra il 05/01/2018 e il 23/01/2018. Questo problema può anche influire sulle installazioni locali se è stato applicato l'aggiornamento CU 3 per SQL Server 2017 (14.x) durante il periodo dal 05/01/2018 al 23/01/2018.

È stata fornita una versione del servizio che include la versione corretta dei file di installazione di R.

Per installare i componenti e ripristinare SQL Server 2017 (14.x) CU 3, è necessario disinstallare l'aggiornamento cumulativo 3 e reinstallare la versione aggiornata:

  1. Scaricare il file di installazione dell'aggiornamento cumulativo 3 aggiornato, che include i programmi di installazione di R.
  2. Disinstallare CU 3. Nel Pannello di controllo cercare Disinstalla un aggiornamento e quindi selezionare "Hotfix 3015 for SQL Server 2017 (KB4052987) (64-bit)". Procedere con i passaggi di disinstallazione.
  3. Reinstallare l'aggiornamento CU3 facendo doppio clic sull'aggiornamento per KB4052987 appena scaricato: SQLServer2017-KB4052987-x64.exe. Seguire le istruzioni di installazione.

Non è possibile installare i componenti Python nelle installazioni offline di SQL Server 2017 o versione successiva

Se si installa una versione provvisoria di SQL Server 2017 (14.x) in un computer senza accesso a Internet, il programma di installazione potrebbe non riuscire a visualizzare la pagina che richiede il percorso dei componenti Python scaricati. In questa situazione è possibile installare la funzionalità Machine Learning Services, ma non i componenti Python.

Questo problema è stato risolto nella versione finale. Questa limitazione non si applica inoltre ai componenti R.

Si applica a: SQL Server 2017 (14.x) con Python

Avviso di versione non compatibile quando ci si connette a una versione precedente di R Services per SQL Server da un client che usa SQL Server 2017

Quando si esegue codice R in un contesto di calcolo SQL Server 2016 (13.x), è possibile che venga visualizzato l'errore seguente:

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. (Sul computer è in esecuzione la versione 9.0.0 di Microsoft R, che non è compatibile con Microsoft R Server versione 8.0.3. Scaricare e installare una versione compatibile.)

Questo messaggio viene visualizzato se una delle due istruzioni seguenti è vera:

Per assicurarsi che il server e il client usino la stessa versione, potrebbe essere necessario usare binding, supportato per Microsoft R Server 9.0 e versioni successive, per aggiornare i componenti di R nelle istanze di SQL Server 2016 (13.x). Per determinare se è disponibile il supporto per gli aggiornamenti per la versione di R Services, vedere Aggiornare un'istanza di R Services con SqlBindR.exe.

Si applica a: SQL Server 2016 (13.x) R Services, con R Server versione 9.0.0 o precedente

Durante l'installazione di alcune versioni del servizio SQL Server 2016 è possibile che le versioni più recenti dei componenti R non vengano installate

Quando si installa un aggiornamento cumulativo o un Service Pack per SQL Server 2016 (13.x) in un computer che non è connesso a Internet, è possibile che durante l'Installazione guidata non venga visualizzato il prompt che consente di aggiornare i componenti R usando i file CAB scaricati. Questo errore si verifica in genere quando vengono installati più componenti insieme al motore di database.

Come soluzione alternativa, è possibile installare la versione del servizio usando la riga di comando e specificando l'argomento MRCACHEDIRECTORY, come illustrato in questo esempio, che installa gli aggiornamenti relativi a CU1:

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

Per ottenere i programmi di installazione più recenti, vedere Installare i componenti di Machine Learning senza accesso a Internet.

Si applica a: SQL Server 2016 (13.x) R Services, con R Server versione 9.0.0 o precedente

Il servizio Launchpad non viene avviato se la versione è diversa da quella di R

Se si installa R Services per SQL Server separatamente dal motore di database e le versioni delle build sono diverse, potrebbe essere visualizzato l'errore seguente nel registro eventi di sistema:

Non è stato possibile avviare il servizio SQL Server Integration Services per il seguente errore: il servizio non ha risposto tempestivamente alla richiesta di avvio o controllo.

Questo errore può verificarsi, ad esempio, se si installa il motore di database usando la versione finale, si applica una patch per aggiornare il motore di database e quindi si aggiunge la funzionalità R Services usando la versione finale.

Per evitare questo problema, usare un'utilità come File Manager per confrontare le versioni di Launchpad.exe con la versione dei file binari SQL, ad esempio sqldk.dll. Tutti i componenti devono avere lo stesso numero di versione. Se si aggiorna un componente, assicurarsi di applicare lo stesso aggiornamento a tutti gli altri componenti installati.

Cercare Launchpad nella cartella Binn per l'istanza. Ad esempio, in un'installazione predefinita di SQL Server 2016 (13.x), il percorso potrebbe essere C:\Program Files\Microsoft SQL Server\MSSQL.13.InstanceNameMSSQL\Binn.

I contesti di calcolo remoto sono bloccati da un firewall nelle istanze di SQL Server in esecuzione su macchine virtuali di Azure

Se è stato installato SQL Server in una macchina virtuale di Azure, potrebbe non essere possibile usare contesti di calcolo che richiedono l'uso dell'area di lavoro della macchina virtuale. Il motivo è che, per impostazione predefinita, il firewall delle macchine virtuali di Azure include una regola che blocca l'accesso alla rete per gli account utente di R locali.

In alternativa, nella macchina virtuale di Azure aprire Windows Firewall con protezione avanzata, selezionare Regole in uscita e disabilitare la regola seguente: Blocca l'accesso alla rete per gli account utente locali di R nell'istanza di SQL Server MSSQLSERVER. È anche possibile lasciare la regola abilitata, ma modificare la proprietà di sicurezza in Allow if secure (Consenti se sicuro).

Autenticazione implicita in SQL Server 2016 edizione Express

Quando si eseguono processi R da una workstation remota per data science tramite l'autenticazione integrata di Windows, SQL Server usa l'autenticazione implicita per generare eventuali chiamate ODBC locali richieste dallo script. Questa funzionalità, tuttavia, non funziona nella build RTM di SQL Server 2016 (13.x) edizione Express.

Per risolvere il problema, è consigliabile eseguire l'aggiornamento a una versione più recente del servizio. Se l'aggiornamento non è fattibile, come soluzione alternativa è possibile usare un account di accesso SQL per eseguire processi R remoti che potrebbero richiedere chiamate ODBC incorporate.

Si applica a: SQL Server 2016 (13.x) R Services edizione Express

Limiti di prestazioni quando le librerie usate da SQL Server vengono chiamate da altri strumenti

È possibile chiamare le librerie di Machine Learning installate per SQL Server da un'applicazione esterna, ad esempio RGui. Questo potrebbe essere il modo più pratico per eseguire determinate attività, ad esempio l'installazione di nuovi pacchetti o l'esecuzione di test ad hoc su esempi di codice molto brevi. Tuttavia, al di fuori di SQL Server, le prestazioni potrebbero essere limitate.

Se si esegue il codice R usando strumenti esterni, R verrà eseguito in modalità single threading anche se si usa ad esempio SQL Server edizione Enterprise. Per ottenere i vantaggi delle prestazioni in SQL Server, avviare una connessione di SQL Server e usare sp_execute_external_script per chiamare il runtime di script esterno.

In generale, evitare di chiamare le librerie di Machine Learning usate da SQL Server da strumenti esterni. Se è necessario eseguire il debug di codice R o Python, in genere è più semplice farlo all'esterno di SQL Server. Per ottenere le stesse librerie incluse in SQL Server è possibile installare Microsoft R Client o SQL Server 2017 Machine Learning Server (Standalone).

SQL Server Data Tools non supporta le autorizzazioni richieste da script esterni

Quando si usa Visual Studio o SQL Server Data Tools per pubblicare un progetto di database, se un'entità dispone di autorizzazioni specifiche per l'esecuzione di script esterni, è possibile che venga visualizzato un errore simile al seguente:

Modello TSQL: errore rilevato durante il reverse engineering del database. L'autorizzazione non è stata riconosciuta e non è stata importata.

Attualmente, il modello DACPAC non supporta le autorizzazioni usate da R Services o Servizi di Machine Learning, ad esempio GRANT ANY EXTERNAL SCRIPT o EXECUTE ANY EXTERNAL SCRIPT. Questo problema verrà risolto in una versione futura.

Come soluzione alternativa, eseguire le istruzioni GRANT aggiuntive in uno script post-distribuzione.

L'esecuzione di script esterni è limitata a causa dei valori predefiniti di governance delle risorse

Nell’edizione Enterprise è possibile usare pool di risorse per gestire processi di script esterni. In alcune build preliminari non è possibile allocare ai processi R più del 20% della memoria complessiva. Di conseguenza, se il server ha 32 GB di RAM, i file eseguibili di R (RTerm.exe e BxlServer.exe) non possono usare più di 6,4 GB in un'unica richiesta.

Se si verificano limitazioni delle risorse, controllare l'impostazione predefinita corrente. Se il 20% non è sufficiente, vedere la documentazione di SQL Server su come modificare questo valore.

Si applica a: SQL Server 2016 (13.x) R Services edizione Enterprise

Errore durante l'uso di sp_execute_external_script senza libc++.so in Linux

In un computer Linux pulito in cui non è installato libc++.so, l'esecuzione di una query sp_execute_external_script (SPEES) con Java o un linguaggio esterno ha esito negativo perché commonlauncher.so non è in grado di caricare libc++.so.

Ad esempio:

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

Questa operazione ha esito negativo con un messaggio simile al seguente:

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.

Nei log mssql-launchpadd verrà visualizzato un messaggio di errore simile al seguente:

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

Soluzione alternativa

È possibile usare una delle soluzioni alternative seguenti:

  1. Copiare libc++* da /opt/mssql/lib al percorso di sistema predefinito /lib64

  2. Aggiungere le voci seguenti a /var/opt/mssql/mssql.conf per esporre il percorso:

    [extensibility]
    readabledirectories = /opt/mssql
    

Si applica a: SQL Server 2019 (15.x) su Linux

Errori di installazione o aggiornamento nei server abilitati per FIPS

Se si installa SQL Server 2019 (15.x) con la funzionalità Servizi di Machine Learning ed estensioni del linguaggio o si aggiorna l'istanza di SQL Server in un server abilitato per FIPS (Federal Information Processing Standard), verrà visualizzato l'errore seguente:

Si è verificato un errore durante l'operazione di installazione della funzionalità di estensibilità con messaggio di errore: Creazione di AppContainer non riuscita con messaggio di errore NONE, stato Questa implementazione non fa parte degli algoritmi crittografici convalidati per Windows Platform FIPS.

Soluzione alternativa

Disabilitare FIPS prima dell'installazione di SQL Server 2019 (15.x) con la funzionalità Servizi di Machine Learning ed estensioni del linguaggio o dell'aggiornamento dell'istanza di SQL Server. Una volta completato l'aggiornamento o l'installazione, è possibile abilitare di nuovo FIPS.

Si applica a: SQL Server 2019 (15.x)

Librerie R che usano algoritmi, streaming o partizionamento specifici

Problema

Le limitazioni seguenti si applicano in SQL Server 2017 (14.x) con l'aggiornamento di runtime. Questo problema si applica all’edizione Enterprise.

  • Parallelismo: RevoScaleR e il parallelismo del thread dell'algoritmo MicrosoftML per gli scenari sono limitati a un massimo di due thread.
  • Partizionamento e streaming: gli scenari che coinvolgono il parametro @r_rowsPerRead passato a T-SQL sp_execute_external_script non vengono applicati.
  • Partizionamento e streaming: le origini dati RevoScaleR e MicrosoftML (ad esempio ODBC, XDF) non supportano la lettura di righe in blocchi per scenari di training o valutazione. Questi scenari portano sempre tutti i dati alla memoria per il calcolo e le operazioni sono associate alla memoria

Soluzione

La soluzione migliore consiste nell'eseguire l'aggiornamento a SQL Server 2019 (15.x). In alternativa è possibile continuare a usare SQL Server 2017 (14.x) con l'aggiornamento di runtime configurato usando RegisterRext.exe /configure, dopo aver completato le attività seguenti.

  1. Modificare il Registro di sistema per creare una chiave Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\150 e aggiungere un valore SharedCode con dati C:\Program Files\Microsoft SQL Server\150\Shared o la directory condivisa dell'istanza, come configurato.
  2. Creare una cartella C:\Program Files\Microsoft SQL Server\150\Shared and copy instapi140.dll dalla cartella C:\Program Files\Microsoft SQL Server\140\Shared alla cartella appena creata.
  3. Rinominare l'oggetto instapi140.dll in instapi150.dll nella nuova cartella C:\Program Files\Microsoft SQL Server\150\Shared.

Importante

Se si esegue la procedura precedente, è necessario rimuovere manualmente la chiave aggiunta prima dell'aggiornamento a una versione successiva di SQL Server.

Problemi di prestazioni del pool di processi in Servizi ML (R e Python)

Questa sezione contiene problemi noti e soluzioni alternative per l'uso di Servizi ML (R e Python) in SQL Server.

Prestazioni di avvio a freddo del pool di processi in Servizi ML

Al momento dell'esecuzione di sp_execute_external_script, il servizio launchpad avvia i processi satellite che avviano i runtime esterni, ad esempio R e Python. Per ammortizzare il costo di avvio, viene creato un pool di processi che può essere usato nell'esecuzione successiva di sp_execute_external_script. Questo pool di processi è specifico per questo utente, il database e il linguaggio usato (R o Python in Servizi ML).

Prima esecuzione della query

I processi satellite devono essere riscaldati quando sp_execute_external_script viene eseguita per la prima volta o dopo un periodo di inattività (i processi vengono terminati tramite un'attività di pulizia se non vengono usati per un periodo di tempo). L'avvio a freddo di tali processi in pool può essere lento (ad esempio, a causa di vincoli delle risorse).

Soluzione alternativa

Se le prestazioni della prima chiamata sono importanti, è consigliabile mantenere calde le query. Ad esempio, è possibile eseguire un'attività in background che genera una semplice query sp_execute_external_script prima che i processi scadano. Ad esempio, per mantenere a caldo le query R, è possibile eseguire periodicamente la query seguente.

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

Numero elevato di query simultanee

Se il numero di esecuzioni simultanee di sp_execute_external_script è superiore ai processi R/Python attivi nel pool, l'avvio a freddo dell'aggiunta di processi aggiuntivi al pool potrebbe essere lento (ad esempio, a causa di vincoli delle risorse).

Soluzione alternativa

Per risolvere il problema di prestazioni di ridimensionamento, è possibile inviare in batch più richieste, ad esempio tramite connessioni loopback o riscrivendo lo script per gestire più richieste. Inoltre, per gli scenari in tempo reale è possibile usare SQL PREDICT.

Problemi di esecuzione di script R

Questa sezione contiene informazioni sui problemi noti specifici dell'esecuzione di R in SQL Server, oltre ad alcuni problemi correlati alle librerie e agli strumenti R pubblicati da Microsoft, tra cui RevoScaleR.

Per informazioni su altri problemi noti che potrebbero influire sulle soluzioni R, vedere il sito di Machine Learning Server.

Avviso di accesso negato durante l'esecuzione di script R in SQL Server in un percorso non predefinito

Se l'istanza di SQL Server è stata installata in un percorso non predefinito, ad esempio all'esterno della cartella Program Files, viene generato l'avviso ACCESS_DENIED quando si tenta di eseguire script che installano un pacchetto. Ad esempio:

In normalizePath(path.expand(path), winslash, mustWork) : path[2]="~ExternalLibraries/R/8/1": Accesso negato

Il motivo è che una funzione R tenta di leggere il percorso e non riesce se il gruppo di utenti predefinito SQLRUserGroup non ha accesso in lettura. L'avviso generato non blocca l'esecuzione dello script R corrente, ma è possibile che l'avviso venga generato ripetutamente ogni volta che l'utente esegue qualsiasi altro script R.

Se SQL Server è stato installato nel percorso predefinito, questo errore non si verifica perché tutti gli utenti di Windows hanno autorizzazioni di lettura per la cartella Program Files.

Questo problema verrà risolto in una prossima versione del servizio. Come soluzione alternativa, concedere al gruppo SQLRUserGroup l'accesso in lettura per tutte le cartelle padre di ExternalLibraries.

Errore di serializzazione tra le versioni precedenti e nuove di RevoScaleR

Quando si passa un modello usando un formato serializzato a un'istanza di SQL Server remota, è possibile ricevere l'errore:

Errore in memDecompress(dati, tipo = decompressione) errore interno -3 in memDecompress(2).

Questo errore viene generato se il modello è stato salvato usando una versione recente della funzione di serializzazione, rxSerializeModel, ma l'istanza di SQL Server in cui si deserializza il modello ha una versione precedente delle API RevoScaleR, da SQL Server 2017 (14.x) CU 2 o versioni precedenti.

Come soluzione alternativa, è possibile aggiornare l'istanza di SQL Server 2017 (14.x) a CU3 o versione successiva.

L'errore non viene visualizzato se la versione dell'API è la stessa o se si sta spostando un modello salvato con una funzione di serializzazione precedente in un server che usa una versione più recente dell'API di serializzazione.

In altre parole, usare la stessa versione di RevoScaleR per le operazioni di serializzazione e deserializzazione.

Il punteggio in tempo reale non gestisce correttamente il parametro learningRate nei modelli di albero e foresta

Se si crea un modello usando un metodo di albero delle decisioni o di foresta delle decisioni e si specifica la velocità di apprendimento, è possibile che vengano visualizzati risultati incoerenti quando si usa sp_rxpredict o la funzione SQL PREDICT, rispetto all'uso di rxPredict.

La causa è un errore nell'API che elabora i modelli serializzati, limitato al parametro learningRate: ad esempio, in rxBTrees o

Questo problema verrà risolto in una prossima versione del servizio.

Limitazioni relative all'affinità processori per i processi R

Nella build della versione iniziale di SQL Server 2016 (13.x) era possibile impostare l'affinità processori solo per le CPU presenti nel primo gruppo K. Ad esempio, se il server è un computer a 2 socket con 2 gruppi K, per i processi R vengono usati solo i processori appartenenti al primo gruppo K. La stessa limitazione si applica quando si configura la governance delle risorse per processi di script R.

Questo problema è stato risolto in SQL Server 2016 (13.x) Service Pack 1. Si consiglia di eseguire l'aggiornamento alla versione più recente del servizio.

Si applica a: SQL Server 2016 (13.x) R Services (RTM version)

Non è possibile apportare modifiche ai tipi di colonna durante la lettura di dati in un contesto di calcolo di SQL Server

Se il contesto di calcolo è impostato sull'istanza di SQL Server, non è possibile usare l'argomento colClasses (o altri argomenti simili) per modificare il tipo di dati delle colonne presenti nel codice R.

L'istruzione seguente, ad esempio, causerebbe un errore se la colonna CRSDepTimeStr non fosse già un numero intero:

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

Come soluzione alternativa, è possibile riscrivere la query SQL in modo da usare CAST o CONVERT e presentare i dati in R usando il tipo di dati corretto. In generale, le prestazioni sono migliori quando si lavora con i dati usando SQL invece di modificare i dati nel codice R.

Si applica a: SQL Server 2016 (13.x) R Services

Limiti per le dimensioni dei modelli serializzati

Quando si salva un modello in una tabella di SQL Server, è necessario serializzare il modello e salvarlo in un formato binario. In teoria, le dimensioni massime di un modello che possono essere archiviate con questo metodo sono pari a 2 GB, ovvero le dimensioni massime delle colonne varbinary in SQL Server.

Se è necessario usare modelli più grandi, sono disponibili le soluzioni alternative seguenti:

  • Intervenire per ridurre le dimensioni del modello. Alcuni pacchetti R open source includono una grande quantità di informazioni nell'oggetto modello e gran parte di queste informazioni può essere rimossa per la distribuzione.

  • Usare la selezione delle funzionalità per rimuovere le colonne non necessarie.

  • Se si usa un algoritmo open source, prendere in considerazione un'implementazione simile usando l'algoritmo corrispondente in MicrosoftML o RevoScaleR. Questi pacchetti sono stati ottimizzati per gli scenari di distribuzione.

  • Dopo aver razionalizzato il modello e aver ridotto le dimensioni usando i passaggi precedenti, verificare se è possibile usare la funzione memCompress in R di base per ridurre le dimensioni del modello prima di passarlo a SQL Server. Questa opzione è consigliata quando il modello ha dimensioni prossime al limite di 2 GB.

  • Per i modelli più grandi, è possibile usare la funzionalità FileTable di SQL Server per archiviare i modelli, anziché usare una colonna varbinary.

    Per usare le tabelle FileTable, è necessario aggiungere un'eccezione del firewall, perché i dati archiviati nelle tabelle FileTable vengono gestiti dal driver del file system Filestream in SQL Server e le regole del firewall predefinite bloccano l'accesso ai file di rete. Per altre informazioni, vedere Abilitare i prerequisiti per la tabella FileTable.

    Dopo aver abilitato FileTable, per scrivere il modello è necessario ottenere un percorso da SQL tramite l'API FileTable e quindi scrivere il modello in tale posizione dal codice. Quando è necessario leggere il modello, ottenere il percorso da SQL Server e quindi chiamare il modello usando il percorso dallo script. Per altre informazioni, vedere Accedere alle tabelle FileTable con API di input/output dei file.

Evitare di cancellare i dati delle aree di lavoro durante l'esecuzione di codice R in un contesto di calcolo di SQL Server

Se si usa un comando R per cancellare oggetti dall'area di lavoro durante l'esecuzione di codice R in un contesto di calcolo di SQL Server oppure si cancellano i dati dell'area di lavoro nell'ambito di uno script R chiamato tramite sp_execute_external_script, è possibile che venga visualizzato questo errore: workspace object revoScriptConnection not found (oggetto revoScriptConnection dell'area di lavoro non trovato).

revoScriptConnection è un oggetto dell'area di lavoro R che contiene informazioni su una sessione R chiamata da SQL Server. Se, tuttavia, il codice R include un comando per cancellare i dati dell'area di lavoro, ad esempio rm(list=ls())), anche tutte le informazioni relative alla sessione e altri oggetti presenti nell'area di lavoro R vengono cancellati.

Come soluzione alternativa, evitare di cancellare in modo indiscriminato variabili e altri oggetti durante l'esecuzione di R in SQL Server. Anche se è un'operazione comune nella console R, la cancellazione dei dati dell'area di lavoro può avere conseguenze impreviste.

  • Per eliminare variabili specifiche, usare la funzione remove di R, ad esempio remove('name1', 'name2', ...)
  • Se devono essere eliminate più variabili, salvare i nomi delle variabili temporanee in un elenco ed eseguire periodicamente operazioni di Garbage Collection.

Limitazioni sui dati che possono essere forniti come input per uno script R

Non è possibile usare in uno script R i tipi seguenti di risultati delle query:

  • Dati da una query Transact-SQL che fanno riferimento alle colonne AlwaysEncrypted.

  • Dati da una query Transact-SQL che fanno riferimento alle colonne mascherate.

    Se è necessario usare dati mascherati in uno script R, una possibile soluzione consiste nel creare una copia dei dati in una tabella temporanea e usare invece tali dati.

L'uso di stringhe come fattori può causare un calo delle prestazioni

L'uso di variabili di tipo stringa come fattori può aumentare significativamente la quantità di memoria usata per le operazioni R. Si tratta di un problema noto di R in generale e sono disponibili molti articoli sull'argomento. Vedere, ad esempio, Factors are not first-class citizens in R, di John Mount, in R-bloggers oppure stringsAsFactors: An unauthorized biography, di Roger Peng.

Anche se il problema non è specifico di SQL Server, può influire significativamente sulle prestazioni del codice R eseguito in SQL server. Le stringhe vengono in genere archiviate come varchar o nvarchar e se una colonna di dati di tipo stringa ha molti valori univoci, il processo di conversione interna eseguito da R di questi valori in numeri interi e di nuovo in stringhe può causare errori di allocazione della memoria.

Se non è assolutamente necessario un tipo di dati stringa per altre operazioni, il mapping dei valori stringa a un tipo di dati numerico (integer) come parte della preparazione dei dati può risultare vantaggioso dal punto di vista delle prestazioni e della scalabilità.

Per una descrizione di questo problema e per altri suggerimenti, vedere Prestazioni per i servizi R - Ottimizzazione dei dati.

Gli argomenti varsToKeep e varsToDrop non sono supportati per le origini dati di SQL Server

Quando si usa la funzione rxDataStep per scrivere i risultati in una tabella, l'uso di varsToKeep e varsToDrop è un modo pratico per specificare le colonne da includere o escludere come parte dell'operazione. Questi argomenti non sono tuttavia supportati per le origini dati di SQL Server.

Supporto limitato per i tipi di dati SQL in sp_execute_external_script

Non tutti i tipi di dati supportati in SQL possono essere usati in R. Come soluzione alternativa, valutare la possibilità di eseguire il cast del tipo di dati non supportato in un tipo di dati supportato prima di passare i dati a sp_execute_external_script.

Per altre informazioni, vedere Librerie R e tipi di dati.

Possibile danneggiamento delle stringhe con stringhe Unicode nelle colonne varchar

Il passaggio di dati Unicode nelle colonne varchar da SQL Server a R/Python può causare il danneggiamento delle stringhe. Ciò è dovuto al fatto che la codifica per queste stringhe Unicode nelle regole di confronto di SQL Server potrebbe non corrispondere alla codifica UTF-8 predefinita usata in R/Python.

Per inviare dati di tipo stringa non ASCII da SQL Server a R/Python, usare la codifica UTF-8 disponibile in SQL Server 2019 (15.x) o usare il tipo nvarchar.

È possibile restituire solo un valore di tipo raw da sp_execute_external_script

Quando un tipo di dati binario (il tipo di dati raw di R) viene restituito da R, il valore deve essere inviato nel frame dei dati di output.

Con tipi di dati diversi da raw, è possibile restituire i valori dei parametri insieme ai risultati della stored procedure aggiungendo la parola chiave OUTPUT. Per altre informazioni, vedere Parametri.

Se si vogliono usare più set di output che includono valori di tipo raw, una delle possibili soluzioni alternative consiste nell'eseguire più chiamate della stored procedure o nell'inviare di nuovo i set di risultati a SQL Server tramite ODBC.

Perdita di precisione

Dato che Transact-SQL e R supportano vari tipi di dati, i tipi di dati numerici possono subire una perdita di precisione durante la conversione.

Per altre informazioni sulla conversione implicita dei tipi di dati, vedere Librerie e tipi di dati R.

Errore di ambito delle variabili quando si usa il parametro transformFunc

Per trasformare i dati durante la modellazione, è possibile passare un argomento transformFunc in una funzione, ad esempio rxLinmod o rxLogit. Tuttavia, le chiamate di funzione annidate possono causare errori di ambito nel contesto di calcolo di SQL Server, anche se le chiamate funzionano correttamente nel contesto di calcolo locale.

Il set di dati di esempio per l'analisi non contiene variabili

Ad esempio, si supponga di aver definito le due funzioni f e g nell'ambiente globale locale e che g chiami f. Nelle chiamate remote o distribuite che coinvolgono g, la chiamata a g potrebbe non riuscire con questo errore perché non è stato trovato f, anche se sono stati passati f e g alla chiamata remota.

Se si verifica questo problema, è possibile risolverlo incorporando la definizione di f all'interno della definizione di g, in qualsiasi punto prima che g chiamerebbe normalmente f.

Ad esempio:

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

Per evitare l'errore, riscrivere la definizione come segue:

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

Importazione e modifica dei dati con RevoScaleR

Quando vengono lette colonne varchar da un database, lo spazio vuoto viene tagliato. Per evitare questo problema, racchiudere le stringhe tra caratteri che non siano spazi vuoti.

Quando si usano funzioni come rxDataStep per creare tabelle di database con colonne varchar, la larghezza della colonna viene stimata in base a un campione di dati. Se la larghezza può variare, potrebbe essere necessario riempire tutte le stringhe fino a una lunghezza comune.

L'uso di una trasformazione per modificare il tipo di dati di una variabile non è supportato quando si usano chiamate ripetute a rxImport o a rxTextToXdf per importare e aggiungere righe, combinando più file di input in un singolo file .xdf.

Supporto limitato per rxExec

In SQL Server 2016 (13.x), la funzione rxExec fornita dal pacchetto RevoScaleR può essere usata solo in modalità single-threading.

Aumentare le dimensioni massime dei parametri per supportare rxGetVarInfo

Se si usano set di dati con un numero molto elevato di variabili (ad esempio, più di 40.000), impostare il flag max-ppsize quando si avvia R per usare funzioni come rxGetVarInfo. Il flag max-ppsize specifica le dimensioni massime dello stack di protezione dell'indicatore di misura.

Se si usa la console di R (ad esempio, RGui.exe o RTerm.exe), è possibile impostare il valore di max-ppsize su 500000 digitando:

R --max-ppsize=500000

Problemi con la funzione rxDTree

La funzione rxDTree attualmente non supporta le trasformazioni nella formula. In particolare, l'uso della sintassi F() per la creazione di fattori in tempo reale non è supportata. Tuttavia, verrà eseguito automaticamente il binning dei dati numerici.

I fattori ordinati vengono trattati proprio come i fattori in tutte le funzioni di analisi RevoScaleR eccetto rxDTree.

data.table come OutputDataSet in R

L'uso di data.table come OutputDataSet in R non è supportato in SQL Server 2017 (14.x) aggiornamento cumulativo 13 (CU13) e versioni precedenti. Potrebbe essere visualizzato il messaggio seguente:

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

L'uso di data.table come OutputDataSet in R è supportato in SQL Server 2017 (14.x) aggiornamento cumulativo 14 (CU14) e versioni successive.

L'esecuzione di uno script lungo non riesce durante l'installazione di una libreria

Se si esegue una sessione di script esterno con esecuzione prolungata e il dbo tenta in parallelo di installare una libreria in un database diverso, lo script potrebbe essere terminato.

Ad esempio, si supponga di eseguire questo script esterno sul database mastermaster:

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

Mentre dbo installa in parallelo una libreria in LibraryManagementFunctional:

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

Lo script esterno con esecuzione prolungata precedente sul database mastermaster verrà terminato con il messaggio di errore seguente:

Si è verificato un errore di script 'R' durante l'esecuzione di 'sp_execute_external_script' con HRESULT 0x800704d4.

Soluzione alternativa

Non eseguire l'installazione della libreria in parallelo alla query con esecuzione prolungata. Oppure eseguire nuovamente la query con esecuzione prolungata al termine dell'installazione.

Si applica a: SQL Server 2019 (15.x) solo su Linux e in cluster Big Data.

SQL Server smette di rispondere quando si eseguono script R contenenti l'esecuzione parallela

SQL Server 2019 (15.x) contiene una regressione che ha effetto sugli script R che usano l'esecuzione parallela. Sono esempi l'uso di rxExec con il contesto di elaborazione RxLocalPar e gli script che usano il pacchetto parallelo. Questo problema è causato da errori rilevati dal pacchetto parallelo durante la scrittura sul dispositivo Null nel corso dell'esecuzione in SQL Server.

Si applica a: SQL Server 2019 (15.x).

Perdita di precisione per i tipi di dati money/numeric/decimal/bigint

L'esecuzione di uno script R con sp_execute_external_script consente di usare i tipi di dati money, numeric, decimal e bigint come dati di input. Tuttavia, poiché i dati vengono convertiti nel tipo numerico di R, si verifica una perdita di precisione per i valori molto alti o con posizioni decimali.

  • money: A volte i valori dei centesimi potrebbero essere imprecisi e potrebbe essere generato un avviso: Avviso: non è possibile rappresentare con precisione i valori dei centesimi.
  • numeric/decimal: sp_execute_external_script con uno script R non supporta l'intera gamma del tipo di dati e modifica le ultime cifre decimali, in particolare in presenza di frazioni.
  • bigint: R supporta solo valori integer fino a 53 bit, quindi inizia a verificarsi una perdita di precisione.

Problemi con la funzione rxExecBy: la funzione rxExecBy non riesce a trovare il pacchetto installato

Quando viene chiamata la funzione rxExecBy, viene avviato un nuovo processo di runtime R. Questo nuovo processo non dispone di percorsi di libreria aggiornati, pertanto i pacchetti installati in percorsi diversi dal percorso predefinito della libreria non vengono trovati durante l'esecuzione.

Soluzione alternativa

Il percorso dei pacchetti R deve essere aggiornato in modo esplicito. Supponendo che i pacchetti siano installati nel percorso delle librerie esterne, è possibile usare lo script R seguente per aggiornare il percorso della libreria: .libPaths(c(Sys.getenv("MRS_EXTLIB_USER_PATH"), Sys.getenv("MRS_EXTLIB_SHARED_PATH"), .libPaths()))

Problemi di esecuzione di script Python

Questa sezione contiene informazioni sui problemi noti specifici dell'esecuzione di Python in SQL Server, oltre ai problemi correlati ai pacchetti Python pubblicati da Microsoft, tra cui revoscalepy e microsoftml.

La chiamata al modello con training preliminare non riesce se il percorso del modello è troppo lungo

Se sono stati installati i modelli con training preliminare in una versione preliminare di SQL Server 2017 (14.x), il percorso completo del file di modello sottoposto a training potrebbe essere troppo lungo per la lettura da parte di Python. Questa limitazione è stata risolta in una versione successiva del servizio.

Esistono diverse possibili soluzioni alternative:

  • Quando si installano i modelli con training preliminare, scegliere un percorso personalizzato.
  • Se possibile, installare l'istanza di SQL Server in un percorso di installazione personalizzato con un percorso più breve, ad esempio C:\SQL\MSSQL14.MSSQLSERVER.
  • Usare l'utilità di Windows Fsutil per creare un collegamento reale che esegue il mapping del file del modello a un percorso più breve.
  • Eseguire l'aggiornamento alla versione più recente del servizio.

Errore durante il salvataggio del modello serializzato in SQL Server

Quando si passa un modello a un'istanza di SQL Server remota e si tenta di leggere il modello binario usando la funzione rx_unserialize in revoscalepy, si potrebbe ricevere l'errore:

NameError: il nome 'rx_unserialize_model' non è definito

Questo errore viene generato se il modello è stato salvato usando una versione recente della funzione di serializzazione, ma l'istanza di SQL Server in cui si deserializza non riconosce l'API di serializzazione.

Per risolvere il problema, aggiornare l'istanza di SQL Server 2017 (14.x) a CU 3 o versione successiva.

L'impossibilità di inizializzare una variabile varbinary causa un errore in BxlServer

Se si esegue codice Python in SQL Server usando sp_execute_external_script e il codice include variabili di output di tipo varbinary(max), varchar(max) o tipi simili, la variabile deve essere inizializzata o impostata come parte dello script. In caso contrario, il componente di scambio di dati, BxlServer, genera un errore e smette di funzionare.

Questa limitazione verrà risolta in una prossima versione del servizio. Come soluzione alternativa, assicurarsi che la variabile sia inizializzata nello script Python. È possibile usare qualsiasi valore valido, come negli esempi seguenti:

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

Avviso di telemetria al completamento dell'esecuzione del codice Python

A partire da SQL Server 2017 (14.x) CU 2, il messaggio seguente potrebbe essere visualizzato anche se il codice Python viene eseguito in modo corretto:

Messaggi STDERR dallo script esterno:~PYTHON_SERVICES\lib\site-packages\revoscalepy\utils\RxTelemetryLoggerSyntaxWarning: telemetry_state usato prima della dichiarazione globale

Questo problema è stato risolto in SQL Server 2017 (14.x) aggiornamento cumulativo 3 (CU 3).

Tipi di dati numerici, decimali e monetari non supportati

A partire da SQL Server 2017 (14.x) aggiornamento cumulativo 12 (CU 12), i tipi di dati numerici, decimali e money in WITH RESULT SETS non sono supportati quando si usa Python con sp_execute_external_script. Potrebbero essere visualizzati i messaggi seguenti:

[Codice: 39004, Stato SQL: S1000] Si è verificato un errore di script 'Python' durante l'esecuzione di 'sp_execute_external_script' con HRESULT 0x80004004.

[Codice: 39019, Stato SQL: S1000] Si è verificato un errore dello script esterno:

Errore SqlSatelliteCall: tipo non supportato nello schema di output. Tipi supportati: bit, smallint, int, datetime, smallmoney, real e float. char e varchar sono parzialmente supportati.

Questo problema è stato risolto in SQL Server 2017 (14.x) aggiornamento cumulativo 14 (CU 14).

Errore di interprete non valido durante l'installazione di pacchetti Python con pip in Linux

In SQL Server 2019 (15.x), se si tenta di usare pip. Ad esempio:

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

Si riceverà questo errore:

bash: /opt/mssql/mlservices/runtime/python/bin/pip: /opt/microsoft/mlserver/9.4.7/bin/python/python: interprete non valido: il file o la directory non esiste

Soluzione alternativa

Installare pip da Python Package Authority (PyPA):

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

Elemento consigliato

Vedere Installare pacchetti Python con sqlmlutils.

Si applica a: SQL Server 2019 (15.x) su Linux

Non è possibile installare pacchetti Python con pip dopo l'installazione di SQL Server 2019 in Windows

Dopo l'installazione di SQL Server 2019 (15.x) su Windows, il tentativo di installare un pacchetto Python tramite pip da una riga di comando DOS avrà esito negativo. Ad esempio:

pip install quantfolio

Verrà restituito l'errore seguente:

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.(pip è configurato con percorsi che richiedono TLS/SSL, ma il modulo SSL in Python non è disponibile)

Si tratta di un problema specifico del pacchetto Anaconda. Il problema verrà risolto in una prossima versione del servizio.

Soluzione alternativa

Copiare i file seguenti:

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

dalla cartella
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\Library\bin

alla cartella
C:\Program Files\Microsoft SQL Server\MSSSQL15.MSSQLSERVER\PYTHON_SERVICES\DLLs

Aprire quindi un nuovo prompt della shell dei comandi DOS.

Si applica a: SQL Server 2019 (15.x) su Windows

Errore durante l'uso di sp_execute_external_script senza libc++abo.so in Linux

In un computer Linux pulito in cui non è installato libc++abi.so, l'esecuzione di una query sp_execute_external_script (SPEES) ha esito negativo con un errore "Non è possibile trovare il file o la directory".

Ad esempio:

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

Soluzione alternativa

Esegui questo comando:

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

Si applica a: SQL Server 2019 (15.x) su Linux

Errore generico durante l'esecuzione di sp_execute_external_script in Ubuntu 20.04 con SQL Server 2022 CU6 in Linux

L'installazione di SQL Server 2022 CU6 per Linux in Ubuntu 20.04 può causare l'errore seguente durante l'esecuzione di sp_execute_external_script per gli script R e Python:

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]

Soluzione alternativa

Eseguire il comando seguente per installare la dipendenza del pacchetto libssl-dev, che consente a SQL Server di risolvere le librerie condivise fornite dal sistema libssl e libcrypto.

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

Errore di creazione della regola del firewall in modprobe durante l'esecuzione di mssql-launchpadd in Linux

Quando si visualizzano i log di mssql-launchpadd usando sudo journalctl -a -u mssql-launchpadd, è possibile che venga visualizzato un errore di creazione di regole del firewall simile all'output seguente.

-- 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

Soluzione alternativa

Eseguire i comandi seguenti per configurare modprobe e riavviare il servizio Launchpad di SQL Server:

sudo modprobe ip6_tables
sudo systemctl restart mssql-launchpadd

Si applica a: SQL Server 2019 (15.x) e versioni successive su Linux

Non è possibile installare il pacchetto tensorflow usando sqlmlutils

Il pacchetto sqlmlutils viene usato per installare pacchetti Python in SQL Server 2019 (15.x). È necessario scaricare, installare e aggiornare Microsoft Visual C++ 2015-2019 Redistributable (x64). Il pacchetto tensorflow, tuttavia, non può essere installato usando sqlmlutils. Il pacchetto tensorflow dipende da una versione più recente di numpy rispetto alla versione installata in SQL Server. Tuttavia, numpy è un pacchetto di sistema preinstallato che sqlmlutils non può aggiornare quando viene eseguito un tentativo di installazione di tensorflow.

Soluzione alternativa

Usando un prompt dei comandi in modalità amministratore, eseguire il comando seguente, sostituendo "MSSQLSERVER" con il nome dell'istanza di SQL:

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

Se viene visualizzato un errore "TLS/SSL", vedere 7. Non è possibile installare pacchetti Python usando pip in precedenza in questo articolo.

Si applica a: SQL Server 2019 (15.x) su Windows

Revolution R Enterprise e Microsoft R Open

Questa sezione elenca i problemi specifici degli strumenti per le prestazioni, lo sviluppo e la connettività di R forniti da Revolution Analytics. Questi strumenti erano inclusi in precedenti versioni non definitive di SQL Server.

In generale, è consigliabile disinstallare queste versioni e installare la versione più recente di SQL Server o Microsoft R Server.

Revolution R Enterprise non è supportato

L'installazione affiancata di Revolution R Enterprise con qualsiasi altra versione di R Services (In-Database) non è supportata.

Se si ha una licenza esistente per Revolution R Enterprise, è necessario inserirla in un computer separato sia dall'istanza di SQL Server sia da qualsiasi workstation che si vuole usare per connettersi all'istanza di SQL Server.

Alcune versioni non definitive di R Services (In-Database) includono un ambiente di sviluppo R per Windows creato da Revolution Analytics. Questo strumento non è più disponibile e non è supportato.

Per compatibilità con R Services (In-Database) è consigliabile installare invece Microsoft R Client. Anche R Tools per Visual Studio e Visual Studio Code supportano le soluzioni Microsoft R.

Problemi di compatibilità con il driver ODBC di SQLite e RevoScaleR

La revisione 0.92 del driver ODBC SQLite è incompatibile con RevoScaleR. Le revisioni 0.88-0.91 e 0.93 e versioni successive sono note come compatibili.

Passaggi successivi