Br) 함수 블럭 - Query Executor(실습)

Br) 함수 블럭 - Query Executor(실습)

브라이틱스(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

첫 2개 row 출력 결과

그리고 LIMIT 의 경우 앞에 어떤 코드가 오던 관계없이 가장 마지막에 배치하여 최종 출력 행 개수에 제한을 걸 수 있다.

변수의 선택

원하는 변수를 선택할 수 있다. 아스트리크(*) 대신 변수명과 쉼표를 사용하여 원하는 변수를 출력해보자.

1
SELECT price, carat, cut FROM #{DF(0)} LIMIT 2

3개 변수 선택 결과

위와 같이 원하는 변수를 선택할 수 있으며, 선언한 순서에 따라 결과가 산출되게 된다.

변수명의 변경

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'

문자형 단일 조건 결과 1

다음은 cut 변수의 값이 “Ideal”이 아닌 행을 추출하는 코드이다.

1
SELECT price, carat, cut FROM #{DF(0)} WHERE cut != 'Ideal'

문자형 단일 조건 결과 2

복수 조건

두 조건을 동시에 만족하는 경우는 AND 를 사용한다.

1
SELECT price, carat, cut FROM #{DF(0)} WHERE cut == 'Ideal' AND price <= 400

문자형 복수 조건 결과 1

두 조건 중 하나만 만족하는 경우 OR 을 사용한다.

1
SELECT price, carat, cut FROM #{DF(0)} WHERE cut == 'Ideal' OR cut == 'Good'

문자형 복수 조건 결과 2

파생 변수

단순 연산

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)}

파생 변수 텍스트 처리 결과 1

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)}

파생 변수 텍스트 처리 결과 2

이진 변수

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

복수 변수 그룹 연산 결과

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×