빠른 시작: SQL 기계 학습에서 간단한 Python 스크립트를 실행합니다.
적용 대상: SQL Server 2017(14.x) 이상 Azure SQL Managed Instance
이 빠른 시작에서는 SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services 또는 SQL Server 빅 데이터 클러스터를 사용하여 간단한 Python 스크립트 세트를 실행합니다. 저장 프로시저 sp_execute_external_script를 사용하여 SQL Server 인터페이스에서 스크립트를 실행하는 방법을 알아봅니다.
필수 조건
이 빠른 시작을 실행하려면 다음과 같은 필수 구성 요소가 필요합니다.
다음 플랫폼 중 하나의 SQL Database:
- SQL Server Machine Learning Services. 설치는 Windows 설치 가이드 또는 Linux 설치 가이드를 참조하세요.
- SQL Server 2019 빅 데이터 클러스터 SQL Server 2019 빅 데이터 클러스터에서 Machine Learning Services 사용을 참조하세요.
- Azure SQL Managed Instance Machine Learning Services 자세한 내용은 Azure SQL Managed Instance Machine Learning Services 개요를 참조하세요.
Python 스크립트가 포함된 SQL 쿼리를 실행하기 위한 도구. 이 빠른 시작에서는 Azure Data Studio를 사용합니다.
간단한 스크립트 실행
Python 스크립트를 실행하려면 sp_execute_external_script 시스템 저장 프로시저에 인수로 전달합니다. 이 시스템 저장 프로시저는 SQL 기계 학습 컨텍스트에서 Python 런타임을 시작하고, Python에 데이터를 전달하고, Python 사용자 세션을 안전하게 관리하고, 모든 결과를 클라이언트에 반환합니다.
다음 단계에서는 데이터베이스에서 이 예제 Python 스크립트를 실행합니다.
a = 1
b = 2
c = a/b
d = a*b
print(c, d)
SQL 인스턴스에 연결된 Azure Data Studio에서 새 쿼리 창을 엽니다.
전체 Python 스크립트를
sp_execute_external_script
저장 프로시저에 전달합니다.스크립트는
@script
인수를 통해 전달됩니다.@script
인수 내의 모든 항목은 유효한 Python 코드여야 합니다.EXECUTE sp_execute_external_script @language = N'Python' , @script = N' a = 1 b = 2 c = a/b d = a*b print(c, d) '
올바른 결과가 계산되고 Python
print
함수가 결과를 메시지 창에 반환합니다.이 도구는 다음과 같습니다.
결과
STDOUT message(s) from external script: 0.5 2
Hello World 스크립트 실행
일반적인 예제 스크립트는 "Hello World" 문자열만 출력하는 스크립트입니다. 다음 명령을 실행합니다.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'OutputDataSet = InputDataSet'
, @input_data_1 = N'SELECT 1 AS hello'
WITH RESULT SETS(([Hello World] INT));
GO
sp_execute_external_script
저장 프로시저에 대한 입력은 다음과 같습니다.
입력 | 설명 |
---|---|
@language | 호출할 언어 확장을 정의합니다(이 경우에는 Python). |
@script | Python 런타임으로 전달되는 명령을 정의합니다. 전체 Python 스크립트는 유니코드 텍스트로 이 인수에 묶어야 합니다. nvarchar 형식의 변수에 텍스트를 추가한 다음 변수를 호출할 수도 있습니다. |
@input_data_1 | 쿼리에서 반환된 데이터는 Python 런타임에 전달되고, R 런타임은 데이터를 데이터 프레임으로 전달합니다. |
WITH RESULT SETS | 절은 SQL 기계 학습에 대해 반환된 데이터 테이블의 스키마를 정의하여 "Hello World"를 열 이름으로 추가하고 데이터 형식으로 int를 추가합니다. |
이 명령은 다음 텍스트를 출력합니다.
Hello World |
---|
1 |
입력 및 출력을 사용하세요.
기본적으로 sp_execute_external_script
는 단일 데이터 세트를 입력으로 허용하며, 일반적으로 유효한 SQL 쿼리 형식으로 제공합니다. 그런 후 단일 Python 데이터 프레임을 출력으로 반환합니다.
지금은 sp_execute_external_script
의 기본 입력 및 출력 변수(InputDataSet 및 OutputDataSet)를 사용해 보겠습니다.
테스트 데이터의 작은 테이블을 만듭니다.
CREATE TABLE PythonTestData (col1 INT NOT NULL) INSERT INTO PythonTestData VALUES (1); INSERT INTO PythonTestData VALUES (10); INSERT INTO PythonTestData VALUES (100); GO
SELECT
문을 사용하여 테이블을 쿼리합니다.SELECT * FROM PythonTestData
결과
다음 Python 스크립트를 실행합니다.
SELECT
문을 사용하여 테이블에서 데이터를 검색하고 Python 런타임을 통해 이를 전달하고 데이터를 데이터 프레임으로 반환합니다.WITH RESULT SETS
절은 SQL에 대한 반환된 데이터 테이블의 스키마를 정의하고, 열 이름 NewColName을 추가합니다.EXECUTE sp_execute_external_script @language = N'Python' , @script = N'OutputDataSet = InputDataSet;' , @input_data_1 = N'SELECT * FROM PythonTestData;' WITH RESULT SETS(([NewColName] INT NOT NULL));
결과
이제 입력 및 출력 변수의 이름을 변경합니다. 기본 입력 및 출력 변수 이름은 InputDataSet 및 OutputDataSet이며 다음 스크립트는 이름을 SQL_in 및 SQL_out으로 변경합니다.
EXECUTE sp_execute_external_script @language = N'Python' , @script = N'SQL_out = SQL_in;' , @input_data_1 = N'SELECT 12 as Col;' , @input_data_1_name = N'SQL_in' , @output_data_1_name = N'SQL_out' WITH RESULT SETS(([NewColName] INT NOT NULL));
Python은 대/소문자 구분/소문자를 구분합니다. Python 스크립트(SQL_out, SQL_in)에 사용되는 입력 및 출력 변수는 대/소문자를 포함하여
@input_data_1_name
및@output_data_1_name
으로 정의된 이름과 일치해야 합니다.팁
하나의 입력 데이터 세트만 매개 변수로 전달할 수 있으며 하나의 데이터 세트만 반환할 수 있습니다. 단, Python 코드 내에서 다른 데이터 세트를 호출할 수 있으며 데이터 세트 외에도 다른 형식의 출력을 반환할 수 있습니다. 또한 모든 매개 변수에 OUTPUT 키워드를 추가하여 결과와 함께 반환되게 만들 수 있습니다.
입력 데이터 없이 Python 스크립트만 사용하여 값을 생성할 수도 있습니다(
@input_data_1
이 공백으로 설정됨).다음 스크립트는 "hello" 및 "world" 텍스트를 출력합니다.
EXECUTE sp_execute_external_script @language = N'Python' , @script = N' import pandas as pd mytextvariable = pandas.Series(["hello", " ", "world"]); OutputDataSet = pd.DataFrame(mytextvariable); ' , @input_data_1 = N'' WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));
결과
@script를 입력" />
팁
Python은 선행 공백을 사용하여 문을 그룹화합니다. 따라서 이전 스크립트와 같이 포함된 Python 스크립트가 여러 줄에 걸쳐 있는 경우 SQL 명령과 일치하도록 Python 명령을 들여쓰지 마세요. 예를 들어 이 스크립트는 다음과 같은 오류를 생성합니다.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import pandas as pd
mytextvariable = pandas.Series(["hello", " ", "world"]);
OutputDataSet = pd.DataFrame(mytextvariable);
'
, @input_data_1 = N''
WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));
Python 버전 확인
서버에 설치된 Python 버전을 확인하려면 다음 스크립트를 실행합니다.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import sys
print(sys.version)
'
GO
Python print
함수는 메시지 창에 버전을 반환합니다. 여기에서는 아래 출력 창에서 Python 버전 3.5.2가 설치된 것을 확인할 수 있습니다.
결과
STDOUT message(s) from external script:
3.5.2 |Continuum Analytics, Inc.| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]
Python 패키지 나열
Microsoft는 SQL Server 2016(13.x), SQL Server 2017(14.x) 및 SQL Server 2019(15.x)에서 Machine Learning Services로 사전 설치된 여러 Python 패키지를 제공합니다. SQL Server 2022(16.x)에서는 필요에 따라 사용자 지정 Python 런타임 및 패키지를 다운로드하여 설치할 수 있습니다.
버전을 포함하여 설치된 Python 패키지 목록을 보려면 다음 스크립트를 실행합니다.
EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import pkg_resources
import pandas
dists = [str(d) for d in pkg_resources.working_set]
OutputDataSet = pandas.DataFrame(dists)
'
WITH RESULT SETS(([Package] NVARCHAR(max)))
GO
목록은 Python의 pkg_resources.working_set
에서 온 것이며 데이터 프레임으로 SQL에 반환됩니다.
다음 단계
SQL 기계 학습에서 Python을 사용할 때 데이터 구조를 사용하는 방법을 알아보려면 다음 빠른 시작을 수행하세요.