SQL 변환 적용
중요
Machine Learning Studio(클래식)에 대한 지원은 2024년 8월 31일에 종료됩니다. 해당 날짜까지 Azure Machine Learning으로 전환하는 것이 좋습니다.
2021년 12월 1일부터 새로운 Machine Learning Studio(클래식) 리소스를 만들 수 없습니다. 2024년 8월 31일까지는 기존 Machine Learning Studio(클래식) 리소스를 계속 사용할 수 있습니다.
- ML Studio(클래식)에서 Azure Machine Learning으로 기계 학습 프로젝트 이동에 대한 정보를 참조하세요.
- Azure Machine Learning에 대한 자세한 정보.
ML Studio(클래식) 설명서는 사용 중지되며 나중에 업데이트되지 않을 수 있습니다.
데이터를 변환하는 입력 데이터 집합에서 SQLite 쿼리 실행
범주: 데이터 변환/조작
모듈 개요
이 문서에서는 Machine Learning Studio(클래식)에서 SQL 변환 적용 모듈을 사용하여 입력 데이터 세트 또는 데이터 세트에 SQL 쿼리를 지정하는 방법을 설명합니다.
SQL 복잡한 방법으로 데이터를 수정하거나 다른 환경에서 사용할 데이터를 유지해야 하는 경우에 유용합니다. 예를 들어 SQL 변환 적용 모듈을 사용하여 다음을 수행할 수 있습니다.
결과 테이블을 만들고 이식 가능 데이터베이스에 데이터 집합 저장
데이터 형식에 대한 사용자 지정 변환을 수행하거나 집계 만들기
SQL 쿼리 문을 실행하여 데이터를 필터링하거나 변경하고 쿼리 결과를 데이터 테이블로 반환
중요
이 모듈에서 사용되는 SQL 엔진은 SQLite입니다. SQLite 구문에 익숙하지 않은 경우 이 문서의 구문 및 사용 섹션 을 읽어보세요.
SQLite란?
SQLite는 C 프로그래밍 라이브러리에 포함된 공용 도메인 관계형 데이터베이스 관리 시스템입니다. SQLite는 웹 브라우저에서 로컬 저장소용으로 포함된 데이터베이스로 많이 선택됩니다.
SQLite는 원래 미해군에서 서버 없는 트랜잭션을 지원하기 위해 2000년에 설계되었습니다. 이는 관리 시스템이 없는 자체 포함된 데이터베이스 엔진이므로 구성 또는 관리가 필요 없습니다.
SQL 변환 적용 구성 방법
모듈은 최대 세 개의 데이터 집합을 입력으로 사용할 수 있습니다. 각 입력 포트에 연결된 데이터 세트를 참조하는 경우 이름 t1
, t2
, t3
을 사용합니다. 테이블 숫자는 입력 포트의 인덱스를 나타냅니다.
나머지 매개 변수는 SQLite 구문을 사용하는 SQL 쿼리입니다. 이 모듈은 SQLite 구문의 모든 표준 명령문을 지원합니다. 지원되지 않는 문의 목록은 기술 참고 사항 섹션을 참조하세요.
일반 구문 및 사용법
SQL 스크립트 텍스트 상자에 여러 줄을 입력하는 경우 세미콜론을 사용하여 각 문을 종료합니다. 그렇지 않으면 줄바꿈이 공백으로 변환됩니다.
예를 들어 다음 두 개의 문은 동일합니다.
SELECT * from t1;
SELECT * from t1;
각 줄의 시작 부분에 사용하거나 을 사용하여
--
텍스트를 묶어 주석을 추가할 수 있습니다/* */
.예를 들어 다음 문은 올바릅니다.
SELECT * from t1 /*WHERE ItemID BETWEEN 1 AND 100*/;
열 이름이 예약된 키워드의 이름을 복제하는 경우 SQL 스크립트 텍스트 상자 내의 텍스트에 구문 강조 표시가 적용됩니다. 혼동을 방지하려면 열 이름을 대괄호(Transact-SQL 규칙에 따라) 또는 백틱 또는 큰따옴표(ANSI SQL 규칙)로 묶어야 합니다.
예를 들어 헌혈 데이터 세트에 대한 다음 쿼리에서 Time 은 유효한 열 이름이지만 예약된 키워드이기도 합니다.
SELECT Recency, Frequency, Monetary, Time, Class FROM t1 WHERE Time between 3 and 20;
쿼리를 있는 그대로 실행하면 쿼리가 올바른 결과를 반환할 수 있지만 데이터 세트에 따라 오류가 반환될 수 있습니다. 다음은 문제를 방지하는 방법의 몇 가지 예입니다.
-- Transact-SQL SELECT [Recency], [Frequency], [Monetary], [Time], [Class] FROM t1 WHERE [Time] between 3 and 20; -- ANSI SQL SELECT "Recency", "Frequency", "Monetary", "Time", "Class" FROM t1 WHERE `Time` between 3 and 20;
참고
구문 강조 표시는 따옴표 또는 대괄호로 묶은 후에도 키워드에 남아 있습니다.
SQLite는 대/소문자를 구분하는 변형이 서로 다른 몇 가지 명령을 제외하고 대/소문자를 구분하지 않습니다(GLOB 및 glob).
SELECT 문
SELECT
문에서 식별자에서 금지된 공백 또는 기타 문자를 포함하는 열 이름은 큰따옴표, 대괄호 또는 백틱 문자(')로 묶어야 합니다.
예를 들어 이 쿼리는 Two-Class 붓꽃 데이터 세트를 t1
참조하지만 한 열 이름에는 금지된 문자가 포함되어 있으므로 열 이름은 따옴표로 묶습니다.
SELECT class, "sepal-length" FROM t1;
데이터 세트의 WHERE
값을 필터링하는 절을 추가할 수 있습니다.
SELECT class, "sepal-length" FROM t1 WHERE "sepal-length" >5.0;
SQLite 구문은 Transact-SQL 사용되는 키워드를 지원하지 TOP
않습니다. 대신 키워드 또는 FETCH
문을 사용할 LIMIT
수 있습니다.
예를 들어 Bike Rental 데이터 세트에서 이러한 쿼리를 비교합니다.
-- unsupported in SQLite
SELECT TOP 100 [dteday] FROM t1 ;
ORDER BY [dteday] DESC;
-- Returns top 100
SELECT [dteday] FROM t1 LIMIT 100 ;
ORDER BY [dteday] DESC;
-- Returns top 100. Note that FETCH is on a new line.
SELECT [dteday] FROM t1 - ;
FETCH FIRST 100 rows ONLY;
ORDER BY [dteday] DESC;
조인
다음 예제에서는 t1
에 해당하는 입력 포트에서 Restaurant Ratings 데이터 집합을 사용하고, t2
에 해당하는 입력 포트에서 Restaurant Features 데이터 집합을 사용합니다.
다음 문은 두 테이블을 조인하여 지정된 레스토랑 기능을 각 레스토랑에 대한 평균 등급과 결합하는 데이터 집합을 만듭니다.
SELECT DISTINCT(t2.placeid),
t2.name, t2.city, t2.state, t2.price, t2.alcohol,
AVG(rating) AS 'AvgRating'
FROM t1
JOIN t2
ON t1.placeID = t2.placeID
GROUP BY t2.placeid;
집계 함수
이 섹션에서는 SQLite를 사용하는 몇 가지 일반적인 SQL 집계 함수의 기본 예제를 제공합니다.
현재 지원되는 집계 함수는 다음과 SUM
TOTAL
COUNT
MIN
MAX
같습니다. AVG
다음 쿼리는 레스토랑의 평균 등급과 함께 레스토랑 ID가 포함된 데이터 집합을 반환합니다.
SELECT DISTINCT placeid,
AVG(rating) AS ‘AvgRating’,
FROM t1
GROUP BY placeid
문자열 사용
SQLite는 문자열을 연결하는 이중 파이프 연산자를 지원합니다.
다음 문은 두 개의 텍스트 열을 연결하여 하나의 새 열을 만듭니다.
SELECT placeID, name,
(city || '-' || state) AS 'Target Region',
FROM t1
경고
Transact-SQL 문자열 연결 연산자는 지원되지 않습니다. + (문자열 연결). 예를 들어 예제 쿼리의 ('city + '-' + state) AS 'Target Region'
식은 모든 값에 대해 0을 반환합니다.
그러나 이 데이터 형식에 대해 연산자가 지원되지 않더라도 Machine Learning 오류가 발생하지 않습니다. 실험에서 결과 데이터 집합을 사용하기 전에 SQL 변환 적용의 결과를 확인해야 합니다.
COALESCE 및 CASE
COALESCE
는 여러 인수를 순서대로 계산하고 NULL로 계산되지 않는 첫 번째 식의 값을 반환합니다.
예를 들어 Steel Annealing Multi-Class 데이터 집합에 대한 다음 쿼리는 상호 배타적인 값을 가진 것으로 간주되는 열 목록에서 null이 아닌 첫 번째 플래그를 반환합니다. 플래그가 없으면 문자열 “none”이 반환됩니다.
SELECT classes, family, [product-type],
COALESCE(bt,bc,bf,[bw/me],bl, "none") AS TemperType
FROM t1;
이 CASE
문은 값을 테스트하고 평가된 결과를 기반으로 새 값을 반환하는 데 유용합니다. SQLite는 문에 대해 CASE
다음 구문을 지원합니다.
CASE WHEN [condition] THEN [expression] ELSE [expression] END
CASE [expression] WHEN [value] THEN [expression] ELSE [expression] END
예를 들어 이전에 표시기 값으로 변환 모듈을 사용하여 true-false 값을 포함하는 집합 기능 열을 만들었습니다. 다음 쿼리는 여러 기능 열의 값을 단일 다중값 열로 축소합니다.
SELECT userID, [smoker-0], [smoker-1],
CASE
WHEN [smoker-0]= '1' THEN 'smoker'
WHEN [smoker-1]= '1' THEN 'nonsmoker'
ELSE 'unknown'
END AS newLabel
FROM t1;
예
기계 학습 실험에서 이 모듈을 사용하는 방법에 대한 예제는 Azure AI 갤러리에서 다음 샘플을 참조하세요.
- SQL 변환 적용: 레스토랑 등급, 레스토랑 기능 및 레스토랑 고객 데이터 세트를 사용하여 간단한 조인, 문 선택 및 집계 함수를 보여 줍니다.
기술 정보
이 섹션에는 구현 세부 정보, 팁, 자주 묻는 질문에 대한 답변이 포함되어 있습니다.
포트 1에는 항상 입력이 필요합니다.
입력 데이터 집합에 열 이름이 있는 경우 출력 데이터 집합의 열에서 해당 열 이름을 사용합니다.
입력 데이터 집합에 열 이름이 없으면 T1COL1, T1COL2, T1COL3 등의 명명 규칙을 사용하여 테이블에 열 이름이 자동으로 생성됩니다. 이 명명 규칙에서 숫자는 입력 데이터 집합의 각 열의 인덱스를 나타냅니다.
공백 또는 기타 특수 문자가 포함된 열 식별자의 경우
SELECT
또는WHERE
절에서 열을 참조할 때 항상 열 식별자를 대괄호 또는 큰따옴표로 묶어야 합니다.
지원되지 않는 문
SQLite는 대부분의 ANSI SQL 표준을 지원하지만 상용 관계형 데이터베이스 시스템에서 지원되는 많은 기능을 포함하고 있지 않습니다. 자세한 내용은 SQLite로 이해하는 SQL을 참조하세요. 또한 SQL 문을 만드는 경우 다음 제한 사항에 유의해야 합니다.
SQLite에서는 대부분의 관계형 데이터베이스 시스템에서와 같이 열에 형식을 할당하는 것이 아니라 값의 동적 형식 지정을 사용합니다. SQLite는 약하게 형식화되며 암시적 형식 변환을 허용합니다.
LEFT OUTER JOIN
은 구현되지만RIGHT OUTER JOIN
또는FULL OUTER JOIN
은 구현되지 않습니다.RENAME TABLE
및ADD COLUMN
문을ALTER TABLE
명령과 함께 사용할 수 있지만DROP COLUMN
,ALTER COLUMN
,ADD CONSTRAINT
등의 다른 절은 지원되지 않습니다.SQLite에서 VIEW를 만들 수 있지만 이후의 보기는 읽기 전용입니다. 보기에서
DELETE
,INSERT
또는UPDATE
문을 실행할 수 없습니다. 그러나 보기에서DELETE
,INSERT
또는UPDATE
를 시도할 때 발생하는 트리거를 만들고 트리거 본문에서 다른 작업을 수행할 수 있습니다.
공식 SQLite 사이트에서 제공하는 지원되지 않는 함수 목록 외에 지원되지 않는 다른 기능 목록은 다음 Wiki(SQLite - 지원되지 않는 SQL)에서 제공됩니다.
예상 입력
Name | 유형 | 설명 |
---|---|---|
Table1 | 데이터 테이블 | 입력 데이터 집합 1입니다. |
Table2 | 데이터 테이블 | 입력 데이터 집합 2입니다. |
Table3 | 데이터 테이블 | 입력 데이터 집합 3입니다. |
모듈 매개 변수
Name | 범위 | Type | 기본값 | 설명 |
---|---|---|---|---|
SQL 쿼리 스크립트 | any | StreamReader | SQL 쿼리 문 |
출력
Name | 유형 | 설명 |
---|---|---|
결과 데이터 집합 | 데이터 테이블 | 출력 데이터 세트 |
예외
예외 | 설명 |
---|---|
오류 0001 | 지정한 데이터 집합 열 중 하나 이상을 찾을 수 없으면 예외가 발생합니다. |
오류 0003 | 하나 이상의 입력 데이터 집합이 Null이거나 비어 있는 경우 예외가 발생합니다. |
오류 0069 | SQL 논리 오류 또는 누락된 데이터베이스 |
Studio(클래식) 모듈과 관련된 오류 목록은 Machine Learning 오류 코드를 참조하세요.
API 예외 목록은 Machine Learning REST API 오류 코드를 참조하세요.