반응형
Recent Posts
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 데이터분석가 코딩테스트
- BigQuery
- 벡터
- 나의서양미술순례
- recommendation system
- 데이터분석
- Recsys
- Bayesian
- DataAnalyst
- mathematicalthinking
- SQL
- 오블완
- 잠재적결과
- 데이터 분석
- 네카라쿠배당토
- 글또10기
- 데이터분석가
- 인과추론 무작위 실험
- 독후감
- 선형대수학
- 빅쿼리
- 인과추론개요
- CausalInference
- 인과추론
- chatGPT
- 베이지안통계
- 실무로통하는인과추론
- 수학적해석학
- 코세라
- 티스토리챌린지
Archives
- Today
- Total
Derek 의 데이터 분석 성장기
[SQL] Bigquery : 사용자 정의 함수(UDF) 본문
반응형
1. UDF
SQL에서도 자주 사용하는 처리 방식을 함수로 만들 수 있다. 예를 들어, CASE WHEN 문을 매 쿼리마다 적용해야 한다.
CASE WHEN x>= 1 and x < 3 ....... WHEN x >= 3 and x < 5 ..... THEN 1 ELSE NULL 등 이 구문을 모든 쿼리 문마다 적용해야 한다고 생각해보자.
반복 작업으로 업무 효율성 및 가독성이 떨어진다. 이를 해결하기 위해 빅쿼리에는 사용자 정의 함수가 존재한다. 말 그대로 내가 함수를 직접 만드는것 이다.
CREATE TEMP FUNCTION AddFourAndDivide(x INT64, y INT64) # 함수 선언 : (변수명과 타입 지정)
RETURNS FLOAT64 # 리턴에는 타입을 지정, 아래부터는 사용하고 싶은 함수명
AS (
(x + 4) / y
); # 반드시 함수가 끝나고 나서는 ; 이 붙어야한다.
## 쿼리문 : 해당 쿼리문에 UDF를 적용한 모습
SELECT
val, AddFourAndDivide(val, 2)
FROM
UNNEST([2,3,5,8]) AS val;
위와 같이 숫자를 적용하는 것도 좋지만 개인적으론 위에서 언급한 CASE WHEN 문 같은 반복적인 작업을 함수로 만들어주는 게 좋다. Python, Java 등의 if 문과 else if 문을 구성할 수 있다.
아래가 그 예시이다.
CREATE OR REPLACE FUNCTION `your_project.your_dataset.bin_function`(x FLOAT64)
RETURNS STRING
LANGUAGE js AS """
if (x >= 2 && x < 4) {
return '2bins';
} else if (x >= 4 && x < 6) {
return '4bins';
} else if (x >= 6 && x < 8) {
return '6bins';
} else if (x >= 8 && x < 10) {
return '8bins';
} else if (x >= 10 && x < 12) {
return '10bins';
} else {
return 'out_of_range'; // You can change this to any default category
}
""";
전처리 방식이야 각자 다양하게 사용할 수 있지만, 위와 같은 Custom Function 을 적용할 경우 SQL에서도 가독성과 효율성을 높일 수 있기 때문에 장점이라 할 수 있다. 외쳐 갓 Bigquery
반응형
'Data > SQL - Bigquery' 카테고리의 다른 글
[SQL] Bigquery : 여러 조건으로 그룹화 하는 Grouping Sets (0) | 2025.01.05 |
---|---|
[Bigquery] Window 함수에 조건을 걸 수 있는 QUALIFY 함수 (0) | 2024.04.14 |
[SQL] 빅쿼리(Bigquery) 피보팅(Pivoting) (1) | 2024.03.27 |