使用交互式 SQL 转换器来转换查询

本文档介绍如何使用 BigQuery 交互式 SQL 转换器将查询从其他 SQL 方言转换为 GoogleSQL 查询。当您将工作负载迁移到 BigQuery 时,交互式 SQL 转换器可以帮助减少时间和工作量。本文档适用于熟悉 Google Cloud 控制台的用户。

如果您的所在位置受支持,您可以使用转换规则功能自定义交互式 SQL 转换器转换 SQL 的方式。

准备工作

如果您的 Google Cloud CLI 项目是在 2022 年 2 月 15 日之前创建的,请按如下方式启用 BigQuery Migration API:

  1. 在 Google Cloud 控制台中,前往 BigQuery Migration API 页面。

    前往 BigQuery Migration API

  2. 点击启用

权限和角色

本部分介绍使用交互式 SQL 转换器所需的 Identity and Access Management (IAM) 权限,包括授予这些权限的预定义 IAM 角色。本部分还介绍了设置其他转换配置所需的权限。

使用交互式 SQL 转换器所需的权限

如需获得使用交互式转换器所需的权限,请让您的管理员为您授予 parent 资源的 MigrationWorkflow Editor (roles/bigquerymigration.editor) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色可提供使用交互式转换器所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需使用交互式转换器,需要以下权限:

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

您也可以使用自定义角色或其他预定义角色来获取这些权限。

设置其他转换配置的权限

您可以使用转换设置中的转换配置 ID转换配置来源位置字段来设置其他转换配置。如需设置这些转换配置,您需要以下权限:

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

以下预定义的 IAM 角色提供了设置其他转换配置所需的权限:

  • roles/bigquerymigration.viewer

如需详细了解 BigQuery IAM,请参阅使用 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 并行传输 (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

位置

交互式 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 叶形图标 二氧化碳排放量低
柏林 europe-west10 叶形图标 二氧化碳排放量低
欧盟多区域 eu
芬兰 europe-north1 叶形图标 二氧化碳排放量低
法兰克福 europe-west3 叶形图标 二氧化碳排放量低
伦敦 europe-west2 叶形图标 二氧化碳排放量低
马德里 europe-southwest1 叶形图标 二氧化碳排放量低
米兰 europe-west8
荷兰 europe-west4 叶形图标 二氧化碳排放量低
巴黎 europe-west9 叶形图标 二氧化碳排放量低
斯德哥尔摩 europe-north2 叶形图标 二氧化碳排放量低
都灵 europe-west12
华沙 europe-central2
苏黎世 europe-west6 叶形图标 二氧化碳排放量低
美洲
俄亥俄州,哥伦布 us-east5
达拉斯 us-south1 叶形图标 二氧化碳排放量低
艾奥瓦 us-central1 叶形图标 二氧化碳排放量低
拉斯维加斯 us-west4
洛杉矶 us-west2
墨西哥 northamerica-south1
北弗吉尼亚 us-east4
俄勒冈 us-west1 叶形图标 二氧化碳排放量低
魁北克 northamerica-northeast1 叶形图标 二氧化碳排放量低
圣保罗 southamerica-east1 叶形图标 二氧化碳排放量低
盐湖城 us-west3
圣地亚哥 southamerica-west1 叶形图标 二氧化碳排放量低
南卡罗来纳 us-east1
多伦多 northamerica-northeast2 叶形图标 二氧化碳排放量低
美国多区域 us
非洲
约翰内斯堡 africa-south1
中东
Dammam 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. 可选。在处理位置部分,选择要运行转换作业的位置。例如,如果您在欧洲,并且不希望您的数据跨越任何位置边界,那么请选择 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 查询,然后点击协助 > 自定义。(预览版

自定义转换输入

同样,如需为输出 SQL 创建 Gemini 增强型 SQL 转换规则,请运行交互式转换,然后点击协助 > 自定义此转换

自定义转换输出

自定义菜单出现时,继续执行以下步骤。

  1. 您可以使用以下任一提示或两者兼用来创建转换规则:

    • 查找和替换模式提示中,在替换字段中指定要替换的 SQL 模式,并在字段中指定替换它的 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 文件夹。如果转换配置源位置尚未设置,则会显示文件夹浏览器,您可以进行选择。配置 YAML 文件受到配置文件大小限制的约束。

  5. 如需将建议的更改应用于 SQL 查询,请点击应用

YAML

如需创建 Gemini 增强型 SQL 转换规则,您可以创建基于 Gemini 的配置 YAML 文件并将其上传到 Cloud Storage。如需了解详情,请参阅创建基于 Gemini 的配置 YAML 文件

创建 Gemini 增强型 SQL 转换规则并将其上传到 Cloud Storage 后,您可以通过执行以下操作来应用该规则:

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,点击更多 > 转换设置

  3. 转换配置源位置字段中,指定存储在 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 转换解释,请点击协助,然后点击解释此转换

    “解释转换”按钮。

使用批量转换配置 ID 进行转换

您可以通过提供批量转换配置 ID,以与批量转换作业相同的转换配置运行交互式查询。

  1. 在查询编辑器中,点击更多 > 转换设置
  2. 转换配置 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 转换器无需付费。但是,用于存储输入和输出文件的存储空间会产生正常费用。如需了解详情,请参阅存储价格

后续步骤

详细了解迁移数据仓库的以下步骤: