Python kód v SQL Server jako ETL – Jak spustit přes T-SQL příkaz?

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;

5/5 - (2 votes)
Rubrika: SQL Administrace

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

Jmenuji se Honza Zedníček a působím jako data engineer freelancer. Během cca 10 let jsem zde shromáždil přes 600 IT case studies, průvodců, návodů a tipů určených zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Data Engineeringu, korporátních financí a reportingu. Zaměřuji se především na Microsoft technologie (on-prem i cloud) a různé synergické efekty v rámci jejich produktového portfolia pro dataře a finanční profesionály. Věnuji se také dalším platformám a významným hráčům z oblasti open source technologií. 🔥 Pokud vám tento článek pomohl, ocením referenci na vašem webu nebo zmínku v komunitě. A mám pro vás ještě tip: řešíte-li nějaký zapeklitý Excel problém, 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 *