使用互動式 SQL 翻譯器翻譯查詢
本文說明如何使用 BigQuery 互動式 SQL 翻譯器,將查詢從不同的 SQL 方言翻譯成 GoogleSQL 查詢。互動式 SQL 翻譯器能讓您用更少的時間和心力,將工作負載遷移至 BigQuery。本文適用於熟悉Google Cloud 控制台的使用者。
您可以透過翻譯規則功能,自訂互動式 SQL 翻譯器翻譯 SQL 的方式。
如要查看這項 SQL 轉譯器支援的 SQL 方言清單,請參閱「支援的 SQL 方言」。
如要查看支援的處理位置清單,請參閱「位置」。
事前準備
提交翻譯工作前,請先完成下列步驟。
啟用 SQL 翻譯
啟用必要 API,並取得使用 BigQuery SQL 翻譯器所需的權限。有關更多信息,請參閱 啟用 SQL 翻譯。
所需權限
如要取得使用互動式翻譯器、Translation API 或批次 SQL 翻譯器建立翻譯工作所需的權限,請要求管理員在 parent 資源中授予您下列 IAM 角色:
-
查看及監控遷移工作:
MigrationWorkflow 檢視者 (
roles/bigquerymigration.viewer) -
提交遷移工作:
MigrationWorkflow 編輯者 (
roles/bigquerymigration.editor) -
存取輸入和檔案的 Cloud Storage 值區:
儲存空間物件管理員 (
roles/storage.objectAdmin) - 來源和目標 Cloud Storage 值區。
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備使用互動式翻譯器、Translation API 或批次 SQL 翻譯器建立翻譯工作所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要使用互動式翻譯器、Translation API 或批次 SQL 翻譯器建立翻譯工作,您必須具備下列權限:
-
bigquerymigration.workflows.create -
bigquerymigration.workflows.get -
bigquerymigration.workflows.list -
bigquerymigration.workflows.delete -
bigquerymigration.subtasks.get -
bigquerymigration.subtasks.list -
storage.objects.get -
storage.objects.list -
storage.objects.create
使用輔助 UDF 處理不支援的 SQL 函式
將 SQL 從來源方言轉譯為 BigQuery 時,部分函式可能沒有直接對應的函式。為解決這個問題,BigQuery 遷移服務 (和更廣泛的 BigQuery 社群) 提供輔助使用者定義函式 (UDF),可複製這些不支援的來源方言函式行為。
這些 UDF 通常位於 bqutil 公開資料集中,因此翻譯後的查詢一開始可以採用 bqutil.<dataset>.<function>() 格式參照這些 UDF。例如:bqutil.fn.cw_count()。
正式環境的重要注意事項:
雖然 bqutil 可讓您輕鬆存取這些輔助 UDF,進行初步翻譯和測試,但基於下列原因,不建議直接依賴 bqutil 處理實際工作負載:
- 版本管控:
bqutil專案會代管這些 UDF 的最新版本,因此定義可能會隨時間變更。如果 UDF 的邏輯更新,直接依賴bqutil可能會導致生產查詢發生非預期行為或重大變更。 - 依附元件隔離:將 UDF 部署至自己的專案,可避免外部變更影響正式環境。
- 自訂:您可能需要修改或最佳化這些 UDF,進一步滿足特定商業邏輯或效能需求。只有在這些資源位於您的專案中時,才能執行這項操作。
- 安全性和治理:貴機構的安全政策可能會限制直接存取公開資料集 (例如
bqutil),以處理正式環境資料。將 UDF 複製到受控環境,符合這類政策規定。
將輔助 UDF 部署至專案:
如要穩定可靠地用於正式環境,請將這些輔助 UDF 部署到自己的專案和資料集。這樣一來,您就能完全掌控這些模型的版本、自訂項目和存取權。如需部署這些 UDF 的詳細操作說明,請參閱 GitHub 上的 UDF 部署指南。本指南提供必要的指令碼和步驟,可將 UDF 複製到您的環境。
位置
互動式 SQL 翻譯器僅適用於特定處理位置。詳情請參閱「位置」。
以 Gemini 為基礎的翻譯設定僅適用於特定處理位置。更多信息,請參閱 Google 模型端點位置
將查詢翻譯為 GoogleSQL
請按照下列步驟將查詢翻譯成 GoogleSQL:
前往 Google Cloud 控制台的「BigQuery」頁面。
在編輯按一下窗格工具 > 翻譯設定。
在「來源方言」部分,選取要翻譯的 SQL 方言。
選用。對於 處理位置,請選擇您希望翻譯作業執行的位置。例如,如果您身處歐洲,且不希望您的資料跨越任何位置邊界,請選擇
eu區域。按一下 [儲存]。
在「編輯器」窗格中,依序點選「工具」>「啟用 SQL 翻譯」。
編輯器窗格分成兩個窗格。
在左側窗格中,輸入要翻譯的查詢。
按一下「Translate」(翻譯)。
BigQuery 會將您的查詢轉換為 Google SQL 格式,並在右側窗格中顯示。例如,以下螢幕截圖顯示了翻譯後的 Teradata SQL:

