使用設定 YAML 檔案轉換 SQL 翻譯
本文件說明如何使用設定 YAML 檔案,在將 SQL 程式碼遷移至 BigQuery 時轉換該程式碼。這份文件提供建立自訂設定 YAML 檔案的規範,並提供這項功能支援的各種翻譯轉換功能範例。
使用 BigQuery 互動式 SQL 翻譯器、BigQuery Migration API 或批次 SQL 翻譯時,您可以提供 YAML 設定檔來修改 SQL 查詢翻譯。使用設定 YAML 檔案,可在從來源資料庫轉譯 SQL 查詢時進一步自訂。
您可以透過下列方式,指定要用於 SQL 翻譯的 YAML 設定檔:
- 如果您使用的是互動式 SQL 翻譯器,請在轉譯設定中指定設定檔或批次轉譯工作 ID 的檔案路徑。
- 如果您使用 BigQuery Migration API,請將 YAML 設定檔放在與輸入 SQL 檔案相同的 Cloud Storage 值區中。
- 如果要執行批次 SQL 轉譯,請將設定 YAML 檔案放在與輸入 SQL 檔案相同的 Cloud Storage 值區。
- 如果您使用批次轉譯 Python 用戶端,請將設定 YAML 檔案放在本機轉譯輸入資料夾中。
互動式 SQL 翻譯器、BigQuery Migration API、批次 SQL 翻譯器和批次翻譯 Python 用戶端支援在單一翻譯工作中使用多個 YAML 設定檔。詳情請參閱「套用多個 YAML 設定」一文。
設定 YAML 檔案的相關規定
建立設定 YAML 檔案前,請先詳閱下列資訊,確保 YAML 檔案與 BigQuery Migration Service 相容:
- 您必須將設定 YAML 檔案上傳至包含 SQL 翻譯輸入檔案的 Cloud Storage 值區根目錄。如要瞭解如何建立值區及將檔案上傳至 Cloud Storage,請參閱「建立值區」和「從檔案系統上傳物件」。
- 單一設定 YAML 檔案的檔案大小不得超過 1 MB。
- 在單一 SQL 翻譯工作中使用的所有設定 YAML 檔案,其總檔案大小不得超過 4 MB。
- 如果您使用
regex
語法比對名稱,請使用 RE2/J。 - 所有設定 YAML 檔案名稱都必須包含
.config.yaml
副檔名,例如change-case.config.yaml
。config.yaml
本身不是有效的設定檔名稱。
建立設定 YAML 檔案的指南
本節提供一些建立設定 YAML 檔案的一般規範:
標頭
每個設定檔都必須包含標頭,指定設定類型。object_rewriter
類型用於在設定 YAML 檔案中指定 SQL 翻譯。以下範例使用 object_rewriter
類型來轉換名稱大小寫:
type: object_rewriter
global:
case:
all: UPPERCASE
實體選取
如要執行實體專屬轉換,請在設定檔中指定實體。所有 match
屬性皆為選用項,請只使用轉換作業所需的 match
屬性。下列 YAML 設定會公開要比對的屬性,以便選取特定實體:
match:
database: <literal_name>
schema: <literal_name>
relation: <literal_name>
attribute: <literal_name>
databaseRegex: <regex>
schemaRegex: <regex>
relationRegex: <regex>
attributeRegex: <regex>
每個 match
屬性的說明:
database
或db
:project_id 元件。schema
:資料集元件。relation
:資料表元件。attribute
:資料欄元件。僅適用於屬性選取databaseRegex
或dbRegex
:使用規則運算式比對database
屬性 (預覽)。schemaRegex
:將schema
屬性與規則運算式比對 (預覽)。relationRegex
:使用規則運算式比對relation
屬性 (預先發布版)。attributeRegex
:使用規則運算式比對attribute
屬性。僅適用於屬性選取 (Preview)。
舉例來說,下列設定 YAML 會指定 match
屬性,以便選取 testdb.acme.employee
表格來進行臨時表格轉換。
type: object_rewriter
relation:
-
match:
database: testdb
schema: acme
relation: employee
temporary: true
您可以使用 databaseRegex
、schemaRegex
、relationRegex
和 attributeRegex
屬性指定規則運算式,以便選取實體的子集。以下範例會將 testdb
中 tmp_schema
架構的所有關聯變更為暫時性關聯,只要名稱以 tmp_
開頭即可:
type: object_rewriter
relation:
-
match:
schema: tmp_schema
relationRegex: "tmp_.*"
temporary: true
文字和 regex
屬性都會以不區分大小寫的方式進行比對。您可以使用 regex
搭配停用的 i
標記,強制執行大小寫敏感比對,如以下範例所示:
match:
relationRegex: "(?-i:<actual_regex>)"
您也可以使用等同的短字串語法指定完全限定的實體。短字串語法預期有 3 個 (關係選取) 或 4 個 (屬性選取) 以點號分隔的名稱片段,如 testdb.acme.employee
範例所示。然後,系統會在內部解讀這些區段,就像分別傳遞 database
、schema
、relation
和 attribute
一樣。這表示名稱會以字面意思比對,因此縮短語法不允許使用規則運算式。以下範例說明如何使用短字串語法,在設定 YAML 檔案中指定完整限定實體:
type: object_rewriter
relation:
-
match : "testdb.acme.employee"
temporary: true
如果資料表名稱含有半形句號,您就無法使用簡短語法指定名稱。在這種情況下,您必須使用物件比對功能。以下範例會將 testdb.acme.stg.employee
資料表變更為暫時性資料表:
type: object_rewriter
relation:
-
match:
database: testdb
schema: acme
relation: stg.employee
temporary: true
設定 YAML 會將 key
做為 match
的別名。
預設資料庫
部分輸入 SQL 方言 (特別是 Teradata) 不支援限定名稱中的 database-name
。在這種情況下,要比對實體最簡單的方法,就是在 match
中省略 database
屬性。
不過,您可以設定 BigQuery Migration Service 的 default_database
屬性,並在 match
中使用該預設資料庫。
支援的目標屬性類型
您可以使用 YAML 設定檔執行屬性類型轉換,將資料欄的資料類型從來源類型轉換為目標類型。設定 YAML 檔案支援下列目標類型:
BOOLEAN
TINYINT
SMALLINT
INTEGER
BIGINT
FLOAT
DOUBLE
NUMERIC
(支援選用的精確度和小數位數,例如NUMERIC(18, 2)
)TIME
TIMETZ
DATE
DATETIME
TIMESTAMP
TIMESTAMPTZ
CHAR
(支援選用精確度,例如CHAR(42)
)VARCHAR
(支援選用精確度,例如VARCHAR(42)
)
設定 YAML 範例
本節提供範例,說明如何建立各種設定 YAML 檔案,以便與 SQL 翻譯搭配使用。每個範例都會概述 YAML 語法,以特定方式轉換 SQL 翻譯,並附上簡短說明。每個範例也會提供 teradata-input.sql
或 hive-input.sql
檔案和 bq-output.sql
檔案的內容,方便您比較設定 YAML 對 BigQuery SQL 查詢轉譯的影響。
以下範例使用 Teradata 或 Hive 做為輸入 SQL 方言,並使用 BigQuery SQL 做為輸出方言。以下範例也會使用 testdb
做為預設資料庫,並使用 testschema
做為結構定義搜尋路徑。
變更物件名稱大小寫
以下 YAML 設定會變更物件名稱的大小寫:
type: object_rewriter
global:
case:
all: UPPERCASE
database: LOWERCASE
attribute: LOWERCASE
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a int); select * from x; |
bq-output.sql |
CREATE TABLE testdb.TESTSCHEMA.X ( a INT64 ) ; SELECT X.a FROM testdb.TESTSCHEMA.X ; |
將資料表設為臨時資料表
下列 YAML 設定會將一般資料表變更為臨時資料表:
type: object_rewriter
relation:
-
match: "testdb.testschema.x"
temporary: true
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a int); |
bq-output.sql |
CREATE TEMPORARY TABLE x ( a INT64 ) ; |
將資料表設為臨時
下列 YAML 設定會將一般資料表變更為 60 秒到期的暫時資料表。
type: object_rewriter
relation:
-
match: "testdb.testschema.x"
ephemeral:
expireAfterSeconds: 60
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a int); |
bq-output.sql |
CREATE TABLE testdb.testschema.x ( a INT64 ) OPTIONS( expiration_timestamp=timestamp_add(current_timestamp(), interval 60 SECOND) ); |
設定分區有效期限
下列 YAML 設定會將分割表格的到期時間變更為 1 天:
type: object_rewriter
relation:
-
match: "testdb.testschema.x"
partitionLifetime:
expireAfterSeconds: 86400
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a int, b int) partition by (a); |
bq-output.sql |
CREATE TABLE testdb.testschema.x ( a INT64, b INT64 ) CLUSTER BY a OPTIONS( partition_expiration_days=1 ); |
變更表格的外部位置或格式
以下 YAML 設定會變更資料表的外部位置和格式:
type: object_rewriter
relation:
-
match: "testdb.testschema.x"
external:
locations: "gs://path/to/department/files"
format: ORC
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a int); |
bq-output.sql |
CREATE EXTERNAL TABLE testdb.testschema.x ( a INT64 ) OPTIONS( format='ORC', uris=[ 'gs://path/to/department/files' ] ); |
設定或變更資料表說明
下列 YAML 設定會設定資料表的說明:
type: object_rewriter
relation:
-
match: "testdb.testschema.x"
description:
text: "Example description."
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a int); |
bq-output.sql |
CREATE TABLE testdb.testschema.x ( a INT64 ) OPTIONS( description='Example description.' ); |
設定或變更資料表分割
下列 YAML 設定會變更資料表的分割配置方案:
type: object_rewriter
relation:
-
match: "testdb.testschema.x"
partition:
simple:
add: [a]
-
match: "testdb.testschema.y"
partition:
simple:
remove: [a]
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a date, b int); create table y(a date, b int) partition by (a); |
bq-output.sql |
CREATE TABLE testdb.testschema.x ( a DATE, b INT64 ) PARTITION BY a; CREATE TABLE testdb.testschema.y ( a DATE, b INT64 ) ; |
設定或變更資料表叢集
下列 YAML 設定會變更資料表的叢集架構:
type: object_rewriter
relation:
-
match: "testdb.testschema.x"
clustering:
add: [a]
-
match: "testdb.testschema.y"
clustering:
remove: [b]
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
hive-input.sql |
create table x(a int, b int); create table y(a int, b int) clustered by (b) into 16 buckets; |
bq-output.sql |
CREATE TABLE testdb.testschema.x ( a INT64, b INT64 ) CLUSTER BY a; CREATE TABLE testdb.testschema.y ( a INT64, b INT64 ) ; |
變更欄屬性類型
以下 YAML 設定會變更資料欄屬性的資料類型:
type: object_rewriter
attribute:
-
match:
database: testdb
schema: testschema
attributeRegex: "a+"
type:
target: NUMERIC(10,2)
您可以將來源資料類型轉換為任何支援的目標屬性類型。
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a int, b int, aa int); |
bq-output.sql |
CREATE TABLE testdb.testschema.x ( a NUMERIC(31, 2), b INT64, aa NUMERIC(31, 2) ) ; |
新增連結至外部資料湖
以下設定的 YAML 會將來源資料表標示為外部資料表,指向由資料湖連線指定的儲存在外部資料湖中的資料。
type: object_rewriter
relation:
-
key: "testdb.acme.employee"
external:
connection_id: "connection_test"
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
hive-input.sql |
CREATE TABLE x ( a VARCHAR(150), b INT ); |
bq-output.sql |
CREATE EXTERNAL TABLE x ( a STRING, b INT64 ) WITH CONNECTION `connection_test` OPTIONS( ); |
變更輸入檔案的字元編碼
根據預設,BigQuery 遷移服務會嘗試自動偵測輸入檔案的字元編碼。如果 BigQuery Migration Service 可能誤判檔案的編碼,您可以使用 YAML 設定檔明確指定字元編碼。
以下 YAML 設定會將輸入檔案的明確字元編碼指定為 ISO-8859-1
。
type: experimental_input_formats
formats:
- source:
pathGlob: "*.sql"
contents:
raw:
charset: iso-8859-1
全域類型轉換
以下的 YAML 設定會將所有指令碼中的資料類型變更為其他類型,並指定在轉譯指令碼中要避免的來源資料類型。這與變更資料欄屬性類型設定不同,後者只會變更單一屬性的資料類型。
BigQuery 支援下列資料類型轉換:
DATETIME
至TIMESTAMP
TIMESTAMP
到DATETIME
(接受選用時區)TIMESTAMP WITH TIME ZONE
到DATETIME
(接受選用時區)CHAR
至VARCHAR
在下列範例中,設定 YAML 會將 TIMESTAMP
資料類型轉換為 DATETIME
。
type: experimental_object_rewriter
global:
typeConvert:
timestamp: DATETIME
在 Teradata 等方言中,日期時間相關函式 (例如 current_date
、current_time
或 current_timestamp
) 會根據設定的時區 (本地或工作階段) 傳回時間戳記。另一方面,BigQuery 一律會以世界標準時間傳回時間戳記。為確保兩種方言的行為一致,請務必相應地設定時區。
在下列範例中,設定 YAML 會將 TIMESTAMP
和 TIMESTAMP WITH TIME ZONE
資料類型轉換為 DATETIME
,並將目標時區設為 Europe/Paris
。
type: experimental_object_rewriter
global:
typeConvert:
timestamp:
target: DATETIME
timezone: Europe/Paris
timestamptz:
target: DATETIME
timezone: Europe/Paris
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a timestamp); select a from x where a > current_timestamp(0); |
bq-output.sql |
CREATE TABLE x ( a TIMESTAMP ) ; SELECT x.a FROM test.x WHERE x.a > datetime_trunc(current_datetime('Europe/Paris'), SECOND) ; |
選取陳述式修改
以下 YAML 設定會變更 SELECT
陳述式中的星號投影、GROUP BY
和 ORDER BY
子句。
starProjection
支援下列設定:
ALLOW
PRESERVE
(預設)EXPAND
groupBy
和 orderBy
支援下列設定:
EXPRESSION
ALIAS
INDEX
在下列範例中,設定 YAML 會將星形投影設定為 EXPAND
。
type: experimental_statement_rewriter
select:
starProjection: EXPAND
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a int, b TIMESTAMP); select * from x; |
bq-output.sql |
CREATE TABLE x ( a INT64, b DATETIME ) ; SELECT x.a x.b FROM x ; |
UDF 規格
下列 YAML 設定會指定在來源指令碼中使用的使用者定義函式 (UDF) 的簽章。與中繼資料 ZIP 檔案類似,UDF 定義可協助產生更準確的輸入指令碼翻譯內容。
type: metadata
udfs:
- "date parse_short_date(dt int)"
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(dt int); select parse_short_date(dt) + 1 from x; |
bq-output.sql |
CREATE TABLE x ( dt INT64 ) ; SELECT date_add(parse_short_date(x.dt), interval 1 DAY) FROM x ; |
設定小數點精確度的嚴格程度
根據預設,BigQuery Migration Service 會將數值精確度提高至特定比例可用的最高精確度。下列設定 YAML 會透過設定精確度嚴格度來覆寫這項行為,以保留來源陳述式的小數精確度。
type: experimental_statement_rewriter
common:
decimalPrecision: STRICT
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a decimal(3,0)); |
bq-output.sql |
CREATE TABLE x ( a NUMERIC(3) ) ; |
輸出名稱對應
您可以使用設定 YAML 對應 SQL 物件名稱。您可以根據要對應的物件,變更名稱的不同部分。
靜態名稱對應
使用靜態名稱對應功能,對應實體的名稱。如果您只想變更名稱的特定部分,並保留名稱的其他部分,請只加入需要變更的部分。
下列 YAML 設定會將資料表名稱從 my_db.my_schema.my_table
變更為 my_new_db.my_schema.my_new_table
。
type: experimental_object_rewriter
relation:
-
match: "my_db.my_schema.my_table"
outputName:
database: "my_new_db"
relation: "my_new_table"
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table my_db.my_schema.my_table(a int); |
bq-output.sql |
CREATE TABLE my_new_db.my_schema.my_new_table ( a INT64 ) |
您可以使用靜態名稱對應功能,更新公開使用者定義函式中名稱使用的區域。
以下範例會將 bqutil.fn
UDF 中的名稱從使用預設的 us
多區域變更為使用 europe_west2
區域:
type: experimental_object_rewriter
function:
-
match:
database: bqutil
schema: fn
outputName:
database: bqutil
schema: fn_europe_west2
動態名稱對應
使用動態名稱對應功能同時變更多個物件,並根據對應的物件建立新名稱。
下列設定 YAML 會將前置字串 stg_
新增至屬於 staging
結構定義的資料表,藉此變更所有資料表的名稱,然後將這些資料表移至 production
結構定義。
type: experimental_object_rewriter
relation:
-
match:
schema: staging
outputName:
schema: production
relation: "stg_${relation}"
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table staging.my_table(a int); |
bq-output.sql |
CREATE TABLE production.stg_my_table ( a INT64 ) ; |
指定預設資料庫和結構定義搜尋路徑
type: environment
session:
defaultDatabase: myproject
schemaSearchPath: [myschema1, myschema2]
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
SELECT * FROM database.table SELECT * FROM table1 |
bq-output.sql |
SELECT * FROM myproject.database.table. SELECT * FROM myproject.myschema1.table1 |
全域輸出名稱重寫
下列設定 YAML 會根據設定的規則,變更指令碼中所有物件 (資料庫、結構定義、關聯和屬性) 的輸出名稱。
type: experimental_object_rewriter
global:
outputName:
regex:
- match: '\s'
replaceWith: '_'
- match: '>='
replaceWith: 'gte'
- match: '^[^a-zA-Z_].*'
replaceWith: '_$0'
使用此設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table "test special chars >= 12"("42eid" int, "custom column" varchar(10)); |
bq-output.sql |
CREATE TABLE test_special_chars_employees_gte_12 ( _42eid INT64, custom_column STRING ) ; |
最佳化及改善已翻譯的 SQL 效能
您可以將選用的轉換套用至已翻譯的 SQL,藉此做出可改善查詢效能或成本的變更。這些最佳化調整會嚴格依據個案而定,因此應根據未修改的 SQL 輸出結果進行評估,以評估這些最佳化調整對效能實際產生的影響。
下列 YAML 設定可啟用選用轉換作業。設定可接受最佳化項目清單,如果是接受參數的最佳化項目,則可接受含有選用參數值的部分。
type: optimizer
transformations:
- name: PRECOMPUTE_INDEPENDENT_SUBSELECTS
- name: REWRITE_CTE_TO_TEMP_TABLE
parameters:
threshold: 1
最佳化 | 選用參數 | 說明 |
---|---|---|
PRECOMPUTE_INDEPENDENT_SUBSELECTS |
scope: [PREDICATE, PROJECTION]
|
透過新增 DECLARE 陳述式來重寫查詢,以便將預先計算的變數取代 PREDICATE 子句或 PROJECTION 中的表達式。系統會將其視為靜態判定式,以便減少讀取的資料量。如果省略範圍,預設值為 PREDICATE (即 WHERE 和 JOIN-ON 子句)。將標量子查詢擷取至 DECLARE 陳述式,可讓原始述詞保持靜態,因此可進行更佳的執行規劃。這項最佳化功能會引入新的 SQL 陳述式。 |
REWRITE_CTE_TO_TEMP_TABLE |
threshold: N
|
當有超過 N 個參照相同一般資料表運算式的情況時,會將一般資料表運算式 (CTE) 重寫為臨時資料表。這可降低查詢複雜度,並強制執行單一常用表格運算式。如果省略 N ,預設值為 4。如果多次參照非簡單的 CTE,建議您採用這項最佳化方式。引入臨時表的額外負擔,可能會比最終執行多次低複雜度或低卡氏度的 CTE 還要大。這項最佳化功能會引入新的 SQL 陳述式。 |
REWRITE_ZERO_SCALE_NUMERIC_AS_INTEGER |
bigint: N
|
如果精確度在 N 之內,則會將零比例 NUMERIC/BIGNUMERIC 屬性重寫為 INT64 類型。如果省略 N ,預設值則為 18 。建議您在從沒有整數類型的來源方言進行翻譯時,使用這項最佳化功能。如要變更資料欄類型,您必須檢查所有下游用途,以便確認類型相容性和語意變更。例如,小數分數變成整數分數、程式碼預期的值為數值 |
DROP_TEMP_TABLE |
針對指令碼中建立的所有暫時性資料表 (且未在指令碼結束時捨棄),新增 DROP TABLE 陳述式。這麼做可將臨時資料表的儲存空間計費週期從 24 小時縮短為指令碼執行時間。這項最佳化功能會引入新的 SQL 陳述式。如果在指令碼執行結束後,系統不會再存取臨時表格進行後續處理,建議您使用這項最佳化功能。這項最佳化功能會引入新的 SQL 陳述式。 |
|
REGEXP_CONTAINS_TO_LIKE |
將部分 REGEXP_CONTAINS 比對模式的類別重寫為 LIKE 運算式。如果沒有其他程序 (例如巨集取代) 需要在輸出 SQL 中保留不變的規則運算式字面常值,建議您使用這項最佳化功能。 |
|
ADD_DISTINCT_TO_SUBQUERY_IN_SET_COMPARISON |
將 DISTINCT 子句新增至用於 [NOT] IN 運算子的值集的子查詢。如果子查詢結果的卡氏数 (不同值的數量) 遠低於值的數量,建議您採用這項最佳化方式。如果不符合這個前置條件,這個轉換可能會對效能造成負面影響。 |
建立以 Gemini 為基礎的設定 YAML 檔案
如要產生 AI 輸出內容,包含 SQL 翻譯輸入內容的來源目錄必須包含設定 YAML 檔案。
需求條件
AI 輸出的設定 YAML 檔案必須有 .ai_config.yaml
後置字串。例如:rules_1.ai_config.yaml
。
支援的欄位
您可以使用下列欄位設定 AI 翻譯輸出內容:
suggestion_type
(選用):指定要產生的 AI 建議類型。系統支援下列建議類型:QUERY_CUSTOMIZATION
(預設):根據設定 YAML 檔案中指定的轉譯規則,為 SQL 程式碼產生 AI 建議。TRANSLATION_EXPLANATION
:產生文字,其中包含已翻譯的 GoogleSQL 查詢摘要,以及原始 SQL 查詢與已翻譯的 GoogleSQL 查詢之間的差異和不一致之處。
rewrite_target
(選用):如要將轉譯規則套用至輸入 SQL,請指定SOURCE_SQL
;如要將轉譯規則套用至輸出 SQL,請指定TARGET_SQL
(預設值)。instruction
(選用):以自然語言說明對目標 SQL 的變更。以 Gemini 強化的 SQL 轉譯功能會評估要求,並做出指定變更。examples
(選用):提供 SQL 範例,說明您希望如何修改 SQL 模式。
您可以視需要新增其他 translation_rules
和 examples
。
範例
以下範例會建立以 Gemini 為基礎的 YAML 設定檔,您可以搭配 SQL 翻譯使用。
在預設翻譯輸出查詢中移除 upper 函式
translation_rules:
- instruction: "Remove upper() function"
examples:
- input: "upper(X)"
output: "X"
建立多個翻譯規則,自訂翻譯輸出內容
translation_rules:
- instruction: "Remove upper() function"
suggestion_type: QUERY_CUSTOMIZATION
rewrite_target: TARGET_SQL
examples:
- input: "upper(X)"
output: "X"
- instruction: "Insert a comment at the head that explains each statement in detail.
suggestion_type: QUERY_CUSTOMIZATION
rewrite_target: TARGET_SQL
從翻譯輸入查詢中移除 SQL 註解
translation_rules:
- instruction: "Remove all the sql comments in the input sql query."
suggestion_type: QUERY_CUSTOMIZATION
rewrite_target: SOURCE_SQL
使用預設 LLM 提示產生翻譯說明
以下範例使用翻譯服務提供的預設 LLM 提示,產生文字說明:
translation_rules:
- suggestion_type: "TRANSLATION_EXPLANATION"
使用您自己的自然語言提示產生翻譯說明
translation_rules:
- suggestion_type: "TRANSLATION_EXPLANATION"
instruction: "Explain the syntax differences between the source Teradata query and the translated GoogleSQL query."
單一設定檔 YAML 檔案中的多種建議類型
translation_rules:
- suggestion_type: "TRANSLATION_EXPLANATION"
instruction: "Explain the syntax differences between the source Teradata query and the translated GoogleSQL query."
- instruction: "Remove upper() function"
suggestion_type: QUERY_CUSTOMIZATION
rewrite_target: TARGET_SQL
examples:
- input: "upper(X)"
output: "X"
- instruction: "Remove all the sql comments in the input sql query."
suggestion_type: QUERY_CUSTOMIZATION
rewrite_target: SOURCE_SQL
套用多個 YAML 設定
在批次或互動式 SQL 翻譯中指定設定 YAML 檔案時,您可以在單一翻譯工作中選取多個設定 YAML 檔案,以反映多個轉換。如果多個設定發生衝突,某個轉換作業可能會覆寫其他轉換作業。建議您在每個檔案中使用不同類型的設定,以免在同一個翻譯工作中發生轉換衝突。
下列範例列出為單一 SQL 翻譯工作提供的兩個個別設定 YAML 檔案,其中一個用於變更資料欄屬性,另一個則用於將資料表設為暫時性:
change-type-example.config.yaml
:
type: object_rewriter
attribute:
-
match: "testdb.testschema.x.a"
type:
target: NUMERIC(10,2)
make-temp-example.config.yaml
:
type: object_rewriter
relation:
-
match: "testdb.testschema.x"
temporary: true
使用這兩個設定 YAML 檔案的 SQL 翻譯可能會如下所示:
teradata-input.sql |
create table x(a int); |
bq-output.sql |
CREATE TEMPORARY TABLE x ( a NUMERIC(31, 2) ) ; |