다음을 통해 공유


SQL 변환 적용

중요

Machine Learning Studio(클래식)에 대한 지원은 2024년 8월 31일에 종료됩니다. 해당 날짜까지 Azure Machine Learning으로 전환하는 것이 좋습니다.

2021년 12월 1일부터 새로운 Machine Learning Studio(클래식) 리소스를 만들 수 없습니다. 2024년 8월 31일까지는 기존 Machine Learning Studio(클래식) 리소스를 계속 사용할 수 있습니다.

ML Studio(클래식) 설명서는 사용 중지되며 나중에 업데이트되지 않을 수 있습니다.

데이터를 변환하는 입력 데이터 집합에서 SQLite 쿼리 실행

범주: 데이터 변환/조작

참고

적용 대상: Machine Learning Studio(클래식) 전용

유사한 끌어서 놓기 모듈은 Azure Machine Learning 디자이너에서 사용할 수 있습니다.

모듈 개요

이 문서에서는 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 집계 함수의 기본 예제를 제공합니다.

현재 지원되는 집계 함수는 다음과 SUMTOTALCOUNTMINMAX같습니다. 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 TABLEADD 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 오류 코드를 참조하세요.

참고 항목

조작
데이터 변환
전체 모듈 목록