쿼리 예약

이 페이지에서는 BigQuery에서 반복 쿼리의 일정을 예약하는 방법을 설명합니다.

개요

쿼리가 반복적으로 실행되도록 일정을 예약할 수 있습니다. 예약된 쿼리는 표준 SQL로 작성되어야 하며 데이터 정의 언어(DDL)DML 문을 포함할 수 있습니다. 쿼리 문자열과 대상 테이블을 매개변수화할 수 있으므로, 쿼리 결과를 날짜와 시간별로 정리할 수 있습니다.

시작하기 전에

예약된 쿼리를 만들기 전에 다음을 수행하세요.

  • 예약된 쿼리는 BigQuery Data Transfer Service의 기능을 사용합니다. BigQuery Data Transfer Service 사용 설정에 필요한 모든 작업을 완료했는지 확인합니다.

  • 기본 BigQuery 웹 UI를 사용하여 예약된 쿼리를 만들려면 권한 창을 볼 수 있도록 bigquery.cloud.google.com에서 브라우저 팝업을 허용합니다. 예약된 쿼리를 관리하는 BigQuery Data Transfer Service 권한을 허용해야 합니다.

필수 권한

쿼리를 예약하기 전에 다음 안내를 따르세요.

  • 전송을 만드는 사람에게 다음과 같은 BigQuery 필수 권한이 있는지 확인합니다.

    • 전송을 만들 수 있는 bigquery.transfers.update 권한
    • 대상 데이터세트에 대한 bigquery.datasets.update 권한

    사전 정의된 Cloud IAM 역할인 bigquery.admin에는 bigquery.transfers.updatebigquery.datasets.update 권한이 포함되어 있습니다. BigQuery의 Cloud IAM 역할에 대한 자세한 내용은 사전 정의된 역할 및 권한을 참조하세요.

구성 옵션

쿼리 문자열

쿼리 문자열은 유효해야 하며 표준 SQL로 작성되어야 합니다. 예약된 쿼리가 실행될 때마다 다음과 같은 쿼리 매개변수를 수신할 수 있습니다.

쿼리를 예약하기 전에 @run_time@run_date 매개변수를 사용하여 쿼리 문자열을 수동으로 테스트하려면 명령줄 인터페이스를 사용하세요.

사용 가능한 매개변수

매개변수 표준 SQL 유형
@run_time TIMESTAMP UTC 시간으로 표현됩니다. 정기적인 예약된 쿼리의 경우 run_time은 의도한 실행 시간을 나타냅니다. 예를 들어 예약된 쿼리가 '24시간마다'로 설정된 경우 연속된 두 쿼리 사이의 run_time 차이는 정확히 24시간입니다(단, 실제 실행 시간에는 약간 차이가 있을 수 있음).
@run_date DATE 논리적 달력 날짜를 나타냅니다.

예시

이 예시에서 @run_time 매개변수는 hacker_news.stories라는 공개 데이터세트를 쿼리하는 쿼리 문자열의 일부입니다.

SELECT @run_time AS time,
  title,
  author,
  text
FROM `bigquery-public-data.hacker_news.stories`
LIMIT
  1000

대상 테이블

예약된 쿼리를 설정할 때 결과의 대상 테이블이 존재하지 않으면 BigQuery가 테이블을 만듭니다.

DDL 또는 DML 쿼리를 사용하는 경우:

  • GCP Console에서 처리 위치 또는 리전을 선택합니다. 대상 테이블을 생성하는 DDL 또는 DML 쿼리의 경우 처리 위치가 필요합니다.
  • 기본 BigQuery 웹 UI에서는 대상 테이블을 비워 둡니다.

대상 테이블이 있는 경우에는 열을 스키마(ALLOW_FIELD_ADDITION)에 추가하거나 열의 모드를 REQUIRED에서 NULLABLE(ALLOW_FIELD_RELAXATION)로 완화하면 쿼리 결과에 따라 대상 테이블의 스키마가 업데이트될 수 있습니다. 그 밖의 모든 경우에는 실행 간에 테이블 스키마가 변경되면 예약된 쿼리가 실패합니다.

