# 스케쥴 쿼리(Schedule Query)

쿼리를 주기적으로 실행하고 싶은 경우 사용할 수 있는 기능입니다.

하루 단위로 쿼리를 실행해 테이블로 저장하고 싶은 경우에도 사용할 수 있습니다.



# 스케쥴 쿼리 생성하기

최초엔 BigQuery Data Transfer API 사용을 클릭해야 합니다.



특정 쿼리를 실행한 후, 쿼리 예약을 클릭하면 스케쥴 쿼리를 생성할 수 있습니다.

예제 쿼리

WITH example_data AS(
  SELECT 
    'kyle' AS name,
    ['Python', 'SQL', 'R', 'Julia', 'Go'] AS preferred_language, 
    31 AS age
UNION ALL
  SELECT 
    'max' AS name,
    ['Python', 'SQL', 'Scala', 'Java', 'Kotlin'] AS preferred_language, 
    29 AS age
UNION ALL
  SELECT
    'yun' AS name,
    ['Python', 'SQL'] AS preferred_language, 
    28 AS age
), 
sample AS (
  SELECT 
    *,
    ARRAY_LENGTH(preferred_language) AS preferred_language_len
  FROM example_data
)

SELECT
 *
FROM sample

쿼리 예약 버튼을 클릭하면 아래와 같이 나옵니다.



쿼리 이름을 지정하고, 반복 빈도(시간별, 매일, 매주, 매월, 커스텀, 요청 시), 쿼리 결과를 저장할 위치, 저장할 Table의 Partition 컬럼 명시 등을 합니다

테이블에 APPEND(추가)할지, 테이블에 덮어쓰기(OVERWRITE)할지 설정할 수 있습니다.

TIP

파티션 컬럼과 같이 사용하면 테이블에 덮어쓰기해서 추가되는 증분 데이터만 저장할 수 있습니다.

테이블 APPEND인 경우 스케쥴 쿼리가 여러번 실행되는 경우 중복 데이터가 쌓일 수 있습니다.

파티션을 설정한 후, 파티션된 테이블에 덮어쓰기하면 파티션 컬럼에 해당되는 데이터만 저장됩니다

TIP

이 기능은 개발 리소스가 부족한 경우 사용하는 것을 추천합니다. 스케쥴 쿼리를 설정해둔 사람이 퇴사할 경우 스케쥴 쿼리가 정상적으로 동작하지 않습니다.

데이터 엔지니어링팀이 있다면 Airflow (opens new window) 사용을 추천합니다.



# 쿼리 파라미터 설정하기

매일 실행하지만, 실행하는 시간을 쿼리에 적용하고 싶은 경우 쿼리 파라미터를 설정하면 됩니다. 파라미터 사용할 경우 BigQuery 콘솔에선 실행되지 않습니다. Query parameter 'run_time' not found 오류가 발생합니다. 스케쥴 쿼리로 설정해두면 오류가 없이 실행됩니다.

  • @run_time : TIMESTAMP로 UTC로 표현됩니다. 실행하기로 의도한 시간을 의미합니다. 실제 실행 시간은 약간의 딜레이가 있을 수 있습니다
  • @run_date : 실행하기로 의도한 DATE입니다
SELECT @run_time AS time,
  title,
  author,
  text
FROM `bigquery-public-data.hacker_news.stories`
LIMIT
  1000

다음과 같이 테이블에도 파라미터(매개변수)를 사용할 수 있습니다



# 스케쥴 쿼리 확인하기

BigQuery Conosle에서 Schedule Query 혹은 예약된 쿼리를 클릭하면 현재 등록된 스케쥴 쿼리를 확인할 수 있습니다.

등록된 스케쥴 쿼리는 다음처럼 보이고, 스케쥴 쿼리의 이름을 누르면 상세한 내용을 확인할 수 있습니다.



우측에 백필 예약은 스케쥴 쿼리를 한번 실행하거나, 과거 특정 날로 예약(Backfill)할 수 있습니다.



과거 4일 실행한 후, 실행 기록을 확인하면 다음처럼 실행 로그, 실행일 등을 확인할 수 있습니다.



# 참고 자료