Remote functions and Translation API tutorial
This tutorial describes how to create a BigQuery remote function, invoke the Cloud Translation API, and perform content translation from any language to Spanish using SQL and Python.
Use cases for this function include the following:
- Translate user comments on a website into a local language
- Translate support requests from many languages into one common language for support case workers
Objectives
- Assign necessary roles to your account.
- Create a Cloud Run functions function.
- Create a BigQuery dataset.
- Create a BigQuery connection and service account.
- Grant permissions to the BigQuery service account.
- Create a BigQuery remote function.
- Call the BigQuery remote function.
Costs
In this document, you use the following billable components of Google Cloud:
To generate a cost estimate based on your projected usage,
use the pricing calculator.
Before you begin
We recommend that you create a Google Cloud project for this tutorial. Also, make sure that you have the required roles to complete this tutorial.
Set up a Google Cloud project
To set up a Google Cloud project for this tutorial, complete these steps:
- 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 Run functions, Cloud Build, Cloud Logging, Cloud Pub/Sub, Artifact Registry, and 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 Run functions, Cloud Build, Cloud Logging, Cloud Pub/Sub, Artifact Registry, and Cloud Run Admin APIs.
Required roles for your account
To get the permissions that you need to perform the tasks in this tutorial, ask your administrator to grant you the following IAM roles on your project:
-
BigQuery Data Owner (
roles/bigquery.dataOwner
) -
BigQuery Connection Admin (
roles/bigquery.connectionAdmin
) -
Cloud Functions Developer (
roles/cloudfunctions.developer
)
For more information about granting roles, see Manage access to projects, folders, and organizations.
These predefined roles contain the permissions required to perform the tasks in this tutorial. To see the exact permissions that are required, expand the Required permissions section:
Required permissions
The following permissions are required to perform the tasks in this tutorial:
-
bigquery.datasets.create
-
bigquery.connections.create
-
bigquery.connections.get
-
cloudfunctions.functions.create
You might also be able to get these permissions with custom roles or other predefined roles.
Required roles for the Compute Engine default service account
When you enabled the API for Cloud Run functions, a Compute Engine default service account was created. To complete this tutorial, you must give this default service account the Cloud Translation API User role.
Copy your Compute Engine default service account. Your default service account looks like this:
PROJECT_NUMBER[email protected]
Replace
PROJECT_NUMBER
with your project ID.In the Google Cloud console, go to the IAM page.
Select your project.
Click
Grant access, and then in the New principals field, paste the Compute Engine default service account that you copied earlier.In the Assign roles list, search for and select Cloud Translation API User.
Click Save.
Create a Cloud Run functions function
Using Cloud Run functions, create a function that translates input text into Spanish.
Create a Cloud Run functions function with the following specifications:
- For Environment, select 2nd gen.
- For Function name, enter
translation-handler
. - For Region, select us-central1.
For Maximum number of instances, enter
10
.This setting is in the Runtime, build, connections and security settings section.
In this tutorial, we use a lower value than the default to control the request rate sent to Translation.
For Runtime, select Python 3.10.
For Entry point, enter
handle_translation
.
In the file list, select main.py, and then paste the following code.
Before trying this sample, follow the Python setup instructions in the BigQuery quickstart using client libraries. For more information, see the BigQuery Python API reference documentation.
To authenticate to BigQuery, set up Application Default Credentials. For more information, see Set up authentication for client libraries.
Update
<your location>
withus-central1
.In the file list, select requirements.txt, and then paste the following text:
Click Deploy and wait for the function to deploy.
Click the Trigger tab.
Copy the Trigger URL value and save it for later. You must use this URL when you create a BigQuery remote function.
Create a BigQuery dataset
Create a BigQuery dataset that will contain the remote function. When you create the dataset, include these specifications:
- For Dataset ID, enter
remote_function_test
. - For Location type, select Multi-region.
- For Multi-region, select US (multiple regions in United States).
Create a BigQuery connection and service account
Create a BigQuery connection so that you can implement a remote function with any supported languages in Cloud Run functions and Cloud Run. When you create a connection, a service account is created for that connection.
Create a Google Cloud resource connection with the following specifications:
- For Connection type, select BigLake and remote functions (Cloud Resource)
- For Connection ID, enter
remote-function-connection
. - For Location type, select Multi-region.
- For Multi-region, select US (multiple regions in United States).
Open the External connections list and select
us.remote-function-connection
.Copy the service account ID and save it for later. You must grant permissions to this ID in the next step.
Grant permissions to the BigQuery service account
The service account that you created in the previous step needs permission to use Cloud Run so that the BigQuery remote function can use the Cloud Run functions function. To grant permissions to the service account, complete the following steps:
Go to the Cloud Run page.
Select your project.
Select the checkbox next to
translation-handler
.In the Permissions panel, click Add principal.
In the New principals field, enter the service account ID that you copied earlier.
In the Assign roles list, search for and select Cloud Run Invoker.
Click Save.
Create a BigQuery remote function
To use the Cloud Run functions function that translates text into Spanish with a BigQuery remote function, complete the following steps.
In the Google Cloud console, go to the BigQuery page.
In the query editor, enter the following query:
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);
Replace
TRIGGER_URL
with the trigger URL that you saved earlier when you created a Cloud Run functions function.Click Run. A message similar to the following is displayed:
This statement created a new function named your_project.remote_function_test.translate_text.
Call the BigQuery remote function
After you create your remote function, test it to make sure that it is linked to the Cloud Run functions function and produces the expected results in Spanish.
In the BigQuery query editor, enter the following query, and then click Run.
SELECT remote_function_test.translate_text('This new feature is fantastic!') AS translated_text;
The results are similar to the following:
+-------------------------------------------+ | translated_text | +-------------------------------------------+ | ¡Esta nueva característica es fantástica! | +-------------------------------------------+
Optional: To test the remote function on a public dataset, enter the following query, and then click Run. To limit the results returned, use the
LIMIT
clause.SELECT text, remote_function_test.translate_text(text) AS translated_text FROM (SELECT text FROM `bigquery-public-data.hacker_news.full` LIMIT 3);
The results are similar to the following:
+---------------------------------------------------------------------------+ | 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. | +---------------------------------------------------------------------------+
Delete the resources
If you don't plan to use these functions in this project, you can avoid additional costs by deleting your project. This permanently deletes all resources associated with the project.
- 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.
What's next
- Learn how to use remote functions in BigQuery.
- Learn about Translation.
- Learn about Cloud Run functions.
- Learn about Cloud Run.