쿼리는 다른 프로젝트 및 다른 데이터세트의 테이블을 참조할 수 있습니다. 예약된 쿼리를 구성할 때는 대상 데이터세트를 테이블 이름에 추가할 필요 없습니다. 대상 데이터세트는 별도로 지정합니다.

쓰기 환경설정

선택한 쓰기 환경설정에 따라 쿼리 결과가 기존 대상 테이블에 기록되는 방법이 결정됩니다.

  • WRITE_TRUNCATE: 테이블이 존재하면 BigQuery가 테이블 데이터를 덮어씁니다.
  • WRITE_APPEND: 테이블이 존재하면 BigQuery가 데이터를 테이블에 추가합니다.

DDL 또는 DML 쿼리를 사용하는 경우:

  • GCP Console에서 쓰기 환경설정 옵션이 나타나지 않습니다.
  • 기본 BigQuery 웹 UI에서 쓰기 환경설정을 비워 둡니다.

대상 테이블 만들기, 잘라내기 또는 추가는 BigQuery가 쿼리를 성공적으로 완료할 수 있는 경우에만 발생합니다. 만들기, 잘라내기 또는 추가 작업은 작업 완료 시 하나의 원자적 업데이트로 발생합니다.

클러스터링

예약된 쿼리는 테이블이 DDL CREATE TABLE AS SELECT 문으로 작성된 경우에만 새 테이블에서 클러스터링을 만들 수 있습니다. 데이터 정의 언어 문 사용 페이지에서 쿼리 결과에서 클러스터링된 테이블 만들기를 참조하세요.

파티션 나누기 옵션

예약된 쿼리는 파티션을 나눈 또는 파티션을 나누지 않은 대상 테이블을 만들 수 있습니다. GCP Console에서는 파티션 나누기를 사용할 수 없지만 기본 BigQuery 웹 UI, CLI, API 설정 메서드에서는 파티션 나누기를 사용할 수 있습니다. 파티션 나누기에 DDL 또는 DML 쿼리를 사용하는 경우 파티션 나누기 필드를 비워 두세요.

BigQuery에는 두 가지 유형의 테이블 파티션 나누기가 있습니다.

  • 수집 시간으로 파티션을 나눈 테이블: 예약된 쿼리의 실행 시간을 기준으로 파티션을 나눈 테이블입니다.
  • 열을 기준으로 파티션을 나눈 테이블: TIMESTAMP 또는 DATE 열을 기준으로 파티션을 나눈 테이블입니다.

열을 기준으로 파티션을 나눈 테이블의 경우:

  • 기본 BigQuery 웹 UI에서 열을 기준으로 대상 테이블의 파티션을 나누는 경우 예약된 쿼리 설정파티션 나누기 필드에서 열 이름을 지정합니다. 수집 시간으로 파티션을 나눈 테이블 및 파티션을 나누지 않은 테이블의 경우 파티션 나누기 필드를 비워 둡니다.

수집 시간으로 파티션을 나눈 테이블의 경우:

  • 대상 테이블의 이름에 날짜 파티션 나누기를 나타냅니다. 아래에 설명된 테이블 이름 템플릿 구문을 참조하세요.

파티션 나누기 예시

사용 가능한 매개변수

예약된 쿼리를 설정할 때 런타임 매개변수를 사용하여 대상 테이블의 파티션을 나누는 방법을 지정할 수 있습니다.

매개변수 템플릿 유형
run_time 형식이 지정된 타임스탬프 일정에 따라 UTC 시간으로 표시됩니다. 정기적인 예약된 쿼리의 경우 run_time은 의도한 실행 시간을 나타냅니다. 예를 들어 예약된 쿼리가 '24시간마다'로 설정된 경우 연속된 두 쿼리 사이의 run_time 차이는 정확히 24시간입니다(단, 실제 실행 시간에는 약간 차이가 있을 수 있음).

TransferRun.runTime을 참조하세요.
run_date 날짜 문자열 %Y%m%d 형식(예: 20180101)의 run_time 매개변수 날짜입니다. 이 형식은 내부 데이터화 시간으로 파티션을 나눈 테이블에서 사용할 수 있습니다.

템플릿 시스템

예약된 쿼리는 템플릿 구문을 사용하여 대상 테이블 이름에서 런타임 매개변수를 지원합니다.

매개변수 템플릿 구문

템플릿 구문은 기본 문자열 템플릿과 시간 오프셋을 지원합니다. 매개변수는 다음 형식으로 참조됩니다.

  • {run_date}
  • {run_time[+\-offset]|"time_format"}
매개변수 목적
run_date 이 매개변수는 YYYYMMDD 형식의 날짜로 대체됩니다.
run_time 이 매개변수는 다음 속성을 지원합니다.


offset
시간(h), 분(m), 초(s)의 순서로 표시되는 시간 오프셋입니다.
일(d)은 지원되지 않습니다.
소수가 허용됩니다(예: 1.5h).

time_format
형식이 지정된 문자열. 가장 일반적인 형식 지정 매개변수는 년(%Y), 월(%m), 일(%d)입니다.
파티션을 나눈 테이블에서는 YYYYMMDD가 필수 서픽스입니다. 이는 '%Y%m%d'와 같습니다.

datetime 요소 형식 지정에 대해 자세히 알아보세요.

사용법 참고사항:
  • run_time, offset, time 형식 사이에 공백이 없어야 합니다.
  • 문자열에 리터럴 중괄호를 포함하려면 ‘\{‘ and ‘\}’로 이스케이프 처리합니다.
  • “YYYY|MM|DD”와 같은 time_format에 리터럴 따옴표 또는 세로 막대를 포함하려면 형식 문자열에서 ‘\”’ 또는 ‘\|’로 이스케이프 처리합니다.

매개변수 템플릿 예시

다음 예는 다양한 시간 형식을 사용하여 대상 테이블 이름을 지정하고 실행 시간을 오프셋하는 방법을 보여줍니다.
run_time(UTC) 템플릿 매개변수 출력 대상 테이블 이름
2018-02-15 00:00:00 mytable mytable
2018-02-15 00:00:00 mytable_{run_time|"%Y%m%d"} mytable_20180215
2018-02-15 00:00:00 mytable_{run_time+25h|"%Y%m%d"} mytable_20180216
2018-02-15 00:00:00 mytable_{run_time-1h|"%Y%m%d"} mytable_20180214
2018-02-15 00:00:00 mytable_{run_time+1.5h|"%Y%m%d;%H"}
또는
mytable_{run_time+90m|"%Y%m%d;%H"}
mytable_2018021501
2018-02-15 00:00:00 {run_time+97s|"%Y%m%d"}_mytable_{run_time|"%H%M%s"} 20180215_mytable_000137

예약된 쿼리 설정

