Bigquery 에서 반복문 사용법
Bigquery에서 반복문을 활용해 반복 작업을 효율적으로 수행할 수 있다
종류와 관계없이 일반적인 언어의 반복문 제어와 비슷하므로 쉽게 적응해서 사용 가능하다.
지원하는 Loop 종류
- LOOP
- REPEAT
- WHILE
- FOR .. IN
LOOP
기본 문법
LOOP
/* SQL */
END LOOP;
LOOP와 END LOOP; 내에 반복이 필요한 SQL구문을 써준다
조건을 만족할 때까지 반복 수행할 때 유용
활용 예시
DECLARE x INT64 DEFAULT 0;
LOOP
SET x = x + 1;
IF x >= 10 THEN
LEAVE;
END IF;
END LOOP;
SELECT x;
DECLARE를 활용해 LOOP 내에서 사용할 변수를 선언한 후 LOOP 실행
Bigquery에서 LEAVE는 BREAK와 같은 기능을 수행하므로 둘 중 아무거나 써도 무방하다.
참고로 흐름제어는 BREAK(LEAVE), CONTINUE(ITERATE)로 할 수 있다.
REPEAT
기본 문법
REPEAT
sql_statement_list
UNTIL boolean_condition
END REPEAT;
REPEAT은 UNTIL과 함께 사용하며 UNTIL에 나와있는 조건식이 TRUE가 되기 전까지 반복된다.
WHILE 문과 유사
활용 예시
DECLARE x INT64 DEFAULT 0;
REPEAT
SET x = x + 1;
SELECT x;
UNTIL x >= 3
END REPEAT;
WHILE
기본 문법
WHILE boolean_expression DO
sql_statement_list
END WHILE;
일반적인 WHILE문 사용법과 동일하다
다만 주의사항으로
BEGIN/END, IF/ELSE/END IF, WHILE/END WHILE과 같은 블록과 조건문의 최대 중첩 수준은 50 이다.
FOR .. IN
기본 문법
FOR loop_variable_name IN (table_expression)
DO
sql_expression_list
END FOR;
FOR .. IN 은 IN 뒤에 나오는 table_statement 에 있는 데이터를 대상으로 반복을 할 수 있는 구문이다.
여기서 주의해야할 점은 loop_variable_name 이 하나의 struct라는 점이다.
table_statement에서 컬럼 하나만 가져온다고 해도 loop_variable_name .해당컬럼명 으로 struct에 접근하듯이 사용해야 한다.
활용 예시
FOR record IN
(SELECT word, word_count
FROM bigquery-public-data.samples.shakespeare
LIMIT 5)
DO
SELECT record.word, record.word_count;
END FOR;
여기서 word, word_count 컬럼이 record 라는 struct안에 들어있는 형태로 반환되고, record.word, record.word_count 등으로 접근하는 것을 볼 수 있다.