Možností jak dostat data do databáze nebo datového skladu (prostě nějakého úložiště) je celá řada. SQL server od verze 2017 nabízí podporu pro python prostřednictvím “Machine Learning Services” featury, která nám potom umožňuje pouštět externí skripty přímo v SQL server v jazyce T-SQL.
To znamená, že si například můžeme vytvořit v SQL proceduru, která nám v jazyce python stáhne, vyčistí data a tyto data pak uloží do tabulky, kde s nimi dále můžeme pracovat už čistě v SQL (historizace, datasety, reporting). Python nám tedy může posloužit jako platforma a storage pro ETL procesy (včetně logiky) přímo v SQL server. To je pouze jeden ze scénářů. Pro příklady níže předpokládáme, že je na stroji nainstalován python.
Spuštění Python kódu v SQL přes xp_cmdshell
První možnosti, která už je s námi déle je xp_cmdshell. To je systémová procedura, která umožňuje spustit nějaký Command Prompt příkaz přes příkazovou řádku. Tuto proceduru nelze defaultně po instalaci SQL Server pouštět a je potřeba ji povolit. O tom, jak tuto proceduru povolit a že to představuje bezpečnostní riziko se dočtete tady – Jak zapnout cmdshell v SQL Server?
— Povolení spouštění Cmd Shell
sp_configure ‘show advanced options’, 1;
RECONFIGURE;
GO
sp_configure ‘xp_cmdshell’, 1;
RECONFIGURE;
GO
Nyní bychom měli mít možnost volat proceduru xp_cmdshell a přes něj pustit třeba Python skript, který nám vrátí naintalovanou verzi pythonu.
EXEC xp_cmdshell ‘python -c “import sys; print(sys.version)”‘;
Bohužel tento čánek píšu na macbooku, kde mám rozchozený SQL server přes Docker v kombinaci s Parallels a tím pádem musím používat linuxovou distribuci, ve které tento příkaz nespustím ze SQL serveru.
Python kód přes sp_execute_external_script
Dostáváme se k 2. možnosti a to je spuštění Pythonu přes systémovou proceduru, která je k dispozici přes již zmiňovanou featuru Machine Learning Services od verze SQL Server 2017.
Avšak jelikož se jedná opět o proceduru, která volá nějaký externí kód, který může dělat ledacos, tak tato možnost představuje bezpečnostní rizika. Je tedy stejně jako cmdshell defaultně vypnuta a musíme ji nejdříve povolit.
— Povolení External Scripts
sp_configure ‘external scripts enabled’, 1;
RECONFIGURE;
No a můžeme to rovnou vyzkoušet. Systémová procedurá přijímá parametry jazyk a skript.
Po testu uklidíme a vrátíme nastavení do původního stavu
— Povolení External Scripts
sp_configure ‘external scripts enabled’, 0;
RECONFIGURE;