Generate text by using a Gemma open model and the ML.GENERATE_TEXT function
This tutorial shows you how to create a remote model
that's based on the Gemma model
,
and then how to use that model with the ML.GENERATE_TEXT
function
to extract keywords and perform sentiment analysis on movie reviews from
the bigquery-public-data.imdb.reviews
public table.
Required permissions
To run this tutorial, you need the following Identity and Access Management (IAM) roles:
- Create and use BigQuery datasets, connections, and models:
BigQuery Admin (
roles/bigquery.admin). - Grant permissions to the connection's service account: Project IAM Admin
(
roles/resourcemanager.projectIamAdmin). - Deploy and undeploy models in Vertex AI: Vertex AI Administrator
(
roles/aiplatform.admin).
These predefined roles contain the permissions required to perform the tasks in this document. To see the exact permissions that are required, expand the Required permissionssection:
Required permissions
- Create a dataset:
bigquery.datasets.create - Create, delegate, and use a connection:
bigquery.connections.* - Set the default connection:
bigquery.config.* - Set service account permissions:
resourcemanager.projects.getIamPolicyandresourcemanager.projects.setIamPolicy - Deploy and undeploy a Vertex AI model:
-
aiplatform.endpoints.deploy -
aiplatform.endpoints.undeploy
-
- Create a model and run inference:
-
bigquery.jobs.create -
bigquery.models.create -
bigquery.models.getData -
bigquery.models.updateData -
bigquery.models.updateMetadata
-
You might also be able to get these permissions with custom roles or other predefined roles .
Costs
In this document, you use the following billable components of Google Cloud:
- BigQuery ML : You incur costs for the data that you process in BigQuery.
- Vertex AI : You incur costs for calls to the Vertex AI model that's represented by the remote model.
To generate a cost estimate based on your projected usage, use the pricing calculator .
For more information about BigQuery pricing, see BigQuery pricing in the BigQuery documentation.
Open models that you deploy to Vertex AI are charged per machine-hour. This means billing starts as soon as the endpoint is fully set up, and continues until you un-deploy it. For more information about Vertex AI pricing, see the Vertex AI pricing page.
Before you begin
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project : Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- Create a project
: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles .
-
Verify that billing is enabled for your Google Cloud project .
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles .
Create a dataset
Create a BigQuery dataset to store your ML model.
Console
-
In the Google Cloud console, go to the BigQuerypage.
-
In the Explorerpane, click your project name.
-
Click View actions > Create dataset
-
On the Create datasetpage, do the following:
-
For Dataset ID, enter
bqml_tutorial. -
For Location type, select Multi-region, and then select US (multiple regions in United States).
-
Leave the remaining default settings as they are, and click Create dataset.
-
bq
To create a new dataset, use the bq mk
command
with the --location
flag. For a full list of possible parameters, see the bq mk --dataset
command
reference.
-
Create a dataset named
bqml_tutorialwith the data location set toUSand a description ofBigQuery ML tutorial dataset:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Instead of using the
--datasetflag, the command uses the-dshortcut. If you omit-dand--dataset, the command defaults to creating a dataset. -
Confirm that the dataset was created:
bq ls
API
Call the datasets.insert
method with a defined dataset resource
.
{ "datasetReference" : { "datasetId" : "bqml_tutorial" } }
BigQuery DataFrames
Before trying this sample, follow the BigQuery DataFrames setup instructions in the BigQuery quickstart using BigQuery DataFrames . For more information, see the BigQuery DataFrames reference documentation .
To authenticate to BigQuery, set up Application Default Credentials. For more information, see Set up ADC for a local development environment .
Create the remote model
Create a remote model that represents a hosted Vertex AI model:
-
In the Google Cloud console, go to the BigQuerypage.
-
In the query editor, run the following statement:
CREATE OR REPLACE MODEL ` bqml_tutorial . gemma_model ` REMOTE WITH CONNECTION DEFAULT OPTIONS ( MODEL_GARDEN_MODEL_NAME = 'publishers/google/models/gemma3@gemma-3-270m-it' , MACHINE_TYPE = 'g2-standard-12' );
The query takes up to 20 minutes to complete, after which the gemma_model
model appears in the bqml_tutorial
dataset in the Explorerpane. Because
the query uses a CREATE MODEL
statement to create a model, there are no query
results.
Perform keyword extraction
Perform keyword extraction on IMDB
movie reviews by
using the remote model and the ML.GENERATE_TEXT
function:
-
In the Google Cloud console, go to the BigQuerypage.
-
In the query editor, enter the following statement to perform keyword extraction on 10 movie reviews:
-- This function takes your instruction and wraps it with chat template for -- better output quality. -- This is usually the recommended way when using Gemma instruction-tuned models. CREATE TEMP FUNCTION FormatPromptWithChatTemplate ( user_instruction STRING ) AS ( CONCAT ( '<start_of_turn>user\n' , user_instruction , '<end_of_turn>\n<start_of_turn>model\n' ) ); SELECT * FROM ML . GENERATE_TEXT ( MODEL ` bqml_tutorial . gemma_model ` , ( SELECT FormatPromptWithChatTemplate ( 'Extract the key words from the movie review below: ' || review ) AS prompt , * FROM ` bigquery - public - data . imdb . reviews ` LIMIT 10 ), STRUCT ( 0 . 2 AS temperature , 100 AS max_output_tokens , TRUE AS flatten_json_output ));
For more information about using chat templates with Gemma, see Gemma formatting and system instructions .
The output is similar to the following, with non-generated columns omitted for clarity:
+----------------------------------------------+-------------------------+-----------------------------+-----+ | ml_generate_text_llm_result | ml_generate_text_status | prompt | ... | +----------------------------------------------+-------------------------------------------------------+-----+ | Here are some key words from the | | <start_of_turn>user | | | movie review: * * *Romance:** | | Extract the key words from | | | "romantic tryst," "elope" * * *Comedy:** | | the movie review below: | | | "Contrived Comedy" * * *Burglary:** | | Linda Arvidson (as Jennie) | | | "burglar," "rob," "booty" * * *Chase:** | | and Harry Solter (as Frank) | | | "chases," "escape" * * *Director:** "D.W. | | are enjoying a romantic | | | Griffith" * * *Actors:** "Linda Arvidson,"... | | tryst, when in walks her... | | +----------------------------------------------+-------------------------+-----------------------------+-----+ | Here are some key words from the | | <start_of_turn>user | | | movie review: * * *Elderbush Gilch:** The | | Extract the key words from | | | name of the movie being reviewed. * | | the movie review below: | | | * *Disappointment:** The reviewer's | | This is the second addition | | | overall feeling about the film. * | | to Frank Baum's personally | | | * *Dim-witted:** Describes the story | | produced trilogy of Oz | | | line negatively. * * *Moronic, sadistic,... | | films. It's essentially ... | | +----------------------------------------------+-------------------------+-----------------------------+-----+The results include the following columns:
-
ml_generate_text_llm_result: the generated text. -
ml_generate_text_status: the API response status for the corresponding row. If the operation was successful, this value is empty. -
prompt: the prompt that is used for the sentiment analysis. - All of the columns from the
bigquery-public-data.imdb.reviewstable.
-
Perform sentiment analysis
Perform sentiment analysis on IMDB
movie reviews by
using the remote model and the ML.GENERATE_TEXT
function:
-
In the Google Cloud console, go to the BigQuerypage.
-
In the query editor, run the following statement to perform sentiment analysis on 10 movie reviews:
-- This function takes your instruction and wraps it with chat template for -- better output quality. -- This is usually the recommended way when using Gemma instruction-tuned models. CREATE TEMP FUNCTION FormatPromptWithChatTemplate ( user_instruction STRING ) AS ( CONCAT ( '<start_of_turn>user\n' , user_instruction , '<end_of_turn>\n<start_of_turn>model\n' ) ); SELECT * FROM ML . GENERATE_TEXT ( MODEL ` bqml_tutorial . gemma_model ` , ( SELECT FormatPromptWithChatTemplate ( 'Analyze the sentiment of the following movie review and classify it as either POSITIVE or NEGATIVE. \nMovie Review: ' || review ) AS prompt , * FROM ` bigquery - public - data . imdb . reviews ` LIMIT 10 ), STRUCT ( 0 . 2 AS temperature , 128 AS max_output_tokens , TRUE AS flatten_json_output ));
For more information about using chat templates with Gemma, see Gemma formatting and system instructions .
The output is similar to the following, with non-generated columns omitted for clarity:
+-----------------------------+-------------------------+-----------------------------+-----+ | ml_generate_text_llm_result | ml_generate_text_status | prompt | ... | +-----------------------------+-------------------------------------------------------+-----+ | **NEGATIVE** | | <start_of_turn>user | | | | | Analyze the sentiment of | | | | | movie review and classify | | | | | it as either POSITIVE or | | | | | NEGATIVE. Movie Review: | | | | | Although Charlie Chaplin | | | | | made some great short | | | | | comedies in the late... | | +-----------------------------+-------------------------+-----------------------------+-----+ | **NEGATIVE** | | <start_of_turn>user | | | | | Analyze the sentiment of | | | | | movie review and classify | | | | | it as either POSITIVE or | | | | | NEGATIVE. Movie Review: | | | | | Opulent sets and sumptuous | | | | | costumes well photographed | | | | | by Theodor Sparkuhl, and... | | +-----------------------------+-------------------------+-----------------------------+-----+The results include the same columns documented for Perform keyword extraction .
Undeploy model
If you choose not to delete your project as recommended
, you must
undeploy the Gemma model in Vertex AI to avoid
continued billing for it. BigQuery automatically undeploys the
model after a specified period of idleness (6.5 hours by default).
Alternatively, you can immediately undeploy the model by using the ALTER MODEL
statement
,
as shown in the following example:
ALTER MODEL ` bqml_tutorial . gemma_model ` SET OPTIONS ( deploy_model = false );
For more information, see Automatic or immediate open model undeployment .
Clean up
- 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.

