• 23.11.2023
  • Ing. Jan Zedníček - Data Engineer & Controlling
  • 0

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;

zapnuti external scripts v sql server

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;

Rate this post

Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 Přihlašte se do naší Excel facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »

Leave a Reply

Your email address will not be published. Required fields are marked *