Console

  1. GCP Console에서 BigQuery 웹 UI를 엽니다.

    GCP Console로 이동

  2. 원하는 쿼리를 실행합니다. 결과에 만족하면 쿼리 예약새로 예약된 쿼리 만들기를 클릭합니다.

    BigQuery 웹 UI에서 쿼리 예약

  3. 새로 예약된 쿼리 창에 예약된 쿼리 옵션이 열립니다.

  4. 새로 예약된 쿼리 창에서 다음을 수행합니다.

    • 예약된 쿼리 이름에 이름(예: My scheduled query)을 입력합니다. 예약된 쿼리 이름은 나중에 수정해야 할 경우에 예약된 쿼리를 쉽게 식별할 수 있는 값이면 됩니다.
    • (선택사항) 일정 옵션의 경우 기본값인 매일(만든 시간을 기준으로 24시간마다)을 그대로 두거나 시작 시간 예약을 클릭하여 시간을 변경합니다. 간격을 매주, 매월 또는 커스텀으로 변경할 수도 있습니다. 커스텀을 선택할 경우 크론과 유사한 시간 지정이 필요합니다(예: every 3 hours). 사용 가능한 최단 기간은 15분입니다. 유효한 추가 API 값은 TransferConfig 아래의 schedule 필드를 참조하세요.

      새로 예약된 쿼리 상단

  5. DDL/DML 쿼리의 경우 처리 위치 또는 리전을 선택합니다.

    새로 예약된 쿼리 DDL/DML

  6. 표준 SQL SELECT 쿼리의 경우 대상 데이터세트에 대한 정보를 지정합니다.

    • 데이터세트 이름에서 적절한 대상 데이터세트를 선택합니다.
    • 테이블 이름에서 대상 테이블의 이름을 입력합니다.
      • DDL 또는 DML 쿼리에는 이 옵션이 표시되지 않습니다.
    • 대상 테이블 쓰기 환경설정에서 대상 테이블을 덮어쓰려면 WRITE_TRUNCATE를 선택하고 데이터를 테이블에 추가하려면 WRITE_APPEND를 선택합니다.
      • DDL 또는 DML 쿼리에는 이 옵션이 표시되지 않습니다.
    • (선택사항) 고객 관리 암호화 키를 사용하는 경우 고급 옵션에서 고객 관리 키를 선택하면 됩니다. 그러면 사용 가능한 CMEK 목록이 나타나고 그중에서 선택할 수 있습니다.

      새로 예약된 쿼리 하단

  7. 모든 쿼리의 경우:

    • (선택사항) 전송 실행 실패 시 이메일 알림을 허용하려면 이메일 알림 전송을 선택합니다.
  8. 일정을 클릭합니다.

  9. 예약된 쿼리의 상태를 보려면 탐색창에서 예약된 쿼리를 클릭합니다. 예약된 쿼리의 업데이트된 상태를 확인하려면 페이지를 새로 고칩니다. 각각의 예약된 쿼리를 클릭하면 자세한 내용을 확인할 수 있습니다.

    예약된 쿼리 나열

기본 UI

  1. 기본 BigQuery 웹 UI로 이동합니다.

    기본 BigQuery 웹 UI로 이동

  2. 원하는 쿼리를 실행합니다.

    기본 BigQuery 웹 UI에서 쿼리 예약

  3. 결과에 만족하면 쿼리 예약을 클릭합니다. 쿼리 상자 아래에 예약된 쿼리 옵션이 열립니다.

  4. 새 예약된 쿼리 페이지에서:

    • 대상 데이터세트에서 적절한 데이터세트를 선택합니다.
    • 표시 이름에 예약된 쿼리의 이름(예: My scheduled query)을 입력합니다. 예약된 쿼리 이름은 나중에 수정해야 할 경우에 예약된 쿼리를 쉽게 식별할 수 있는 값이면 됩니다.
    • 대상 테이블:
      • 표준 SQL 쿼리의 경우 대상 테이블의 이름을 입력합니다.
      • DDL 또는 DML 쿼리의 경우 이 필드를 비워 둡니다.
    • 쓰기 환경설정:
      • 표준 SQL 쿼리의 경우 대상 테이블을 덮어쓰려면 WRITE_TRUNCATE를, 데이터를 테이블에 추가하려면 WRITE_APPEND를 선택합니다.
      • DDL 또는 DML 쿼리의 경우 미지정을 선택합니다.
    • (선택사항) 파티션 나누기 필드:

    • (선택사항) 고객 관리 암호화 키를 사용하는 경우 대상 테이블 KMS 키에 고객 관리 암호화 키를 입력하면 됩니다.

      새로 예약된 쿼리

    • (선택사항) 일정에서 기본값인 매일(만든 시간을 기준으로 24시간마다)을 그대로 두거나 수정을 클릭하여 시간을 변경합니다. 간격을 매주, 매월 또는 커스텀으로 변경할 수도 있습니다. 커스텀을 선택할 경우 크론과 유사한 시간 지정이 필요합니다(예: every 3 hours). 사용 가능한 최단 기간은 15분입니다. 유효한 추가 API 값은 TransferConfig 아래의 schedule 필드를 참조하세요.

      쿼리 일정

    • (선택사항) 고급 섹션을 펼쳐서 알림을 구성합니다.

      • Cloud Pub/Sub 주제에 Cloud Pub/Sub 주제 이름(예: projects/myproject/topics/mytopic)을 입력합니다.
      • 전송 실행 실패 시 이메일 알림을 허용하려면 이메일 알림 전송을 선택합니다.

        Cloud Pub/Sub 주제

  5. 추가를 클릭합니다.

  6. 예약된 쿼리 상태를 확인하려면 탐색창에서 예약된 쿼리를 클릭합니다. 예약된 쿼리의 업데이트된 상태를 확인하려면 페이지를 새로 고칩니다. 각각의 예약된 쿼리를 클릭하면 자세한 내용을 확인할 수 있습니다.

    예약된 쿼리 나열

CLI

옵션 1: bq query 명령어를 사용합니다.

이 메서드를 사용하면 플래그 destination_table(또는 target_dataset), --schedule, --display_name 옵션을 bq query 명령어에 추가하여 예약된 쿼리를 만들 수 있습니다.

bq query \
--display_name=name \
--destination_table=table \
--schedule=interval

각 항목의 의미는 다음과 같습니다.

  • name은 예약된 쿼리의 표시 이름입니다. 표시 이름은 나중에 수정해야 할 경우에 예약된 쿼리를 쉽게 식별할 수 있는 값이면 됩니다.
  • table은 쿼리 결과의 대상 테이블입니다.
    • --target_dataset는 DDL/DML 쿼리와 함께 사용될 경우 쿼리 결과에서 대상 데이터세트 이름을 지정하는 또 다른 방법입니다.
    • --destination_table 또는 --target_dataset 중 하나만 사용합니다.
  • intervalbq query와 함께 사용될 경우 쿼리를 반복 예약 쿼리로 만듭니다. 쿼리 실행 빈도에 대한 일정이 필요합니다. 예를 들면 다음과 같습니다.
    • --schedule='every 24 hours'
    • --schedule='every 3 hours'

선택적 플래그:

  • --project_id는 프로젝트 ID입니다. --project_id를 지정하지 않으면 기본 프로젝트가 사용됩니다.

  • --replace는 대상 테이블을 잘라내며 예약된 쿼리가 실행될 때마다 새 결과를 씁니다.

  • --append_table은 대상 테이블에 결과를 추가합니다.

예를 들어 다음 명령어는 SELECT 1 from mydataset.test라는 단순한 쿼리를 사용하여 My Scheduled Query라는 예약된 쿼리를 만듭니다. 대상 테이블은 데이터세트 mydatasetmytable입니다. 예약된 쿼리는 기본 프로젝트에 생성됩니다.

    bq query \
    --use_legacy_sql=false \
    --destination_table=mydataset.mytable \
    --display_name='My Scheduled Query' \
    --replace=true \
    'SELECT
      1
    FROM
      mydataset.test'


옵션 2: bq mk 명령어를 사용합니다.

예약된 쿼리는 일종의 전송입니다. 쿼리를 예약하려면 BigQuery Data Transfer Service CLI를 사용하여 전송 구성을 만들면 됩니다.

예약하려는 쿼리는 StandardSQL 언어로 되어 있어야 합니다.

bq mk 명령어를 입력하고 전송 생성 플래그 --transfer_config를 지정합니다. 다음 플래그도 필요합니다.

  • --data_source
  • --target_dataset(DDL/DML 쿼리의 경우 선택사항)
  • --display_name
  • --params

선택적 플래그:

  • --project_id는 프로젝트 ID입니다. --project_id를 지정하지 않으면 기본 프로젝트가 사용됩니다.

  • --schedule은 쿼리 실행 빈도입니다. --schedule을 지정하지 않으면 기본값은 만든 시간을 기준으로 '24시간마다'입니다.

  • DDL/DML 쿼리의 경우 --location 플래그를 지정하여 처리할 특정 리전을 지정할 수도 있습니다. --location을 지정하지 않으면 글로벌 Google Cloud Platform 위치가 사용됩니다.

bq mk \
--transfer_config \
--project_id=project_id \
--target_dataset=dataset \
--display_name=name \
--params='parameters' \
--data_source=data_source

각 항목의 의미는 다음과 같습니다.

  • dataset는 전송 구성 대상 데이터세트입니다.
    • 이 매개변수는 DDL/DML 쿼리에서 선택사항입니다. 다른 모든 쿼리에는 필수입니다.
  • name은 전송 구성의 표시 이름입니다. 표시 이름은 나중에 수정해야 할 경우에 예약된 쿼리(전송)를 쉽게 식별할 수 있는 값이면 됩니다.
  • parameters에는 JSON 형식으로 생성된 전송 구성의 매개변수가 포함됩니다(예: --params='{"param":"param_value"}'). 예약된 쿼리의 경우 query 매개변수를 지정해야 합니다.
    • destination_table_name_template 매개변수는 대상 테이블의 이름입니다.
    • 이 매개변수는 DDL/DML 쿼리에서 선택사항입니다. 다른 모든 쿼리에는 필수입니다.
    • write_disposition 매개변수의 경우 WRITE_TRUNCATE를 선택하여 대상 테이블을 자르거나(덮어쓰거나) WRITE_APPEND를 선택하여 대상 테이블에 쿼리 결과를 추가할 수 있습니다.
      • 이 매개변수는 DDL/DML 쿼리에서 선택사항입니다. 다른 모든 쿼리에는 필수입니다.
    • (선택사항) destination_table_kms_key 매개변수는 고객 관리 암호화 키를 위한 것입니다.
  • data_source는 데이터 소스(scheduled_query)입니다.

예를 들어 다음 명령어는 SELECT 1 from mydataset.test라는 단순한 쿼리를 사용하여 My Scheduled Query라는 예약된 쿼리 전송 구성을 만듭니다. 대상 테이블 mytable은 매 쓰기 시 잘리며 대상 데이터세트는 mydataset입니다. 예약된 쿼리는 기본 프로젝트에 생성됩니다.

bq mk \
--transfer_config \
--target_dataset=mydataset \
--display_name='My Scheduled Query' \
--params='{"query":"SELECT 1 from mydataset.test","destination_table_name_template":"mytable","write_disposition":"WRITE_TRUNCATE"}' \
--data_source=scheduled_query

명령어를 처음 실행할 때 다음과 같은 메시지를 받게 됩니다.

[URL omitted] Please copy and paste the above URL into your web browser and follow the instructions to retrieve an authentication code.

메시지 안내를 따라 명령줄에 인증 코드를 붙여넣습니다.

API

projects.locations.transferConfigs.create 메서드를 사용하고 TransferConfig 리소스의 인스턴스를 제공합니다.

Python

이 샘플을 시도하기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 BigQuery Python API 참조 문서를 확인하세요.

    from google.cloud import bigquery_datatransfer_v1
    import google.protobuf.json_format

    client = bigquery_datatransfer_v1.DataTransferServiceClient()

    # TODO(developer): Set the project_id to the project that contains the
    #                  destination dataset.
    # project_id = "your-project-id"

    # TODO(developer): Set the destination dataset. The authorized user must
    #                  have owner permissions on the dataset.
    # dataset_id = "your_dataset_id"

    # TODO(developer): The first time you run this sample, set the
    # authorization code to a value from the URL:
    # https://www.gstatic.com/bigquerydatatransfer/oauthz/auth?client_id=433065040935-hav5fqnc9p9cht3rqneus9115ias2kn1.apps.googleusercontent.com&scope=https://www.googleapis.com/auth/bigquery%20https://www.googleapis.com/auth/drive&redirect_uri=urn:ietf:wg:oauth:2.0:oob
    #
    # authorization_code = "_4/ABCD-EFGHIJKLMNOP-QRSTUVWXYZ"
    #
    # You can use an empty string for authorization_code in subsequent runs of
    # this code sample with the same credentials.
    #
    # authorization_code = ""

    # Use standard SQL syntax for the query.
    query_string = """
SELECT
  CURRENT_TIMESTAMP() as current_time,
  @run_time as intended_run_time,
  @run_date as intended_run_date,
  17 as some_integer
"""

    parent = client.project_path(project_id)

    transfer_config = google.protobuf.json_format.ParseDict(
        {
            "destination_dataset_id": dataset_id,
            "display_name": "Your Scheduled Query Name",
            "data_source_id": "scheduled_query",
            "params": {
                "query": query_string,
                "destination_table_name_template": "your_table_{run_date}",
                "write_disposition": "WRITE_TRUNCATE",
                "partitioning_field": "",
            },
            "schedule": "every 24 hours",
        },
        bigquery_datatransfer_v1.types.TransferConfig(),
    )

    response = client.create_transfer_config(
        parent, transfer_config, authorization_code=authorization_code
    )

    print("Created scheduled query '{}'".format(response.name))

이전 날짜에 수동 실행 설정

나중에 쿼리를 실행하도록 예약하는 것 외에도 직접 실행을 수동으로 트리거할 수도 있습니다. 쿼리가 run_date 매개변수를 사용하고 이전 실행 중에 문제가 발생한 경우 즉시 실행을 트리거해야 합니다.

예를 들어 매일 09:00에 소스 테이블에서 현재 날짜와 일치하는 행을 쿼리했는데 지난 3일 동안 소스 테이블에 데이터가 추가되지 않았다는 것을 알게 되었다면 지정된 기간 내 이전 데이터를 대상으로 쿼리를 실행하도록 설정할 수 있습니다. 쿼리는 예약된 쿼리에서 구성한 날짜에 해당하는 run_daterun-time 조합을 사용하여 실행됩니다.

예약된 쿼리를 설정한 후 이전 기간을 사용하여 쿼리를 실행하는 방법은 다음과 같습니다.

Console

일정을 클릭하여 예약된 쿼리를 저장하면 예약된 쿼리 버튼을 클릭하여 현재 예약된 쿼리 목록을 확인할 수 있습니다. 해당 쿼리의 일정에 대한 세부정보를 보려면 표시 이름을 클릭합니다. 페이지 오른쪽 상단에서 백필 예약을 클릭하여 이전 기간을 지정합니다.

백필 예약 버튼

선택한 실행 시간은 모두 선택한 범위 내에 있으며, 처음 날짜는 포함되지만 마지막 날짜는 제외됩니다.

이전 날짜 설정

예시 1

예약된 쿼리가 태평양 표준시를 기준으로 every day 09:00에 실행되도록 설정됩니다. 1월 1일, 1월 2일, 1월 3일의 데이터가 누락되었습니다. 다음과 같은 이전 기간을 선택합니다.

Start Time = 1/1/19
End Time = 1/4/19

쿼리가 다음 시간에 해당하는 run_daterun_time 매개변수를 사용하여 실행됩니다.

  • 태평양 표준시 기준 19/1/1 09:00
  • 태평양 표준시 기준 19/1/2 09:00
  • 태평양 표준시 기준 19/1/3 09:00

예시 2

예약된 쿼리가 태평양 표준시를 기준으로 every day 23:00에 실행되도록 설정됩니다. 1월 1일, 1월 2일, 1월 3일의 데이터가 누락되었습니다. 다음과 같은 이전 기간을 선택합니다(태평양 표준시 23:00은 UTC와 날짜가 다르므로 이후 날짜가 선택됨).

Start Time = 1/2/19
End Time = 1/5/19

쿼리가 다음 시간에 해당하는 run_daterun_time 매개변수를 사용하여 실행됩니다.

  • UTC 기준 19/1/2 09:00 또는 태평양 표준시 기준 2019/1/1 23:00
  • UTC 기준 19/1/3 09:00 또는 태평양 표준시 기준 2019/1/2 23:00
  • UTC 기준 19/1/4 09:00 또는 태평양 표준시 기준 2019/1/3 23:00

수동 실행을 설정한 후 페이지를 새로고침하면 실행 목록에 표시됩니다.

기본 UI

추가를 클릭하여 예약된 쿼리를 저장하면 예약된 쿼리의 세부정보가 표시됩니다. 세부정보 아래에서 수동 실행 시작 버튼을 클릭하여 이전 기간을 지정합니다.

수동 실행 시작 버튼

기간을 더 구체화하여 시작 시간과 종료 시간을 지정하거나 시간 필드를 00:00:00으로 둘 수도 있습니다.

이전 날짜 설정

예시 1

예약된 쿼리가 every day 14:00에 실행되도록 설정된 경우에 다음과 같은 과거의 날짜 범위를 적용합니다.

Start Time = 2/21/2018 00:00:00 AM
End Time = 2/24/2018 00:00:00 AM

쿼리가 다음 시간에 실행됩니다.

  • 2/21/2018 14:00:00
  • 2/22/2018 14:00:00
  • 2/23/2018 14:00:00

예시 2

예약된 쿼리가 every fri at 01:05에 실행되도록 설정된 경우에 다음과 같은 과거의 날짜 범위를 적용합니다.

Start Time = 2/1/2018 00:00:00(목요일)
End Time = 2/24/2018 00:00:00 AM(이 경우도 목요일)

쿼리가 다음 시간에 실행됩니다.

  • 2/2/2018 01:05:00
  • 2/9/2018 01:05:00

CLI

이전 기간에 대한 쿼리를 수동으로 실행하려면 다음을 수행합니다.

bq mk 명령어를 입력하고 전송 실행 플래그 --transfer_run을 지정합니다. 다음 플래그도 필요합니다.

  • --start_time
  • --end_time
bq mk \
--transfer_run \
--start_time='start_time' \
--end_time='end_time' \
resource_name

각 항목의 의미는 다음과 같습니다.

  • start_timeend_time은 Z로 끝나거나 유효한 시간대 오프셋을 포함하는 타임스탬프입니다. 예를 들면 다음과 같습니다.
    • 2017-08-19T12:11:35.00Z
    • 2017-05-25T00:00:00+00:00
  • resource_name은 예약된 쿼리(또는 전송)의 리소스 이름입니다. 리소스 이름을 전송 구성이라고도 합니다.

예를 들어 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7과 같은 명령어는 예약된 쿼리 리소스(또는 전송 구성)에 대한 백필을 예약합니다.

  bq mk \
  --transfer_run \
  --start_time 2017-05-25T00:00:00Z \
  --end_time 2017-05-25T00:00:00Z \
  projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

API

projects.locations.transferConfigs.scheduleRun 메서드를 사용하고 TransferConfig 리소스의 경로를 지정합니다.

할당량

예약된 쿼리는 사용자가 쿼리를 직접 실행하는 것처럼 작성자의 사용자 인증 정보 및 프로젝트를 사용하여 실행됩니다. 예약된 쿼리에는 수동 쿼리와 동일한 BigQuery 할당량 및 한도가 적용됩니다.

가격 책정

예약된 쿼리에는 수동 BigQuery 쿼리와 동일한 가격이 책정됩니다.

알려진 문제 및 제한사항

리전

리전 간의 쿼리는 지원되지 않으며, 예약된 쿼리의 대상 테이블은 쿼리되는 데이터와 동일한 리전에 있어야 합니다. 리전 및 멀티 리전에 대한 자세한 내용은 데이터세트 위치를 참조하세요.

Google 드라이브

예약된 쿼리에서 Google 드라이브 데이터를 쿼리할 수 있습니다. 기존 쿼리를 예약하려면 예약된 쿼리 세부정보 화면에서 '사용자 인증 정보 업데이트'를 클릭해야 할 수 있습니다. 변경사항이 적용되려면 10~20분 기다려야 합니다. 브라우저의 캐시를 지워야 할 수도 있습니다. 새로 예약된 쿼리에서는 사용자 인증 정보가 자동으로 최신 상태로 업데이트됩니다.

사용자 인증 정보 업데이트

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.