SQL 변환 적용

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

범주: 데이터 변환/조작

참고

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

이 콘텐츠는 Studio (클래식)에만 해당 됩니다. Azure Machine Learning 디자이너에는 비슷한 끌어서 놓기 모듈이 추가 되었습니다. 이 문서에서는 두 가지 버전을 비교 하는방법에 대해 자세히 알아보세요.

모듈 개요

이 문서에서는 Azure 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 Iri 데이터 집합을 참조 t1 하지만 하나의 열 이름에 금지 된 문자가 포함 되어 있으므로 열 이름이 따옴표로 묶여 있습니다.

SELECT class, "sepal-length" FROM t1;  

WHERE데이터 집합의 값을 필터링 하는 절을 추가할 수 있습니다.

SELECT class, "sepal-length" FROM t1 WHERE "sepal-length" >5.0;  

SQLite 구문은 TOP transact-sql에서 사용 되는 키워드를 지원 하지 않습니다. 대신 LIMIT 키워드 또는 문을 사용할 수 있습니다 FETCH .

예를 들어 자전거 임대 데이터 집합에서 이러한 쿼리를 비교 합니다.

-- 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 집계 함수에 대 한 기본 예를 제공 합니다.

현재 지원 되는 집계 함수는 AVG , COUNT ,,, MAX MIN SUM , TOTAL 입니다.

다음 쿼리는 레스토랑의 평균 등급과 함께 레스토랑 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을 반환합니다.

그러나 이 데이터 형식에 대해 연산자가 지원되지 않는 경우에도 Azure 기계 학습에서 오류는 발생하지 않습니다. 실험에서 결과 데이터 집합을 사용하기 전에 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 Gallery에서 다음 샘플을 참조 하세요.

  • SQL 변환 적용: 식당 등급, 식당 기능 및 식당 고객 데이터 집합을 사용 하 여 간단한 조인, select 문 및 집계 함수를 보여 줍니다.

기술 참고 사항

이 섹션에는 구현 세부 정보, 팁 및 질문과 대답 (faq)이 포함 되어 있습니다.

  • 포트 1에는 항상 입력이 필요 합니다.

  • 입력 데이터 집합에 열 이름이 있는 경우 출력 데이터 집합의 열에서 해당 열 이름을 사용합니다.

    입력 데이터 집합에 열 이름이 없으면 T1COL1, T1COL2, T1COL3 등의 명명 규칙을 사용하여 테이블에 열 이름이 자동으로 생성됩니다. 이 명명 규칙에서 숫자는 입력 데이터 집합의 각 열의 인덱스를 나타냅니다.

  • 공백 또는 기타 특수 문자를 포함 하는 열 식별자의 경우 또는 절에서 열을 참조할 때 항상 열 식별자를 대괄호 또는 큰따옴표로 묶어야 SELECT WHERE 합니다.

지원 되지 않는 문

SQLite는 대부분의 ANSI SQL 표준을 지원하지만 상용 관계형 데이터베이스 시스템에서 지원되는 많은 기능을 포함하고 있지 않습니다. 자세한 내용은 SQLite의 이해를 참조 하십시오. 또한 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

예상 입력

속성 유형 설명
Table1 데이터 테이블 입력 데이터 집합 1입니다.
Table2 데이터 테이블 입력 데이터 집합 2입니다.
Table3 데이터 테이블 입력 데이터 집합 3입니다.

모듈 매개 변수

속성 범위 Type 기본값 설명
SQL 쿼리 스크립트 any StreamReader SQL 쿼리 문

출력

속성 유형 설명
결과 데이터 집합 데이터 테이블 출력 데이터 세트

예외

예외 설명
오류 0001 지정한 데이터 집합 열 중 하나 이상을 찾을 수 없으면 예외가 발생합니다.
오류 0003 하나 이상의 입력 데이터 집합이 Null이거나 비어 있는 경우 예외가 발생합니다.
오류 0069 SQL 논리 오류 또는 누락 된 데이터베이스

스튜디오 (클래식) 모듈과 관련 된 오류 목록은 Machine Learning 오류 코드를 참조 하세요.

API 예외 목록은 Machine Learning REST API 오류 코드를 참조 하세요.

참고 항목

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