브라이틱스(Brightics)에서 Query Excutor
블럭으로
Extraction
※ 본 내용은 Load
함수 블럭에서 diamonds.csv 파일을 불러온 후에 진행한다.
※ diamonds.csv 다운받기 [클릭]
개요
이 포스팅은 앞서 소개한 Query Excutor
블럭 포스팅이후에 SQLite의 문법을 소개한다.
준비
다음과 같이 쿼리 입력 창을 연다.
일반 SQL쿼리는 테이블 명을 적는데 여기에서는 입력 테이블명이 #{DF(0)} 으로 지정되어 있다. 만약 두 번째 입력이 들어오는 경우 #{DF(1)} 으로 지정되는 것을 볼 수 있다. 그리고 #{DF(0)} 오른쪽에 입력단의 블럭이 표기된다. 지금은 #{DF(0)}은 Load
블럭에서 입력이 된 것을 알 수 있다.
하나의 입력만 있다면 크게 관계없지만, 두 개 이상의 입력이 있으면서 같은 명칭의 함수 블럭의 사용될 경우 어떤 입력이 어떤 데이터를 담고 있는지 확인하기 어려우니 상황에 따라 함수 블럭 이름을 변경하는 것을 권장한다.
단순 조회
기본 쿼리는 다음과 같다.
1 | SELECT * FROM #{DF(0)} |
SELECT 뒤에는 어떤 변수를 선택할 것인지 선언한다. 여기서는 * 을 사용하여 모든 변수를 선택하였다.
FROM 뒤에는 어떤 테이블(데이터)를 대상으로 연산을 수행할 것인지 명시한다. 여기에서는 #{DF(0)} 를 기재하여 Load
블럭의 출력인 다이아몬드 데이터를 대상으로 연산을 실시하였다.
위 코드의 실행 결과는 다음과 같다.
결과가 너무 많을 경우 다음과 같이 LIMIT 과 정수입력으로 그 결과를 제한할 수 있다.
1 | SELECT * FROM #{DF(0)} LIMIT 2 |
그리고 LIMIT 의 경우 앞에 어떤 코드가 오던 관계없이 가장 마지막에 배치하여 최종 출력 행 개수에 제한을 걸 수 있다.
변수의 선택
원하는 변수를 선택할 수 있다. 아스트리크(*) 대신 변수명과 쉼표를 사용하여 원하는 변수를 출력해보자.
1 | SELECT price, carat, cut FROM #{DF(0)} LIMIT 2 |
위와 같이 원하는 변수를 선택할 수 있으며, 선언한 순서에 따라 결과가 산출되게 된다.
변수명의 변경
alias는 별칭이라고 한다. 변수나 테이블에 별칭을 지정할 수 있는데 그 때 사용되는 것이 AS 이다. 다음과 같이 변수명 뒤에 AS 를 쓰고 이어서 원하는 변수명을 작성하면 변수명이 변경되어 출력된 것을 알 수 있다. 그리고 AS 의 경우 생략해도 가능하다. 코드의 가독성을 위해서라면 적어주는 것이 좋다.
1 | SELECT price AS p, carat kkk, cut FROM #{DF(0)} LIMIT 2 |
조건
WHERE 명령어를 활용하여 Filter
함수 블럭 처럼 데이터를 필터링 할 수 있다.
단일 조건
수치형 조건을 주는 경우는 다음과 같다.
1 | SELECT price, carat, cut FROM #{DF(0)} WHERE price >= 18500 |
문자형 조건을 주는 것은 다음과 같다. 다음은 cut 변수의 값이 “Ideal”인 행을 추출하는 코드이다.
1 | SELECT price, carat, cut FROM #{DF(0)} WHERE cut == 'Ideal' |
다음은 cut 변수의 값이 “Ideal”이 아닌 행을 추출하는 코드이다.
1 | SELECT price, carat, cut FROM #{DF(0)} WHERE cut != 'Ideal' |
복수 조건
두 조건을 동시에 만족하는 경우는 AND 를 사용한다.
1 | SELECT price, carat, cut FROM #{DF(0)} WHERE cut == 'Ideal' AND price <= 400 |
두 조건 중 하나만 만족하는 경우 OR 을 사용한다.
1 | SELECT price, carat, cut FROM #{DF(0)} WHERE cut == 'Ideal' OR cut == 'Good' |
파생 변수
단순 연산
price 변수와 carat 변수의 차를 구한다. 단, 수식을 그대로 사용하게 되면 변수명에 특수문자 등 허용되지 않는 문자가 삽입되는데 이는 향후 데이터 처리에 문제가 생길 수 있으니 AS 로 변수명을 바꾸어주는 것이 좋다.
1 | SELECT price, carat, cut, price - carat, price - carat AS diff FROM #{DF(0)} |
텍스트 처리
|| 를 사용하면 텍스트를 이어붙일 수 있다. 그리고 문자나 숫자를 하나만 사용하여 변수를 생성하는 경우 변수에 해당 값만 들어있는 변수를 만들 수 있다.
1 | SELECT cut || '!!!' AS cut_pasted, 'abc' AS char, 999 AS num FROM #{DF(0)} |
substr()
함수는 텍스트의 일부를 추출하는 함수이다. 다음의 코드에서 cut_sub 변수는 두 번째 위치 부터 두 글자를 뽑은 것이고, cut_fzero 변수는 입력값이 다섯 글자 미만일 경우 앞에 0을 붙이는 코드이다. 이 변수에 사용된 코드는 시간 데이터를 처리할 때 유용하다.
1 | SELECT cut, substr(cut, 2, 2) AS cut_sub, substr('0' || cut, -5) AS cut_fzero FROM #{DF(0)} |
이진 변수
Add Function Column
또는 Add Function Columns
함수 블럭에서 사용하는 CASE 구문을 사용할 수 있다. 다음의 코드는 cut 변수의 걊이 “Ideal” 이면 1, 그 이외에는 0이 있는 is_Ideal 변수를 만드는 코드이다.
1 | SELECT cut, CASE WHEN cut == 'Ideal' THEN 1 ELSE 0 END AS is_Ideal FROM #{DF(0)} |
요일 변수
strftime()
함수를 활용한다. 표준 날짜 데이터가 들어있는 변수에 다음과 같이 선언하면 각 기호에 맞는 정보를 추출할 수 있다.
- %d
: day of month(00)
- %f
: fractional seconds(SS.SSS)
- %H
: hour(00-24)
- %j
: day of year(001-366)
- %J
: Julian day number
- %m
: month(01-12)
- %M
: minute(00-59)
- %s
: seconds since 1970-01-01
- %S
: seconds(00-59)
- %w
: day of week 0-6 with Sunday==0
- %W
: week of year(00-53)
- %Y
: year(0000-9999)
상세 내용은 다음의 링크를 참조.
https://sqlite.org/lang_datefunc.html
그룹 연산
Statiscal Summary
블럭이나 Pivot
블럭으로 수행 가능한 그룹연산은 GROUP BY 코드로 수행할 수 있다. 다음의 코드는 세공수준별 가격의 평균을 구한 결과이다.
1 | SELECT cut, AVG(price) AS price_mean FROM #{DF(0)} GROUP BY cut |
세공수준별 색상별 다이아몬드 가격의 평균은 다음과 같이 구할 수 있다.
1 | SELECT cut, color, AVG(price) AS price_mean FROM #{DF(0)} GROUP BY cut, color |