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
      ( 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' , 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 five movie reviews: SELECT * FROM ML . GENERATE_TEXT ( MODEL ` bqml_tutorial . gemma_model ` , ( SELECT CONCAT ( '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 )); The output is similar to the following, with non-generated columns omitted for clarity: +----------------------------------------------+-------------------------+-----------------------------+-----+ | generated_text | ml_generate_text_status | prompt | ... | +----------------------------------------------+-------------------------------------------------------+-----+ | Here are some key words from the | | Extract the key words from | | | movie review: * **Romance:** | | the movie review below: | | | "romantic tryst," "elope" * **Comedy:** | | Linda Arvidson (as Jennie) | | | "Contrived Comedy" * **Burglary:** | | and Harry Solter (as Frank) | | | "burglar," "rob," "booty" * **Chase:** | | are enjoying a romantic | | | "chases," "escape" * **Director:** "D.W. | | tryst, when in walks her | | | Griffith" * **Actors:** "Linda Arvidson,"... | | father Charles Inslee;... | | +----------------------------------------------+-------------------------+-----------------------------+-----+ | Here are some key words from the | | Extract the key words from | | | movie review: * **Elderbush Gilch:** The | | the movie review below: | | | name of the movie being reviewed. * | | This is the second addition | | | **Disappointment:** The reviewer's | | to Frank Baum's personally | | | overall feeling about the film. * | | produced trilogy of Oz | | | **Dim-witted:** Describes the story | | films. It's essentially the | | | line negatively. * **Moronic, sadistic,... | | same childishness as the... | | +----------------------------------------------+-------------------------+-----------------------------+-----+ The results include the following columns: -  generated_text: 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 five movie reviews: SELECT * FROM ML . GENERATE_TEXT ( MODEL ` bqml_tutorial . gemma_model ` , ( SELECT CONCAT ( '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 )); The output is similar to the following, with non-generated columns omitted for clarity: +----------------------------------------------+-------------------------+-----------------------------+-----+ | generated_text | ml_generate_text_status | prompt | ... | +----------------------------------------------+-------------------------------------------------------+-----+ | ** Sentiment : ** NEGATIVE ** Justification : ** | | Analyze the sentiment of | | | * ** Negative Language : ** The reviewer uses | | movie review and classify | | | phrases like "don't quite make it," "come to | | it as either POSITIVE or | | | mind," "quite disappointing," and "not many | | NEGATIVE. Movie Review: | | | laughs." * ** Specific Criticisms : ** The | | Although Charlie Chaplin | | | reviewer points out specific flaws in the | | made some great short | | | plot and humor , stating that the manager ... | | comedies in the late ... | | +----------------------------------------------+-------------------------+-----------------------------+-----+ | ** Sentiment : ** NEGATIVE ** Reasoning : ** | | Analyze the sentiment of | | | * ** Negative Language : ** The reviewer uses | | movie review and classify | | | phrases like "poor writing," "static camera- | | it as either POSITIVE or | | | work," "chews the scenery," "all surface and | | NEGATIVE. Movie Review: | | | no depth," "sterile spectacles," which all | | Opulent sets and sumptuous | | | carry negative connotations . * ** Comparison | | costumes well photographed | | | to a More Successful Film : **... | | 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.

