적용 대상: 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 런타임은 데이터를 데이터 프레임으로 전달합니다. |
| 결과 집합 포함 | 절은 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); GOSELECT문을 사용하여 테이블을 쿼리합니다.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을 사용할 때 데이터 구조를 사용하는 방법을 알아보려면 다음 빠른 시작을 수행하세요.