日常安排簡介

本文件說明如何選擇例行程序,這是用於在 BigQuery 中建立函式或儲存程序的資源類型。

支援的日常生活常規

BigQuery 支援下列例行程序:

如何選擇日常安排

本節說明選擇日常安排時應考量的因素,並依工作比較日常安排。

考量因素

選擇日常安排時,請考量以下因素,這些因素已在各類型日常安排的相關章節中說明:

  • 要執行的工作類型。
  • 要使用的程式設計語言。
  • 為常規實作持續性類型:暫時或持續性。
  • 例行程序需要的重複使用類型:單一或多個查詢。
  • 效能考量。
  • 存取外部服務。
  • 與使用者分享日常生活。

比較各項日常任務

下表列出可為每種日常安排執行的任務類型:

工作

常式資源類型

建立在 BigQuery 中執行一般用途工作用的函式。

SQL 或 JavaScript UDF

SQL 或 JavaScript UDAF

建立函式,在 BigQuery 中執行通用工作,並使用雲端資源連線與外部 Trusted Cloud by S3NS 系統通訊。

Python UDF

建立匯總資料的函式。

UDAF

使用參數建立資料表。

資料表函式

建立使用 BigQuery 不支援的語言、程式庫或服務的函式。這些函式會直接整合 Cloud Run 函式Cloud Run

遠端函式

使用程序語言,在單一查詢中執行多個陳述式,做為多陳述式查詢。您可以使用多陳述式查詢執行以下操作:

  • 依序執行多個陳述式,並共用狀態。
  • 自動執行管理工作,例如建立或刪除資料表。
  • 使用 IFWHILE 等程式設計結構,實作複雜的邏輯。

在 BigQuery 中建立及呼叫 Apache Spark 的預存程序。

預存程序

使用者定義的函式 (UDF)

UDF 可讓您使用 SQL 運算式、JavaScript 程式碼或 Python 程式碼建立函式。UDF 可接受輸入資料欄、對輸入內容執行動作,並將執行結果以值的形式傳回。

您可以將 UDF 定義為永久或暫時性質,您可以在多個查詢中重複使用永久性 UDF,而單項查詢的範圍內只能有一個暫時性 UDF。

您可以建立自訂運算子,用於自訂遮罩例行程序,這些例行程序會在將 UDF 套用至資料欄後,傳回資料欄的值。建立自訂遮蓋例行程序後,即可在「建立資料政策」中使用該遮蓋規則。

如要進一步瞭解 UDF,請參閱下列資源:

語言型 UDF

  • 以 SQL 為基礎的 UDF 支援範本 UDF 參數,這些參數可以在呼叫 UDF 時比對多個引數類型。SQL UDF 也可以傳回純量子查詢的值。
  • 以 JavaScript 為基礎的 UDF 可讓您從 SQL 查詢呼叫以 JavaScript 編寫的程式碼。
    • 與標準 SQL 查詢相比,JavaScript UDF 通常會耗用更多分頁資源,導致工作效能降低。
    • 如果函式可透過 SQL 表達,通常建議以標準 SQL 查詢工作執行程式碼。
  • 以 Python 為基礎的 UDF 會在 BigQuery 管理資源上建構及執行。這些 UDF 可讓您在 Python 中實作函式,並在 SQL 查詢中使用該函式。

社群提供的 UDF

除了您建立的 UDF 之外,bigquery-public-data.persistent_udfs 公開資料集和開放原始碼 bigquery-utils GitHub 存放區也提供社群提供的 UDF。

使用者定義的匯總函式 (UDAF)

UDAF 可讓您使用含有 SQL 或 JavaScript 程式碼的運算式建立匯總函式。UDAF 可接受資料欄輸入內容,一次對一組資料列執行計算,然後將計算結果以單一值的形式傳回。

UDAF 無法變更資料、與外部系統通訊,或將記錄傳送至 Google Cloud Observability 或類似應用程式。

詳情請參閱下列資源:

SQL UDAF

SQL UDAF 通常會匯總群組中所有資料列的函式參數。不過,您可以使用 NOT AGGREGATE 關鍵字,將函式參數指定為非匯總項目。非匯總函式參數是向量函式參數,其中包含群組中所有資料列的常數值。SQL UDAF 可同時包含匯總和非匯總參數。

JavaScript UDAF

JavaScript UDAF 可包含 JavaScript 程式庫。JavaScript 函式主體可包含自訂 JavaScript 程式碼,例如 JavaScript 全域變數和自訂函式。

由於以 JavaScript 為基礎的函式通常會使用更多資源,因此參考這些效能提示可能會有所幫助。

JavaScript UDAF 有一些限制。系統只允許特定類型的編碼,且序列化和反序列化有相關規定

比較 UDF 和 UDAF

選擇 UDF 還是 UDAF,取決於您要執行的特定工作。

  • 如要對個別資料值執行計算或轉換,請使用自訂函式。
  • 如要對資料值群組執行相同的操作,請使用 UDAF。

舉例來說,如果您想計算一欄數字的平均值,請使用 UDAF。如要將一欄字串轉換為大寫,請使用通用資料函式。

UDF 和 UDAF 有以下相似之處:

UDF 和 UDAF 有以下差異:

屬性

UDF

UDAF

定義

使用者定義的函式 (UDF) 會接受輸入資料欄、對輸入內容執行動作,並將執行結果以值的形式傳回。

使用者定義的匯總函式 (UDAF) 會接受資料欄輸入內容,一次對一組資料列執行計算,然後以單一值的形式傳回計算結果。

支援的語言

SQL、JavaScript 和 Python

SQL 和 JavaScript

長期潛伏

  • 可為暫時或永久性。
  • 您可以在多個查詢中使用永久性 UDF。
  • 您只能將暫時性 UDF 用於單一查詢。
  • Python UDF 只能是永久性,不能是臨時性。
  • 可為暫時或永久性。
  • 您可以在多個查詢中使用永久性 UDAF。
  • 您只能將臨時 UDAF 用於單一查詢、指令碼、工作階段或程序。
  • 當持分者共用持久性 UDAF 時,您可以安全地呼叫這些 UDAF。

引數和資料類型

UDF 會接受符合 GoogleSQL 的 BigQuery 資料類型參數值。有些 SQL 類型可以直接對應至 JavaScript 類型,其他類型則不能。請參閱支援的 JavaScript 類型

如為 SQL UDF,參數值可以是 ANY TYPE,在呼叫函式時,可以比對多個引數類型。

只有 JavaScript UDF 有確定性指定詞,可向 BigQuery 提供提示,指出查詢結果是否可快取。

SQL 和 JavaScript UDAF 會接受符合 GoogleSQL for BigQuery 資料類型的參數值。

函式參數可以是匯總或非匯總。

用量

UDF 通常用於資料清理、轉換和驗證。

UDAF 通常用於計算總和統計資料,例如平均值、總和和計數。

資料表函式

資料表函式 (也稱為資料表值函式,簡稱 TVF) 是一種會傳回資料表的 UDF。你可以在任何可使用表格的情況下使用表格函式。資料表函式的運作方式與檢視類似,但資料表函式可採用參數。

您可以使用表格函式執行下列操作:

  • 傳入多個參數。
  • 在任何有效的資料表內容中呼叫資料表函式。
  • 將資料表函式產生的輸出內容與其他資料表彙整。
  • 子查詢中使用資料表函式。

如要進一步瞭解表格函式,請參閱「表格函式」、「限制」和「配額與限制」。

遠端函式

遠端函式可讓您使用 SQL 和 JavaScript 以外的語言實作函式,或使用 BigQuery UDF 不支援的程式庫或服務。

BigQuery 遠端函式會使用任何支援的語言,將 Google SQL 函式與 Cloud Run 函式Cloud Run 整合,然後透過 Google SQL 查詢叫用這些函式。

以下是使用遠端函式可執行的任務範例:

建立遠端函式時,請按照下列步驟操作:

  1. 在 Cloud Run 函式或 Cloud Run 中建立 HTTP 端點。
  2. 使用 CLOUD_RESOURCE 連線類型,在 BigQuery 中建立遠端函式。
  3. 在查詢中使用遠端函式,就像使用 BigQuery 的其他 UDF 一樣。

如要進一步瞭解遠端函式,請參閱「遠端函式」、「限制」和「配額與限制」。

預存程序

SQL 預存程序是一組陳述式,可從其他查詢或其他預存程序中呼叫。您可以在 BigQuery 資料集中命名及儲存程序。

儲存程序支援程序語言陳述式,可讓您執行定義變數和實作控制流程等操作。如要進一步瞭解程序語言陳述式,請參閱程序語言參考資料

預存程序可執行下列操作:

  • 接收輸入引數,並傳回值做為輸出內容。
  • 多位使用者可存取或修改多個資料集的資料。
  • 包含多個陳述式查詢

部分預存程序已內建於 BigQuery,因此不需要建立。這些稱為系統程序,您可以在系統程序參考資料中進一步瞭解。

也支援 BigQuery 中的 Spark 預存程序。這些程序設有配額和限制

如要進一步瞭解預存程序,請參閱「SQL 預存程序」。