為查詢排程

本頁面說明如何在 BigQuery 中為週期性查詢進行排程。

總覽

您可以為查詢進行排程,讓查詢週期性執行。排程查詢必須以標準 SQL 編寫,以納入資料定義語言 (DDL)資料操縱語言 (DML) 陳述式。查詢字串和目的地資料表可參數化,讓您能依日期和時間整理查詢結果。

事前準備

建立排程查詢前,請先完成下列事項:

  • 排程查詢會使用 BigQuery 資料移轉服務的功能。請確認您已完成啟用 BigQuery 資料移轉服務一文中的所有必要動作。

  • 如果您是使用 BigQuery 傳統網頁版 UI 來建立排程查詢,請允許瀏覽器顯示來自 bigquery.cloud.google.com 的彈出式視窗,以便查看權限視窗。您必須授予 BigQuery 資料移轉服務相關權限,允許該服務管理排程查詢。

必要權限

在為查詢進行排程之前,請先完成下列事項:

  • 確認建立移轉作業的人員在 BigQuery 中具有以下必要權限:

    • bigquery.transfers.update 權限,以建立移轉作業
    • 目標資料集的 bigquery.datasets.update 權限

    bigquery.admin 這個預先定義的 Cloud IAM 角色具備 bigquery.transfers.updatebigquery.datasets.update 權限。如要進一步瞭解 BigQuery 中的 Cloud IAM 角色,請參閱預先定義的角色與權限一文。

設定選項

查詢字串

查詢字串必須有效,且必須以標準 SQL 編寫。排程查詢每次執行時,都會收到下列查詢參數

如要在為查詢進行排程之前,手動以 @run_time@run_date 參數測試查詢字串,請使用指令列介面。

可用的參數

參數 標準 SQL 類型
@run_time TIMESTAMP 以世界標準時間表示。對於具有定期執行排程的查詢,run_time 用以表示預定的執行時間。舉例來說,如果排程查詢的時程設定為「every 24 hours」(每 24 小時),則連續兩次查詢之間的 run_time 差異就是 24 小時整 (雖然實際執行時間可能會略有不同)。
@run_date DATE 代表邏輯日曆日期。

範例

在以下範例中,系統會查詢名為 hacker_news.stories 的公開資料集,而 @run_time 參數是該查詢字串的一部分。

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

目的地資料表

設定排程查詢時,如果查詢結果的目的地資料表不存在,BigQuery 會嘗試建立目的地資料表。

如使用 DDL 或 DML 查詢:

  • 在 Cloud Console 中選擇「Processing location」(處理位置) 或地區。DDL 或 DML 查詢需有處理位置,才能建立目的地資料表。
  • 在 BigQuery 傳統網頁版 UI 中,請將「Destination table」(目的地資料表) 留白。

如果目標資料表存在,且您新增資料欄至結構定義 (ALLOW_FIELD_ADDITION),或是將某個資料欄的模式從 REQUIRED 放寬到 NULLABLE (ALLOW_FIELD_RELAXATION),則目的地資料表的結構定義可能會依據查詢結果進行更新。在所有其他情況下,如在執行作業之間變更資料表結構定義,則會導致排程查詢失敗。

查詢可參照來自不同專案和不同資料集的資料表。設定排程查詢時,資料表名稱不需要包含目的地資料集。目的地資料集會另外指定。

寫入偏好設定

您選取的寫入偏好設定,會決定查詢結果寫入現有目的地資料表的方式。

  • WRITE_TRUNCATE:如果資料表存在,BigQuery 會覆寫資料表資料。
  • WRITE_APPEND:如果資料表存在,BigQuery 會將資料附加至資料表。

如使用 DDL 或 DML 查詢:

  • Cloud Console 中不會顯示寫入偏好設定選項。
  • 在 BigQuery 傳統網頁版 UI 中,請將「Write preference」(寫入偏好設定) 留白。

唯有 BigQuery 成功完成查詢,系統才會建立、截斷或附加目的地資料表。建立、截斷或附加的動作是在工作完成時,以一次完整更新的形式進行。

叢集處理

如果資料表是使用 DDL 陳述式 CREATE TABLE AS SELECT 建立,排程查詢只能在新資料表上建立叢集。請參閱使用資料定義語言陳述式頁面中從查詢結果建立分群資料表一節。

分區選項

排程查詢可建立分區或非分區的目的地資料表。Cloud Console 中不提供分區功能,但 BigQuery 傳統網頁版 UI、CLI 和 API 設定方法中提供此功能。如使用具有分區功能的 DDL 或 DML 查詢,請將「Partitioning field」(分區欄位) 留白。

BigQuery 中的資料表分區有兩種類型:

  • 依擷取時間分區的資料表:根據排程查詢的執行時間進行分區的資料表。
  • 依資料欄分區的資料表:依據 TIMESTAMPDATE 資料欄進行分區的資料表。

依資料欄分區的資料表:

  • 在 BigQuery 傳統網頁版 UI 中,如果目的地資料表會依資料欄分區,請於設定排程查詢時,在「Partitioning Field」(分區欄位) 中指定資料欄名稱。對於擷取時間分區資料表和非分區資料表,請將「Partitioning Field」(分區欄位) 留白。

擷取時間分區資料表:

  • 在目的地資料表的名稱中指定日期分區。請參閱下方說明的資料表名稱範本語法。

分區範例

  • 無分區的資料表
    • 目的地資料表:mytable
    • 分區欄位:保留空白
  • 擷取時間分區資料表
    • 目的地資料表:mytable$YYYYMMDD
    • 分區欄位:保留空白
  • 資料欄分區資料表
    • 目的地資料表:mytable
    • 分區欄位:用於對資料表進行分區的 TIMESTAMPDATE 資料欄的名稱

可用的參數

設定排程查詢時,可使用執行階段參數,指定要以何種方式對目的地資料表進行分區。

參數 範本類型
run_time 設定格式的時間戳記 採用世界標準時間,依排程而定。對於具有定期執行排程的查詢,run_time 用以表示預定的執行時間。舉例來說,如果排程查詢的時程設定為「every 24 hours」(每 24 小時),則連續兩次查詢之間的 run_time 差異就是 24 小時整 (雖然實際執行時間可能會略有不同)。

請參閱 TransferRun.runTime 的說明。
run_date 日期字串 run_time 參數的日期,採用以下格式:%Y%m%d;例如 20180101。這個格式與擷取時間分區資料表相容。

範本系統

可使用範本語法讓排定的查詢支援目的地資料表名稱中的執行階段參數。

參數範本語法

範本語法支援基本字串範本和時區設定。參數會以下列格式參照:

  • {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_format 之間不得有空格字元。
  • 如果字串要包含大括號,可以按以下方式加以逸出:‘\{‘ and ‘\}’
  • 如果 time_format 要包含引號或分隔號,例如 “YYYY|MM|DD”,可以在格式字串按以下方式加以逸出:‘\”’‘\|’

參數範本範例

以下範例說明如何以不同的時間格式指定目的地資料表名稱,以及如何設定執行時間時區。
run_time (世界標準時間) 範本參數 輸出目的地資料表名稱
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

使用服務帳戶

您可以將排程查詢設定為透過服務帳戶進行驗證。服務帳戶是與您 GCP 專案相關聯的 Google 帳戶。服務帳戶可以執行與其自身服務憑證相關聯的工作 (而非與使用者憑證相關聯的工作),例如批次處理管道或排程查詢。

如要進一步瞭解如何透過服務帳戶進行驗證,請參閱驗證功能簡介一文。

  • 設定排程查詢一節中的進階選項說明如何為排程查詢設定服務帳戶,您可以選擇按照其中的說明進行設定。

  • 您可以使用指令列介面 (CLI),透過服務帳戶的憑證來更新現有排程查詢。詳情請參閱更新排程查詢的憑證一節。

  • BigQuery 網頁版 UI 目前不支援將排程查詢更新為使用服務帳戶憑證。

  • 傳統網頁版 UI 不支援建立使用服務帳戶的排程查詢,也不支援將排程查詢更新為使用服務帳戶。

設定排程查詢

主控台

  1. 在 Cloud Console 中開啟 BigQuery 網頁版 UI。

    前往 Cloud Console

  2. 執行所要的查詢。如您對查詢結果感到滿意,請按一下 [Schedule query] (已排定的查詢) 和 [Create new scheduled query] (建立新的排程查詢)

    BigQuery 網頁版 UI 中的 [Schedule query] (已排定的查詢) 選項

  3. 排程查詢的選項會在「New scheduled query」(新增排程查詢) 窗格中開啟。

  4. 請在「New scheduled query」(新增排程查詢) 窗格中進行以下操作:

    • 針對「Name for the scheduled query」(已排定查詢的名稱),請輸入名稱,例如 My scheduled query。排程查詢的名稱可以是任何可讓您輕鬆辨識該查詢的值,方便您日後在必要時進行修改。
    • (選擇性操作) 針對「Schedule options」(排程選項),您可保留預設值 [Daily] (每天) (即從建立時間開始,每 24 小時一次),或按一下 [Schedule start time] (排定開始時間) 來變更時間。時間間隔亦可變更為 [Weekly] (每週)、[Monthly] (每月) 或 [Custom] (自訂)。如果選取 [Custom] (自訂),應以類似 Cron 的表示方式輸入時間間隔,例如:every 3 hours。允許的最短時間間隔為 15 分鐘。如需其他有效的 API 值,請參閱 TransferConfig 下方的 schedule 欄位。

      [New scheduled query] (新增排程查詢) 窗格頂端

  5. 如果是標準 SQL SELECT 查詢,請提供目的地資料集的相關資訊。

    • 針對「Dataset name」(資料集名稱),請選擇適當的目的地資料集。
    • 針對「Table name」(資料表名稱),請輸入目的地資料表的名稱。
      • 如果是 DDL 或 DML 查詢,此選項不會顯示。
    • 針對「Destination table write preference」(目標資料表寫入偏好設定),請選擇 WRITE_TRUNCATE 來覆寫目的地資料表,或是選擇 WRITE_APPEND 將資料附加至資料表。

      • 如果是 DDL 或 DML 查詢,此選項不會顯示。

      新的排程查詢目的地。

  6. (選擇性操作) [Advanced options] (進階選項)

    • (選擇性操作) CMEK:如使用客戶管理的加密金鑰,您可以在「Advanced options」(進階選項) 下方選取 [Customer-managed key] (客戶管理的金鑰)。系統隨即顯示可用的 CMEK 清單供您選擇。

    • (選擇性操作) 透過服務帳戶進行驗證:如果您的 GCP 專案有相關聯的服務帳戶,您可以將服務帳戶與排程查詢建立關聯,而不使用使用者擁有的憑證。按一下「Scheduled query credential」(排定查詢憑證) 下方的選單,即可查看可用的服務帳戶清單。

      排程查詢的進階選項。

  7. 其他設定:

    • (選擇性操作) 勾選「Send email notifications」(傳送電子郵件通知) 的核取方塊,讓系統在移轉執行失敗時,寄送電子郵件通知。

    • 如為 DDL/DML 查詢,請選擇「Processing location」(處理位置) 或地區。

    • (選擇性操作) 針對「Pub/Sub topic」(Pub/Sub 主題),請輸入您的 Pub/Sub 主題名稱,例如:projects/myproject/topics/mytopic

      新的排程查詢 DDL/DML

  8. 按一下 [Schedule] (排程) 按鈕。

傳統版 UI

  1. 前往 BigQuery 傳統網頁版 UI。

    前往 BigQuery 傳統網頁版 UI

  2. 執行所要的查詢。

    在 BigQuery 傳統網頁版 UI 中為查詢進行排程。

  3. 如您對查詢結果感到滿意,請按一下 [Schedule Query] (已排定的查詢)。排程查詢的選項會在查詢方塊底下開啟。

  4. 在「New Scheduled Query」(新增排程查詢) 頁面中:

    • 針對「Destination dataset」(目的地資料集),請選擇適當的資料集。
    • 針對「Display name」(顯示名稱),請輸入要排程查詢的名稱,例如 My scheduled query。排程查詢的名稱可以是任何可讓您輕鬆辨識該查詢的值,方便您日後在必要時進行修改。
    • 針對「Destination table」(目標資料表)
      • 如果是標準 SQL 查詢,請輸入目的地資料表的名稱。
      • 如果是 DDL 或 DML 查詢,這個欄位請保留空白。
    • 針對「Write Preference」(寫入偏好設定)
      • 如果是標準 SQL 查詢,請選擇 WRITE_TRUNCATE 來覆寫目的地資料表,或選擇 WRITE_APPEND 將資料附加至資料表。
      • 如果是 DDL 或 DML 查詢,請選擇「Unspecified」(未指定)
    • (選擇性操作) 針對「Partitioning Field」(分區欄位)

      • 如果是標準 SQL 查詢,而目的地資料表是資料欄分區資料表,請輸入資料表應分區的資料欄名稱。對於擷取時間分區資料表和非分區資料表,這個欄位請保留空白。
      • 如果是 DDL 或 DML 查詢,這個欄位請保留空白。
    • (選擇性操作) 針對「Destination table KMS key」(目的地資料表 KMS 金鑰),如使用客戶管理的加密金鑰,即可在此處輸入客戶管理的加密金鑰。

      新的排程查詢

    • (選擇性操作) 針對「Schedule」(排程) ,您可保留預設值 [Daily] (每天) (即從建立時間開始,每 24 小時一次),或按一下 [Edit] (編輯) 來變更時間。時間間隔亦可變更為 [Weekly] (每週)、[Monthly] (每月) 或 [Custom] (自訂)。如果選取 [Custom] (自訂),應以類似 Cron 的表示方式輸入時間間隔,例如:every 3 hours。允許的最短時間間隔為十五分鐘。如需其他有效的 API 值,請參閱 TransferConfig 下方的 schedule 欄位。

      查詢排程。

    • (選擇性操作) 展開「Advanced」(進階) 區段,然後設定通知。

  5. 按一下 [Add] (新增)

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 是查詢結果的目的地資料表。
    • 與 DDL/DML 查詢搭配使用時,--target_dataset 是命名查詢結果目標資料集的另一種方式。
    • --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 的具有排程查詢。目的地資料表為資料集 mydataset 中的 mytable。排程查詢會在預設的專案內建立:

    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 資料移轉服務 CLI 建立移轉作業設定。

查詢必須使用 StandardSQL 方言才能進行排程。

輸入 bq mk 指令並加上移轉建立作業旗標 --transfer_config。還需加上以下旗標:

  • --data_source
  • --target_dataset (對 DDL/DML 查詢而言為選用)。
  • --display_name
  • --params

選用旗標:

  • --project_id 是您的專案 ID。如果未指定 --project_id,系統會使用預設專案。

  • --schedule 是您希望查詢執行的頻率。如未指定 --schedule,預設設定為依建立時間計算「every 24 hours」(每 24 小時)。

  • 如為 DDL/DML 查詢,您亦可加上 --location 旗標,指定特定的處理地區。如未指定 --location,則會使用全球 Google Cloud 地點。

  • --service_account_name 是用來透過服務帳戶 (而非個別使用者帳戶) 驗證排程查詢。注意:將服務帳戶與排程查詢搭配使用這項功能目前仍為 Beta 版

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 參數適用於客戶管理的加密金鑰
    • (選用) --service_account_name 參數是用來透過服務帳戶 (而非個別使用者帳戶) 進行驗證。
  • 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","service_account_name=abcdef-test-sa@abcdef-test.iam.gserviceaccount.com"}' \
--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))

查看排程查詢的狀態

網頁版 UI

如要查看排程查詢的狀態,請在導覽窗格中按一下 [Scheduled queries] (已排定的查詢),然後重新整理頁面,即可看到排程查詢的最新狀態。只要按一下某個排程查詢,即可取得該查詢的詳細資料。

列出排程查詢

傳統版 UI

如要查看排程查詢的狀態,請在導覽窗格中按一下 [Scheduled queries] (已排定的查詢),然後重新整理頁面,即可看到排程查詢的最新狀態。只要按一下某個排程查詢,即可取得該查詢的詳細資料。

列出排程查詢

CLI

排程查詢是一種移轉作業。如要顯示排程查詢的詳細資料,您可以先使用 BigQuery 資料移轉服務 CLI 來列出移轉作業設定。

輸入 bq ls 指令並加上移轉旗標 --transfer_config。還需加上以下旗標:

  • --transfer_location

例如:

bq ls \
--transfer_config \
--transfer_location=us \

如要顯示單一排程查詢的詳細資料,請輸入 bq show 指令,並提供該排程查詢/移轉作業設定的移轉路徑

例如:

bq show \
--transfer_config \
projects/862514376110/locations/us/transferConfigs/5dd12f26-0000-262f-bc38-089e0820fe38 \

API

請使用 projects.locations.transferConfigs.list 方法,並提供 TransferConfig 資源的執行個體。

更新排程查詢的憑證

網頁版 UI

如要重新整理排程查詢上的現有憑證,請進行以下操作:

  1. 找出並查看排程查詢的狀態

  2. 按一下 [MORE] (更多) 按鈕,然後選取 [Update credentials] (更新憑證)。

    更新排程查詢的憑證。

網頁版 UI 目前不支援將排程查詢從使用原有憑證變更使用服務帳戶。

傳統版 UI

  1. 找出並查看排程查詢的狀態

  2. 按一下清單中排程查詢,[Update credentials] (更新憑證) 按鈕隨即顯示在具有排程查詢的詳細資料下方。

    更新排程查詢的憑證。

CLI

排程查詢是一種移轉作業。如要更新排程查詢的憑證,您可以使用 BigQuery 資料移轉服務 CLI 來更新移轉作業設定。

輸入 bq update 指令並加上移轉旗標 --transfer_config。還需加上以下旗標:

  • --update_credentials

選用旗標:

  • --service_account_name 是用於透過服務帳戶 (而非個別使用者帳戶) 來驗證排程查詢。

舉例來說,下列指令會更新排程查詢的移轉作業設定,並透過服務帳戶進行驗證:

bq update \
--transfer_config \
--update_credentials \
--service_account_name=abcdef-test-sa@abcdef-test.iam.gserviceaccount.com projects/862514376110/locations/us/transferConfigs/5dd12f26-0000-262f-bc38-089e0820fe38 \

設定過去日期的手動執行作業

除了排定查詢於日後執行,您也可以手動觸發立即執行作業。如果您的查詢使用 run_date 參數,且在先前執行期間發生問題,則可能需要觸發立即執行作業。

舉例來說,每天 09:00 您會在來源資料表中查詢符合目前日期的資料列。然而您發現系統在過去三天內,並未將這項資料加進來源資料表。在這種情況下,您可以將查詢設定為在指定日期範圍的歷史資料中執行。您的查詢在執行時,使用的 run_daterun-time 組合會對應到您排程查詢中所設的日期。

設定排程查詢後,可按照以下步驟使用過去的日期範圍來執行查詢:

主控台

按一下 [Schedule] (排程) 儲存排程查詢後,您可以按一下 [Scheduled queries] (已排定的查詢) 按鈕,查看目前已設定排程的查詢清單。按一下任何顯示名稱可查看該查詢的排程詳細資料。在頁面右上方,按一下 [Schedule Backfill] (排程補充作業),即可指定過去的日期範圍。

[Schedule Backfill] (排程補充作業) 按鈕

所選的執行時間皆於您所選的範圍之內,這個範圍包含初次執行日期,並排除最後一次的日期。

設定過去日期

範例 1

排程查詢設定在太平洋時間的 every day 09:00 執行,而您缺少 1 月 1 日、1 月 2 日和 1 月 3 日的資料。請選擇下列過去的日期範圍:

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

您的查詢會使用對應至下列時間的 run_daterun_time 參數執行:

  • 1/1/19 09:00 太平洋時間
  • 1/2/19 09:00 太平洋時間
  • 1/3/19 09:00 太平洋時間

範例 2

排程查詢設定在太平洋時間的 every day 23:00 執行,而您缺少 1 月 1 日、1 月 2 日和 1 月 3 日的資料。請選擇下列過去的日期範圍 (由於太平洋時間的 23:00 與世界標準時間的日期不同,因此要選擇較晚的日期):

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

您的查詢會使用對應至下列時間的 run_daterun_time 參數執行:

  • 1/2/19 09:00 世界標準時間,或 1/1/2019 23:00 太平洋時間
  • 1/3/19 09:00 世界標準時間,或 1/2/2019 23:00 太平洋時間
  • 1/4/19 09:00 世界標準時間,或 1/3/2019 23:00 太平洋時間

設定手動執行作業後,請重新整理頁面,這些執行作業便會顯示在執行作業清單中。

傳統版 UI

按一下 [Add] (新增) 儲存排程查詢後,畫面就會顯示排程查詢的詳細資料。在詳細資料下方,按一下 [Start manual runs] (啟動手動執行作業) 按鈕,並指定過去的日期範圍。

[Start manual runs] (啟動手動執行作業) 按鈕

您可以進一步縮小日期範圍,使其具備開始時間和結束時間,或將時間欄位保留為 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_time 和 end_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 雲端硬碟資料。如果您是為既有的查詢進行排程,可能需要在排程查詢的詳細資料畫面中按一下 [Update credentials] (更新憑證)。變更需要 10 至 20 分鐘才會生效。您可能需要清除瀏覽器的快取。系統會自動為新的排程查詢更新憑證。

更新憑證