使用互動式 SQL 翻譯器翻譯查詢

本文說明如何使用 BigQuery 互動式 SQL 翻譯器,將查詢從不同的 SQL 方言翻譯成 GoogleSQL 查詢。互動式 SQL 翻譯器能讓您用更少的時間和心力,將工作負載遷移至 BigQuery。本文適用於熟悉Google Cloud 控制台的使用者。

如果您的位置支援這項功能,您可以使用翻譯規則功能,自訂互動式 SQL 翻譯器翻譯 SQL 的方式。

事前準備

如果您的 Google Cloud CLI 專案是在 2022 年 2 月 15 日前建立,請按照下列步驟啟用 BigQuery Migration API:

  1. 前往 Google Cloud 控制台的「BigQuery Migration API」頁面。

    前往 BigQuery Migration API

  2. 按一下「啟用」

權限與角色

本節說明使用互動式 SQL 翻譯工具所需的身分與存取權管理 (IAM) 權限,包括授予這些權限的預先定義 IAM 角色。本節也會說明設定其他翻譯設定所需的權限。

使用互動式 SQL 翻譯器的權限

如要取得使用互動式翻譯工具所需的權限,請要求管理員在 parent 資源上授予您「MigrationWorkflow 編輯者」 (roles/bigquerymigration.editor) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色具備使用互動式翻譯工具所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要使用互動式翻譯工具,必須具備下列權限:

  • bigquerymigration.workflows.create
  • bigquerymigration.workflows.get

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

設定其他翻譯設定的權限

您可以使用轉譯設定中的「轉譯設定 ID」和「轉譯設定來源位置」欄位,設定其他轉譯設定。如要設定這些翻譯設定,您必須具備下列權限:

  • bigquerymigration.workflows.get
  • bigquerymigration.workflows.list

下列預先定義的 IAM 角色提供設定其他翻譯設定所需的權限:

  • roles/bigquerymigration.viewer

如要進一步瞭解 BigQuery IAM,請參閱「使用身分與存取權管理功能控管存取權」一文。

支援的 SQL 方言

BigQuery 互動式 SQL 翻譯器可將下列 SQL 方言翻譯成 GoogleSQL:

  • Amazon Redshift SQL
  • Apache HiveQL 和 Beeline CLI
  • IBM Netezza SQL 和 NZPLSQL
  • Teradata 和 Teradata Vantage:
    • SQL
    • Basic Teradata Query (BTEQ)
    • Teradata Parallel Transport (TPT)

此外,預覽版也支援翻譯下列 SQL 方言:

  • Apache Spark SQL
  • Azure Synapse T-SQL
  • Greenplum SQL
  • IBM DB2 SQL
  • MySQL SQL
  • Oracle SQL、PL/SQL、Exadata
  • PostgreSQL SQL
  • Trino 或 PrestoSQL
  • Snowflake SQL
  • SQL Server T-SQL
  • SQLite
  • Vertica SQL

使用輔助 UDF 處理不支援的 SQL 函式

將來源方言的 SQL 轉換為 BigQuery 時,部分函式可能沒有直接對應的函式。為解決這個問題,BigQuery 遷移服務 (和更廣泛的 BigQuery 社群) 提供輔助使用者定義函式 (UDF),可複製這些不支援的來源方言函式行為。

這些 UDF 通常位於 bqutil 公開資料集中,因此翻譯後的查詢一開始可以採用 bqutil.<dataset>.<function>() 格式參照這些 UDF。例如:bqutil.fn.cw_count()

實際運作環境的重要注意事項:

雖然 bqutil 可方便存取這些輔助 UDF,進行初始翻譯和測試,但基於下列原因,不建議直接依賴 bqutil 處理實際工作負載:

  1. 版本控管:bqutil 專案會代管這些 UDF 的最新版本,因此定義可能會隨時間變更。如果 UDF 的邏輯更新,直接依賴 bqutil 可能會導致生產查詢發生非預期行為或重大變更。
  2. 依附元件隔離:將 UDF 部署至您自己的專案,可將實際工作環境與外部變更隔離。
  3. 自訂:您可能需要修改或最佳化這些 UDF,以進一步符合特定業務邏輯或成效需求。只有在這些資源位於您的專案中時,才能執行這項操作。
  4. 安全性和控管:貴機構的安全政策可能會限制直接存取公開資料集 (例如 bqutil),以處理實際工作環境資料。將 UDF 複製到受控環境,符合這類政策規定。

將輔助 UDF 部署至專案:

如要穩定可靠地在實際工作環境中使用,請將這些輔助 UDF 部署到自己的專案和資料集。您可以完全掌控這些應用程式的版本、自訂項目和存取權。 如需部署這些 UDF 的詳細操作說明,請參閱 GitHub 上的 UDF 部署指南。本指南提供必要的指令碼和步驟,協助您將 UDF 複製到環境中。

位置

互動式 SQL 翻譯器適用於下列處理位置:

地區說明 區域名稱 詳細資料
亞太地區
德里 asia-south2
香港 asia-east2
雅加達 asia-southeast2
墨爾本 australia-southeast2
孟買 asia-south1
大阪 asia-northeast2
首爾 asia-northeast3
新加坡 asia-southeast1
雪梨 australia-southeast1
台灣 asia-east1
東京 asia-northeast1
歐洲
比利時 europe-west1 節能綠葉圖示 二氧化碳排放量低2
柏林 europe-west10 節能綠葉圖示 二氧化碳排放量低
歐盟多區域 eu
芬蘭 europe-north1 節能綠葉圖示 二氧化碳排放量低2
法蘭克福 europe-west3 節能綠葉圖示 二氧化碳排放量低2
倫敦 europe-west2 節能綠葉圖示 二氧化碳排放量低2
馬德里 europe-southwest1 節能綠葉圖示 二氧化碳排放量低2
米蘭 europe-west8
荷蘭 europe-west4 節能綠葉圖示 二氧化碳排放量低2
巴黎 europe-west9 節能綠葉圖示 二氧化碳排放量低2
斯德哥爾摩 europe-north2 節能綠葉圖示 二氧化碳排放量低2
杜林 europe-west12
華沙 europe-central2
蘇黎世 europe-west6 節能綠葉圖示 二氧化碳排放量低2
美洲
俄亥俄州哥倫布 us-east5
達拉斯 us-south1 節能綠葉圖示 二氧化碳排放量低2
愛荷華州 us-central1 節能綠葉圖示 二氧化碳排放量低2
拉斯維加斯 us-west4
洛杉磯 us-west2
墨西哥 northamerica-south1
北維吉尼亞州 us-east4
奧勒岡州 us-west1 節能綠葉圖示 二氧化碳排放量低2
魁北克 northamerica-northeast1 節能綠葉圖示 二氧化碳排放量低2
聖保羅 southamerica-east1 節能綠葉圖示 二氧化碳排放量低2
鹽湖城 us-west3
聖地亞哥 southamerica-west1 節能綠葉圖示 二氧化碳排放量低2
南卡羅來納州 us-east1
多倫多 northamerica-northeast2 節能綠葉圖示 二氧化碳排放量低
美國多區域 us
非洲
約翰尼斯堡 africa-south1
MiddleEast
達曼 me-central2
杜哈 me-central1
以色列 me-west1

根據預設,翻譯規則功能適用於下列處理位置:

  • us (美國多區域)
  • eu (歐盟多區域)
  • us-central1 (愛荷華州)
  • europe-west4 (荷蘭)

以 Gemini 為基礎的翻譯設定僅適用於特定處理位置。詳情請參閱「Google 模型端點位置」。

將查詢翻譯為 GoogleSQL

請按照下列步驟將查詢翻譯成 GoogleSQL:

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「編輯器」窗格中,按一下「更多」,然後選取「翻譯設定」

  3. 在「來源方言」部分,選取要翻譯的 SQL 方言。

  4. (選用步驟) 在「Processing location」(處理位置) 中,選取要執行翻譯工作的地點。舉例來說,如果您位於歐洲,且不希望資料跨越任何位置限制範圍,請選取「eu」(歐洲)eu 區域。

  5. 按一下 [儲存]

  6. 在「編輯器」窗格中,按一下「更多」,然後選取「啟用 SQL 翻譯」

    「編輯器」窗格會分成兩個窗格。

  7. 在左側窗格中,輸入要翻譯的查詢。

  8. 按一下 [翻譯]

    BigQuery 會將查詢翻譯為 GoogleSQL,並顯示在右側窗格中。舉例來說,以下螢幕截圖顯示翻譯後的 Teradata SQL:

    顯示翻譯為 GoogleSQL 的 Teradata SQL 查詢

  9. 選用步驟:如要執行翻譯後的 GoogleSQL 查詢,請按一下「執行」

  10. 選用:如要返回 SQL 編輯器,請點選「更多」,然後選取「停用 SQL 翻譯」

    「編輯器」窗格會恢復為單一窗格。

搭配使用 Gemini 和互動式 SQL 翻譯器

您可以設定互動式 SQL 翻譯器,調整互動式 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 翻譯規則,請執行互動式翻譯,然後依序點按「輔助」>「自訂這項翻譯」

自訂翻譯輸出內容

「自訂」選單出現後,請繼續執行下列步驟。

  1. 使用下列一或多個提示建立翻譯規則:

    • 在「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 查詢進行指定變更。

  2. 按一下「預覽」

  3. 在「Gemini 生成的建議」對話方塊中,查看 Gemini 輔助 SQL 轉譯功能根據規則對 SQL 查詢所做的變更。

    套用 Gemini 生成的設定 YAML 檔案變更

  4. 選用:如要新增這項規則,以便用於日後的翻譯作業,請選取「儲存這個提示...」核取方塊。

    規則會儲存在預設設定 YAML 檔案或 __default.ai_config.yaml 中。 這個設定 YAML 檔案會儲存到 Cloud Storage 資料夾,如翻譯設定中的「Translation Configuration Source Location」(翻譯設定來源位置) 欄位所指定。如果尚未設定「Translation Configuration Source Location」,系統會顯示資料夾瀏覽器,供您選取資料夾。設定 YAML 檔案有大小限制

  5. 如要將建議的變更套用至 SQL 查詢,請按一下「套用」

YAML

如要建立 Gemini 強化版 SQL 轉譯規則,請建立以 Gemini 為基礎的設定 YAML 檔案,並上傳至 Cloud Storage。詳情請參閱「建立以 Gemini 為基礎的設定 YAML 檔案」。

將 Gemini 強化版 SQL 轉譯規則上傳至 Cloud Storage 後,即可套用該規則,方法如下:

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中,依序點選「更多」>「翻譯設定」。

  3. 在「Translation Configuration Source Location」(翻譯設定來源位置) 欄位中,指定儲存在 Cloud Storage 資料夾中的 Gemini YAML 檔案路徑。

  4. 按一下 [儲存]

    儲存後,請執行互動式翻譯。如果提供設定 YAML 檔案,互動式翻譯工具會根據檔案中的規則,建議變更翻譯內容。

如果 Gemini 根據規則為輸入內容提供建議,系統會顯示「預覽建議的變更」對話方塊,並顯示翻譯輸入內容的可能變更。(預覽)

如果 Gemini 根據規則提供輸出內容建議,程式碼編輯器中會顯示通知橫幅。如要查看及套用這些建議,請按照下列步驟操作:

  1. 在程式碼編輯器兩側,依序點選「輔助」>「查看建議」,即可重新查看對應查詢的建議變更。

    套用 Gemini 生成的設定 YAML 檔案變更

  2. 在「Gemini 生成的建議」對話方塊中,查看 Gemini 根據轉譯規則對 SQL 查詢所做的變更。

  3. 如要將建議的變更套用至翻譯輸出內容,請按一下「套用」

更新以 Gemini 為基礎的設定 YAML 檔案

如要更新現有的設定 YAML 檔案,請按照下列步驟操作:

  1. 在「Gemini 生成的建議」對話方塊中,按一下「查看 Gemini 規則設定檔」

  2. 設定編輯器隨即顯示,請選取要編輯的設定 YAML 檔案。

  3. 進行變更,然後按一下「儲存」

  4. 按一下「完成」,關閉 YAML 編輯器。

  5. 執行互動式翻譯,套用更新後的規則。

說明翻譯

執行互動式翻譯後,你可以要求 Gemini 生成文字說明。生成的文字包含翻譯後 SQL 查詢的摘要。Gemini 也會找出來源 SQL 查詢與翻譯後的 GoogleSQL 查詢之間的翻譯差異和不一致之處。

如要取得 Gemini 生成的 SQL 翻譯說明,請按照下列步驟操作:

  1. 如要建立 Gemini 生成的 SQL 翻譯說明,請依序點選「Assist」(輔助) 和「Explain this translation」(說明這項翻譯)

    「說明翻譯」按鈕。

使用批次翻譯設定 ID 翻譯

提供批次翻譯設定 ID,即可執行與批次翻譯工作相同翻譯設定的互動式查詢。

  1. 在查詢編輯器中,依序點選「更多」>「翻譯設定」。
  2. 在「Translation Configuration ID」(翻譯設定 ID) 欄位中,提供批次翻譯設定 ID,套用已完成的 BigQuery 批次遷移工作中的相同翻譯設定。

    如要找出工作批次轉譯設定 ID,請從「SQL 轉譯」頁面選取批次轉譯工作,然後按一下「轉譯設定」分頁標籤。批次翻譯設定 ID 會列為「資源名稱」

  3. 按一下 [儲存]

使用其他設定翻譯

您可以指定儲存在 Cloud Storage 資料夾中的設定 YAML 檔案,執行含有其他翻譯設定的互動式查詢。翻譯設定可能包含來源資料庫的 SQL 物件中繼資料或物件對應資訊,有助於提升翻譯品質。舉例來說,您可以加入來源資料庫的 DDL 資訊或結構定義,提升互動式 SQL 翻譯品質。

如要指定轉譯設定,請提供轉譯設定來源檔案的位置,然後按照下列步驟操作:

  1. 在查詢編輯器中,依序點選「更多」>「翻譯設定」。
  2. 在「轉譯設定來源位置」欄位中,指定儲存在 Cloud Storage 資料夾中的轉譯設定檔路徑。

    BigQuery 互動式 SQL 翻譯器支援包含翻譯中繼資料物件名稱對應的中繼資料 ZIP 檔案。如要瞭解如何將檔案上傳至 Cloud Storage,請參閱「從檔案系統上傳物件」。

  3. 按一下 [儲存]

如要在 BigQuery 後端儲存 dwh-migration-dumper 工具產生的中繼資料檔案資訊,請按照下列步驟操作:

  1. 在查詢編輯器中,依序點選「更多」>「翻譯設定」。
  2. 勾選「啟用中繼資料快取功能」核取方塊。對於含有大型中繼資料檔案的作業,這項程序可大幅縮短後續要求的翻譯延遲時間。快取中繼資料最多可保留 7 天。這項功能目前為預先發布版,如要尋求支援,或針對這項功能提供意見回饋,請聯絡 bq-edw-migration-support@google.com
  3. 按一下 [儲存]

設定檔大小限制

使用 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 翻譯器時,可能會遇到下列常見錯誤。

RelationNotFoundAttributeNotFound 翻譯問題

為確保翻譯結果最準確,您可以在查詢本身之前,輸入查詢中使用的任何資料表 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;

定價

使用互動式 SQL 翻譯器不需付費。不過,儲存輸入和輸出檔案所用的儲存空間仍須支付一般費用。詳情請參閱「儲存空間價格」。

後續步驟

進一步瞭解資料倉儲遷移作業的下列步驟: