日常安排簡介
本文說明如何選擇常式,這是一種資源類型,可用於在 BigQuery 中建立函式或預存程序。
支援的日常安排
BigQuery 支援下列常式:
- 使用者定義函式 (UDF)
- 使用者定義的匯總函式 (UDAF)
- 資料表函式
- 遠端函式
- 預存程序
如何選擇日常安排
本節說明選擇常式時應考量的因素,並依工作比較常式。
要考量的因素
選擇常式時,請考量下列因素,各類常式的相關章節會說明這些因素:
- 要實作的工作類型。
- 要使用的程式設計語言。
- 要為常式實作的持續性類型:暫時或持續。
- 常式所需的重複使用類型:跨單一或多個查詢。
- 效能考量。
- 存取外部服務。
- 與使用者分享日常安排。
依工作比較日常安排
下表列出各類日常安排可執行的工作:
工作 |
常式資源類型 |
|---|---|
建立函式,在 BigQuery 中執行一般用途工作。 |
SQL 或 JavaScript UDF SQL 或 JavaScript UDAF |
在 BigQuery 中建立執行一般用途工作的函式,並使用 Cloud 資源連結與外部系統通訊。 Google Cloud |
Python UDF |
建立匯總資料的函式。 |
UDAF |
使用參數建立表格。 |
資料表函式 |
建立使用 BigQuery 不支援的語言、程式庫或服務的函式。這些函式會直接與 Cloud Run functions 和 Cloud Run 整合。 |
遠端函式 |
使用程序語言,在單一查詢中執行多個陳述式,做為多陳述式查詢。您可以使用多重陳述式查詢執行下列操作:
在 BigQuery 中建立及呼叫 Apache Spark 適用的預存程序。 |
預存程序 |
User-defined function (UDF)
使用者定義函式可讓您使用 SQL 運算式、JavaScript 程式碼或 Python 程式碼建立函式。UDF 可接受輸入資料欄、對輸入內容執行動作,並將執行結果以值的形式傳回。
您可以定義永久或暫時的 UDF。您可以在多項查詢中重複使用永久 UDF,而單項查詢的範圍內只能有一個 temporary UDF。
您可以建立 UDF,與自訂遮蓋常式搭配使用,在資料欄套用 UDF 後傳回資料欄的值。建立自訂遮蓋常式後,您可以在「Create data policies」(建立資料政策) 中,將該常式設為遮蓋規則。
如要進一步瞭解 UDF,請參閱下列資源:
語言型 UDF
- SQL UDF 支援範本化 UDF 參數,可在呼叫 UDF 時比對多個引數類型。SQL UDF 也可以傳回純量子查詢的值。
- JavaScript UDF 可讓您從 SQL 查詢呼叫以 JavaScript 編寫的程式碼。
- 與標準 SQL 查詢相比,JavaScript UDF 通常會耗用更多運算單元資源,導致工作效能降低。
- 如果函式可以用 SQL 表示,通常最好以標準 SQL 查詢工作的形式執行程式碼。
- Python UDF 是在 BigQuery 代管資源上建構及執行。這些 UDF 可讓您在 Python 中實作函式,並在 SQL 查詢中使用。
- 您可以使用 Cloud 資源連結服務帳戶,從 Python UDF 存取 Google Cloud 服務或外部服務。
- 您也可以從 Python Package Index (PyPI) 安裝第三方程式庫。
社群貢獻的 UDF
除了您建立的 UDF 之外,社群提供的 UDF 也可以在 bigquery-public-data.persistent_udfs 公開資料集和開放原始碼 bigquery-utils GitHub 存放區中取得。
使用者定義的匯總函式 (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,取決於您嘗試執行的特定工作。
- 如要對個別資料值執行計算或轉換,請使用 UDF。
- 如要對一組資料值執行相同操作,請使用 UDAF。
舉例來說,如要計算一欄數字的平均值,請使用 UDAF。如要將一欄字串轉換為大寫,請使用 UDF。
UDF 和 UDAF 有下列相似之處:
- UDF 和 UDAF 無法變更資料、與外部系統通訊,或將記錄傳送至 Google Cloud Observability 或類似應用程式。但 Python UDF 例外,可透過 Cloud 資源連結存取外部服務。不過,Python UDF 不支援 VPC Service Controls 或客戶自行管理的加密金鑰 (CMEK)。
- UDAF 的限制與 UDF 相同,但多了一些限制。
- UDF 和 UDAF 具有相同的配額和限制。
UDF 和 UDAF 的差異如下:
屬性 |
UDF |
UDAF |
|---|---|---|
定義 |
使用者定義函式 (UDF) 可接受輸入資料欄、對輸入內容執行動作,並將執行結果以值的形式傳回。 |
使用者定義的匯總函式 (UDAF) 可接受輸入資料欄、一次對一組資料列執行計算,然後將計算結果以單一值的形式傳回。 |
支援的語言 |
SQL、JavaScript 和 Python |
SQL 和 JavaScript |
保留設定 |
|
|
引數和資料類型 |
UDF 接受符合 GoogleSQL for BigQuery 資料類型的參數值。部分 SQL 類型可直接對應至 JavaScript 類型,但其他類型則無法。請參閱 JavaScript 支援的類型。 如果是 SQL UDF,參數值可以是 只有 JavaScript UDF 具有決定性指定符,可向 BigQuery 提供查詢結果是否可快取的提示。 |
SQL 和 JavaScript UDAF 接受符合 BigQuery 資料類型 GoogleSQL 的參數值。 函式參數可以是匯總或非匯總。 |
用量 |
UDF 通常用於資料清理、轉換和驗證。 |
UDAF 通常用於計算摘要統計資料,例如平均值、總和及計數。 |
資料表函式
資料表函式 (也稱為資料表值函式 (TVF)) 是傳回資料表的 UDF。您可以在任何可使用表格的地方使用表格函式。 資料表函式的行為與檢視表類似,但資料表函式可以接受參數。
您可以對資料表函式執行下列操作:
- 傳入多個參數。
- 在表格有效的任何內容中呼叫表格函式。
- 將資料表函式的輸出內容與其他資料表彙整。
- 在子查詢中使用資料表函式。
如要進一步瞭解表格函式,請參閱「表格函式」、「限制」和「配額與限制」。
遠端函式
遠端函式可讓您使用 SQL 和 JavaScript 以外的語言實作函式,或使用 BigQuery UDF 不支援的程式庫或服務。
BigQuery 遠端函式會使用任何支援的語言,將 Google SQL 函式與 Cloud Run functions 和 Cloud Run 整合,然後透過 Google SQL 查詢叫用這些函式。
以下是遠端函式的應用範例:
建立遠端函式的步驟如下:
- 在 Cloud Run 函式或 Cloud Run 中建立 HTTP 端點。
- 使用
CLOUD_RESOURCE連線類型,在 BigQuery 中建立遠端函式。 - 在查詢中使用遠端函式,就像使用任何其他 BigQuery 的 UDF 一樣。
如要進一步瞭解遠端函式,請參閱「遠端函式」、「限制」和「配額與限制」。
預存程序
SQL 預存程序是一組陳述式,可從其他查詢或其他預存程序呼叫。您可以在 BigQuery 資料集中命名及儲存程序。
預存程序支援程序語言陳述式,可讓您定義變數及實作控制流程等。如要進一步瞭解程序語言陳述式,請參閱「程序語言參考資料」。
預存程序可以執行下列操作:
- 接受輸入引數,並傳回值做為輸出內容。
- 多位使用者可存取或修改多個資料集中的資料。
- 包含多陳述式查詢。
BigQuery 內建部分預存程序,不需建立。這些程序稱為系統程序,如要進一步瞭解,請參閱「系統程序參考資料」。
也支援 BigQuery 中的 Spark 預存程序。這些程序有配額和限制。
如要進一步瞭解預存程序,請參閱「SQL 預存程序」。
搭配 AI 代理使用日常安排
如果您建構的 AI 代理會處理 BigQuery 資料,代理可以從 Knowledge Catalog 擷取常式中繼資料,包括常式的引數、傳回類型和原始碼,瞭解常式的功能和呼叫方式。詳情請參閱「擷取日常安排的情境」。