選用步驟:如要執行翻譯後的 GoogleSQL 查詢,請按一下「執行」。
(可選)若要傳回 SQL 編輯器,請按一下更多的 > 禁用 SQL 翻譯。
「編輯器」窗格會恢復為單一窗格。
搭配互動式 SQL 翻譯器使用 Gemini
您可以設定互動式 SQL 翻譯器,調整翻譯來源 SQL 的方式。您可以透過在 YAML 設定檔中提供您自己的 Gemini 使用規則,或透過提供包含 SQL 物件元資料或物件對應資訊的 YAML 設定檔來實現這一點。
建立並套用 Gemini 增強型翻譯規則
您可以建立翻譯規則,自訂互動式 SQL 翻譯器翻譯 SQL 的方式。互動式 SQL 轉譯器會根據您指派的任何 Gemini 強化 SQL 轉譯規則調整轉譯內容,讓您根據遷移需求自訂轉譯結果。
如要建立已啟用 Gemini 的 SQL 轉譯規則,您可以在控制台中建立,也可以建立設定 YAML 檔案並上傳至 Cloud Storage。
控制台
如要為輸入的 SQL 建立 Gemini 輔助的 SQL 翻譯規則,請在查詢編輯器中編寫輸入的 SQL 查詢,然後依序點選「ASSIST」(輔助) >「Customize」(自訂)。(預覽)
同樣地,如要為輸出 SQL 建立 Gemini 輔助 SQL 翻譯規則,請執行互動式翻譯,然後依序點選「ASSIST」(輔助) >「Customize this translation」(自訂這項翻譯)。
當客製化選單出現後,請繼續執行下列步驟。
使用下列一或多個提示建立翻譯規則:
在「Find and replace a pattern」(尋找並取代模式) 提示中,於「Replace」(取代) 欄位指定要取代的 SQL 模式,並在「With」(取代為) 欄位指定要取代的 SQL 模式。
SQL 模式可以包含 SQL 腳本中的任意數量的語句、子句或函數。使用這項提示建立規則後,Gemini 強化版 SQL 轉譯功能會找出 SQL 查詢中該 SQL 模式的所有例項,並動態替換為其他 SQL 模式。舉例來說,您可以使用這個提示建立規則,將所有
months_between (X,Y)替換為date_diff(X,Y,MONTH)。在「說明輸出內容的變更」欄位中,以自然語言輸入 SQL 翻譯輸出內容的變更。
使用這項提示建立規則後,Gemini 輔助的 SQL 轉譯功能會識別要求,並對 SQL 查詢進行指定變更。
按一下「預覽」。
在「Gemini 生成的建議」對話方塊中,根據規則檢查 Gemini 強化版 SQL 轉譯功能對 SQL 查詢所做的變更。
選用:如要新增這項規則,以便用於日後的翻譯作業,請選取「儲存這個提示...」核取方塊。
規則會儲存在預設設定 YAML 檔案或
__default.ai_config.yaml中。 這個設定 YAML 檔案會儲存到 Cloud Storage 資料夾,如翻譯設定中的「Translation Configuration Source Location」欄位所指定。如果 翻譯配置來源位置 尚未設置,則會顯示一個資料夾瀏覽器,允許您選擇一個資料夾。設定 YAML 檔案須遵守設定檔大小限制。如要將建議的變更套用至 SQL 查詢,請按一下「套用」。
YAML
如要建立 Gemini 強化版 SQL 轉譯規則,請建立以 Gemini 為基礎的設定 YAML 檔案,並上傳至 Cloud Storage。詳情請參閱「建立以 Gemini 為基礎的設定 YAML 檔案」。
將 Gemini 強化版 SQL 轉譯規則上傳至 Cloud Storage 後,即可套用該規則,方法如下:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中,依序點選「工具」>「翻譯設定」。
在「Translation Configuration Source Location」(翻譯設定來源位置) 欄位中,指定儲存在 Cloud Storage 資料夾中的 Gemini 基礎 YAML 檔案路徑。
按一下 [儲存]。
儲存後,即可執行互動式翻譯。互動式翻譯器會根據您的設定 YAML 檔案中的規則(如果有)對您的翻譯提出更改建議。
如果 Gemini 根據規則為輸入內容提供建議,系統會顯示「預覽建議的變更」對話方塊,並顯示翻譯輸入內容的可能變更。(預覽)
如果 Gemini 根據規則提供輸出內容建議,程式碼編輯器會顯示通知橫幅。如要查看及套用這些建議,請按照下列步驟操作:
在程式碼編輯器兩側,依序點選「輔助」>「查看建議」,即可重新查看對應查詢的建議變更。
在「Gemini 生成的建議」對話方塊中,查看 Gemini 根據轉譯規則對 SQL 查詢所做的變更。
如要將建議的變更套用至翻譯輸出內容,請按一下「套用」。
更新以 Gemini 為基礎的設定 YAML 檔案
若要更新現有的 YAML 設定文件,請執行下列操作:
在「Gemini 生成的建議」對話方塊中,按一下「查看 Gemini 規則設定檔」。
設定編輯器隨即顯示,請選取要編輯的設定 YAML 檔案。
進行變更,然後按一下「儲存」。
按一下「完成」關閉 YAML 編輯器。
執行互動式翻譯,套用更新後的規則。
說明翻譯內容
執行互動式翻譯後,你可以要求 Gemini 生成文字說明。生成的文字包含翻譯後 SQL 查詢的摘要。Gemini 也會找出來源 SQL 查詢與轉譯的 GoogleSQL 查詢之間的轉譯差異和不一致之處。
如要取得 Gemini 生成的 SQL 翻譯說明,請按照下列步驟操作:
如要建立 Gemini 生成的 SQL 翻譯說明,請依序點選「輔助」和「說明這項翻譯」。
使用批次翻譯配置 ID 進行翻譯
提供批次翻譯設定 ID,即可執行與批次翻譯工作相同翻譯設定的互動式查詢。
- 在查詢編輯器中,依序點選「工具」>「翻譯設定」。
在 翻譯配置 ID 欄位中,提供批次翻譯配置 ID,以套用來自已完成的 BigQuery 批次遷移作業的相同翻譯配置。
如要找出工作的批次轉譯設定 ID,請從「SQL 轉譯」頁面選取批次轉譯工作,然後按一下「轉譯設定」分頁標籤。批次翻譯配置 ID 列為 資源名稱。
按一下 [儲存]。
使用其他配置進行翻譯
您可以透過指定儲存在雲端儲存資料夾中的設定 YAML 檔案來執行具有其他翻譯配置的互動式查詢。翻譯設定可能包含來源資料庫的 SQL 物件中繼資料或物件對應資訊,有助於提升翻譯品質。舉例來說,您可以納入來源資料庫的 DDL 資訊或結構定義,提升互動式 SQL 翻譯品質。
如要指定轉譯設定,請提供轉譯設定來源檔案的位置,方法如下:
- 在查詢編輯器中,依序點選「工具」>「翻譯設定」。
在 翻譯配置來源位置 欄位中,指定儲存在雲端儲存資料夾中的翻譯設定檔的路徑。
BigQuery 互動式 SQL 轉換器支援包含 轉換元資料 和 物件名稱映射 的元資料 ZIP 檔案。 如要瞭解如何將檔案上傳至 Cloud Storage,請參閱「從檔案系統上傳物件」。
按一下 [儲存]。
設定檔大小限制
使用 BigQuery 互動式 SQL 轉譯器時,壓縮的後設資料檔案或 YAML 設定檔必須小於 50 MB。如果檔案大小超過 50 MB,則互動式翻譯器將在翻譯過程中跳過該設定文件,並產生類似於以下內容的錯誤訊息:
CONFIG ERROR: Skip reading file "gs://metadata-file.zip". File size (150,000,000 bytes)
exceeds limit (50 MB).
如要縮減中繼資料檔案大小,可以使用 --database 或 --schema 標記,只擷取與翻譯輸入查詢相關的資料庫或結構定義中繼資料。如要進一步瞭解如何使用這些標記產生中繼資料檔案,請參閱「全域標記」。
排解翻譯錯誤
使用互動式 SQL 翻譯器時,可能會遇到下列常見錯誤。
RelationNotFound 或 AttributeNotFound 翻譯問題
使用互動式 SQL 翻譯器翻譯查詢後,您可能會遇到翻譯失敗的情況,並收到 RelationNotFound 或 AttributeNotFound 錯誤。
如要找出翻譯失敗的內容,請前往「翻譯詳細資料」頁面,然後開啟「記錄訊息」分頁。
為了確保翻譯的準確性,您可以在執行查詢之前,為查詢中使用的任何資料表輸入資料定義語言 (DDL) 語句。例如,如果要翻譯 Amazon Redshift 查詢 select table1.field1, table2.field1
from table1, table2 where table1.id = table2.id;,則需要將下列 SQL 語句輸入到互動式 SQL 轉換器中:
create table schema1.table1 (id int, field1 int, field2 varchar(16));
create table schema1.table2 (id int, field1 varchar(30), field2 date);
select table1.field1, table2.field1
from table1, table2
where table1.id = table2.id;
使用 Gemini 修正翻譯問題
如要修正 RelationNotFound 或 AttributeNotFound 錯誤導致的翻譯工作失敗問題,你也可以按照下列步驟,使用 Gemini 嘗試解決這些問題。
導覽至 翻譯詳情 頁面,並開啟 日誌訊息 標籤。
在「類別」欄中,按一下含有
RelationNotFound或AttributeNotFound訊息的查詢。按一下「建議修正方式」。
按一下「套用」。
點選 Translate 重新翻譯查詢。
定價
使用互動式 SQL 翻譯器不需付費。不過,儲存輸入和輸出檔案的空間仍會產生一般費用。詳情請參閱儲存空間價格。
後續步驟
進一步瞭解資料倉儲遷移作業的下列步驟: