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

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

如果您的地區支援互動式 SQL 翻譯器,您可以使用翻譯規則功能自訂互動式 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 Editor (roles/bigquerymigration.editor) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

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

所需權限

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

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

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

設定其他翻譯設定的權限

您可以使用翻譯設定中的「Translation Config ID」和「Translation Configuration Source Location」欄位,設定其他翻譯設定。如要設定這些翻譯設定,您必須具備下列權限:

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

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

  • roles/bigquerymigration.viewer

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

支援的 SQL 方言

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

  • Amazon Redshift SQL
  • Apache HiveQL 和 Beeline CLI
  • IBM Netezza SQL 和 NZPLSQL
  • Teradata 和 Teradata Vantage:
    • SQL
    • 基本 Teradata 查詢 (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 節能綠葉圖示 二氧化碳排放量低2
歐盟多個區域 eu
芬蘭 europe-north1 節能綠葉圖示 低二氧化碳
法蘭克福 europe-west3 節能綠葉圖示 二氧化碳排放量低2
倫敦 europe-west2 節能綠葉圖示 二氧化碳排放量低2
馬德里 europe-southwest1 節能綠葉圖示 二氧化碳排放量低2
米蘭 europe-west8
荷蘭 europe-west4 節能綠葉圖示 二氧化碳排放量低
巴黎 europe-west9 節能綠葉圖示 二氧化碳排放量低2
斯德哥爾摩 europe-north2 節能綠葉圖示 低二氧化碳
杜林 europe-west12
華沙 europe-central2
蘇黎世 europe-west6 節能綠葉圖示 二氧化碳排放量低
美洲
俄亥俄州哥倫布 us-east5
達拉斯 us-south1 節能綠葉圖示 二氧化碳排放量低2
愛荷華州 us-central1 節能綠葉圖示 二氧化碳排放量低2
拉斯維加斯 us-west4
洛杉磯 us-west2
墨西哥 northamerica-south1
北維吉尼亞州 us-east4
奧勒岡州 us-west1 節能綠葉圖示 二氧化碳排放量低2
魁北克 northamerica-northeast1 節能綠葉圖示 二氧化碳排放量低2
聖保羅 southamerica-east1 節能綠葉圖示 二氧化碳排放量低
鹽湖城 us-west3
聖地亞哥 southamerica-west1 節能綠葉圖示 二氧化碳排放量低2
南卡羅來納州 us-east1
多倫多 northamerica-northeast2 節能綠葉圖示 二氧化碳排放量低2
美國 (多個區域) 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. 在「Source dialect」中,選取要翻譯的 SQL 方言。

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

  5. 按一下 [儲存]

  6. 在「編輯器」窗格中,按一下「More」,然後選取「Enable SQL translation」

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

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

  8. 按一下 [翻譯]

    BigQuery 會將查詢轉譯為 GoogleSQL,並顯示在右側窗格中。例如,下圖顯示已翻譯的 Teradata SQL:

    顯示已轉譯為 GoogleSQL 的 Teradata SQL 查詢

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

  10. 選用:如要返回 SQL 編輯器,請點選「More」,然後選取「Disable SQL translation」

    「Editor」窗格會恢復為單一窗格。

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

您可以設定互動式 SQL 翻譯器,調整互動式 SQL 翻譯器翻譯來源 SQL 的方式。您可以透過在 YAML 設定檔中提供自訂規則,讓 Gemini 使用這些規則,或是提供設定 YAML 檔案,其中包含 SQL 物件中繼資料或物件對應資訊。

建立及套用 Gemini 強化的翻譯規則

您可以建立轉譯規則,自訂互動式 SQL 翻譯器轉譯 SQL 的方式。互動式 SQL 翻譯器會根據您指派給它的任何 Gemini 強化 SQL 翻譯規則調整翻譯內容,讓您根據遷移需求自訂轉譯結果。這項功能僅支援特定地點

如要建立 Gemini 強化的 SQL 轉譯規則,您可以在控制台中建立規則,也可以建立設定 YAML 檔案並上傳至 Cloud Storage。

主控台

如要為輸入的 SQL 建立 Gemini 強化 SQL 翻譯規則,請在查詢編輯器中編寫輸入 SQL 查詢,然後按一下「ASSIST」>「自訂」。(預覽)

自訂翻譯輸入內容

同樣地,如要為輸出 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. 選用:如要新增這項規則以便用於日後的翻譯作業,請選取「Save this prompt...」核取方塊。

    規則會儲存在預設設定 YAML 檔案 (__default.ai_config.yaml) 中。這個設定 YAML 檔案會儲存至 Cloud Storage 資料夾,位置如翻譯設定的「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 可根據規則為輸入內容提供建議,系統就會顯示「Preview suggested changes」對話方塊,並顯示可能會對翻譯輸入內容進行的變更。(預覽)

如果根據您的規則,Gemini 有可用於輸出的建議,程式碼編輯器就會顯示通知橫幅。如要查看並套用這些建議,請按照下列步驟操作:

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

    套用以 Gemini 為基礎的設定 YAML 檔案中的變更

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

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

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

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

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

  2. 設定編輯器出現時,請選取要編輯的 YAML 設定檔。

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

  4. 按一下「Done」關閉 YAML 編輯器。

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

說明譯文

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

如要取得 Gemini 產生的 SQL 翻譯說明,請執行下列操作:

  1. 如要建立 Gemini 產生的 SQL 翻譯說明,請依序點選「Assist」和「Explain this translation」

    「說明翻譯」按鈕。

使用批次翻譯設定 ID 進行翻譯

您可以提供批次翻譯設定 ID,讓互動式查詢採用與批次翻譯工作相同的翻譯設定。

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

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

  3. 按一下 [儲存]

使用其他設定進行翻譯

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

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

  1. 在查詢編輯器中,依序點選「更多」>「翻譯設定」
  2. 在「Translation Configuration Source Location」欄位中,指定儲存在 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 翻譯器不需付費。不過,用於儲存輸入和輸出檔案的儲存空間會產生一般費用。詳情請參閱「儲存空間定價」。

後續步驟

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