远程函数和 Translation API 教程
本教程介绍如何创建 BigQuery 远程函数,调用 Cloud Translation API,以及如何使用 SQL 和 Python 将任何语言的内容翻译成西班牙语。
此函数的使用场景包括以下各项:
- 将网站上的用户评论翻译成当地语言
- 将来自众多语言的支持请求翻译成支持案例工作器的一种通用语言
目标
- 为您的账号分配必要的角色。
- 创建 Cloud Functions 函数。
- 创建 BigQuery 数据集。
- 创建 BigQuery 连接和服务账号。
- 向 BigQuery 服务账号授予权限。
- 创建 BigQuery 远程函数。
- 调用 BigQuery 远程函数。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
准备工作
我们建议您为本教程创建一个 Google Cloud 项目。此外,请确保您拥有完成本教程所需的角色。
设置 Google Cloud 项目
如需为本教程设置 Google Cloud 项目,请完成以下步骤:
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery、BigQuery Connection、Cloud Translation、Cloud Functions、Cloud Build、Cloud Logging、Cloud Pub/Sub、Artifact Registry 和 Cloud Run Admin APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery、BigQuery Connection、Cloud Translation、Cloud Functions、Cloud Build、Cloud Logging、Cloud Pub/Sub、Artifact Registry 和 Cloud Run Admin APIs.
账号所需的角色
如需获得执行本教程中任务所需的权限,请让管理员向您授予项目的以下 IAM 角色:
-
BigQuery Data Owner (
roles/bigquery.dataOwner
) -
BigQuery Connection Admin (
roles/bigquery.connectionAdmin
) -
Cloud Functions Developer (
roles/cloudfunctions.developer
)
如需详细了解如何授予角色,请参阅管理访问权限。
这些预定义角色包含执行本教程中的任务所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需执行本教程中的任务,您需要拥有以下权限:
-
bigquery.datasets.create
-
bigquery.connections.create
-
bigquery.connections.get
-
cloudfunctions.functions.create
Compute Engine 默认服务账号所需的角色
启用 Cloud Functions 的 API 后,系统创建了一个 Compute Engine 默认服务账号。如需完成本教程,您必须为此默认服务账号提供 Cloud Translation API User 角色。
复制您的 Compute Engine 默认服务账号。您的默认服务账号如下所示:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
将
PROJECT_NUMBER
替换为您的项目 ID。在 Google Cloud 控制台中,转到 IAM 页面。
选择您的项目。
点击
授予访问权限,然后在新主账号字段中粘贴您之前复制的 Compute Engine 默认服务账号。在分配角色列表中,搜索并选择 Cloud Translation API User。
点击保存。
创建 Cloud Functions 函数
使用 Cloud Functions 创建一个将输入文本翻译为西班牙语的函数。
使用以下规范创建 Cloud Functions 函数:
- 对于环境,选择第 2 代。
- 对于函数名称,请输入
translation-handler
。 - 在区域部分,选择 us-central1。
对于实例数上限,请输入
10
。此设置位于运行时、构建、连接和安全设置部分。
在本教程中,我们使用低于默认值的值来控制发送到 Translation 的请求速率。
对于运行时,请选择 Python 3.10。
对于入口点,请输入
handle_translation
。
在文件列表中,选择 main.py,然后粘贴以下代码。
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
使用
us-central1
更新<your location>
。在文件列表中,选择 requirements.txt,然后粘贴以下文本:
点击部署,然后等待函数部署。
点击触发器标签页。
复制触发器网址值并保存,以备日后使用。您必须在创建 BigQuery 远程函数时使用此网址。
创建 BigQuery 数据集
创建 BigQuery 数据集,其中包含远程函数。创建数据集时,请添加以下规范:
- 在数据集 ID 部分,输入
remote_function_test
。 - 对于位置类型,请选择多区域。
- 对于多区域,请选择美国(美国的多个区域)。
创建 BigQuery 连接和服务账号
创建 BigQuery 连接,以便在 Cloud Functions 和 Cloud Run 中使用任何支持的语言实现远程函数。创建连接时,系统会为该连接创建一个服务账号。
使用以下规范创建 Google Cloud 资源连接:
- 对于连接类型,请选择 BigLake 和远程函数(Cloud 资源)
- 对于连接 ID,请输入
remote-function-connection
。 - 对于位置类型,请选择多区域。
- 对于多区域,请选择美国(美国的多个区域)。
打开外部连接列表,然后选择
us.remote-function-connection
。复制服务账号 ID 并保存,以备日后使用。您必须在下一步向此 ID 授予权限。
向 BigQuery 服务账号授予权限
您在上一步创建的服务账号需要使用 Cloud Run 的权限,以便 BigQuery 远程函数可以使用 Cloud Functions 函数。如需向服务账号授予权限,请完成以下步骤:
转到 Cloud Run 页面
选择您的项目。
选中
translation-handler
旁边的复选框。在权限面板中,点击添加主账号。
在新的主账号字段中,输入您之前复制的服务账号 ID。
在分配角色列表中,搜索并选择 Cloud Run Invoker。
点击保存。
创建 BigQuery 远程函数
如需使用 Cloud Functions 函数通过 BigQuery 远程函数将文本翻译成西班牙语,请完成以下步骤。
在 Google Cloud 控制台中,转到 BigQuery 页面。
在查询编辑器中输入以下查询:
CREATE OR REPLACE FUNCTION `remote_function_test.translate_text`(x STRING) RETURNS STRING REMOTE WITH CONNECTION `us.remote-function-connection` OPTIONS ( endpoint = 'TRIGGER_URL', max_batching_rows = 10);
将
TRIGGER_URL
替换为您之前在创建 Cloud Functions 函数时保存的触发器网址。点击运行。系统会显示类似以下内容的消息:
This statement created a new function named your_project.remote_function_test.translate_text.
调用 BigQuery 远程函数
创建远程函数后,请进行测试以确保它与 Cloud Functions 函数关联并生成西班牙语的预期结果。
在 BigQuery 查询编辑器中,输入以下查询,然后点击运行。
SELECT remote_function_test.translate_text('This new feature is fantastic!') AS translated_text;
这些结果如下所示:
+-------------------------------------------+ | translated_text | +-------------------------------------------+ | ¡Esta nueva característica es fantástica! | +-------------------------------------------+
可选:如需测试公共数据集上的远程函数,请输入以下查询,然后点击运行。如需限制返回的结果,请使用
LIMIT
子句。SELECT text, remote_function_test.translate_text(text) AS translated_text FROM (SELECT text FROM `bigquery-public-data.hacker_news.full` LIMIT 3);
这些结果如下所示:
+---------------------------------------------------------------------------+ | text | translated_text | +---------------------------------------------------------------------------+ | These benchmarks look good. | Estos puntos de referencia se ven bien. | | Who is using Java? | ¿Quién está usando Java? | | You need more database storage. | Necesitas más almacenamiento. | +---------------------------------------------------------------------------+
删除资源
如果您不打算在此项目中使用这些函数,通过删除项目可以避免产生额外的费用。这将永久删除与项目关联的所有资源。
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
后续步骤
- 了解如何在 BigQuery 中使用远程函数。
- 了解 Translation。
- 了解 Cloud Functions。
- 了解 Cloud Run。