Get Vertex AI text embeddings

This page describes how to use the Vertex AI text embedding API to generate, store, and update text embeddings for data stored in Spanner for GoogleSQL-dialect databases and PostgreSQL-dialect databases.

A text embedding is a vector representation of text data, and they are used in many ways to find similar items. You interact with them every time you complete a Google Search or see recommendations when shopping online. When you create text embeddings, you get vector representations of natural text as arrays of floating point numbers. This means that all of your input text is assigned a numerical representation. By comparing the numerical distance between the vector representations of two pieces of text, an application can determine the similarity between the text or the objects represented by the text.

With the Vertex AI text embeddings API, you can create a text embedding with Generative AI . In this tutorial, you use the Vertex AI text embedding model to generate text embeddings for the data stored in Spanner.

To learn more about text embeddings and supported models, see Get text embeddings .

Objective

In this tutorial, you learn how to:

  • Register a Vertex AI text embedding model in a Spanner schema using DDL statements.
  • Reference the registered model using SQL queries to generate embeddings from data stored in Spanner.

Pricing

This tutorial uses billable components of Google Cloud, including:

  • Spanner
  • Vertex AI

For more information about Spanner costs, see the Spanner pricing page.

For more information about Vertex AI costs, see the Vertex AI pricing page.

Generate and store text embeddings

Depending on the model you use, generating embeddings might take some time. For more performance sensitive workloads, the best practice is to avoid generating embeddings in read-write transactions. Instead, generate the embeddings in a read-only transaction using the following SQL examples.

GoogleSQL

Register a text embeddings model in Spanner

In GoogleSQL, you must register a model before using it with the ML.PREDICT function. To register the Vertex AI text embedding model in a Spanner database, execute the following DDL statement :

  CREATE 
  
 MODEL 
  
  MODEL_NAME 
 
 INPUT 
 ( 
 content 
  
 STRING 
 ( 
 MAX 
 )) 
 OUTPUT 
 ( 
  
 embeddings 
  
 STRUCT 
<  
 statistics 
  
 STRUCT<truncated 
  
 BOOL 
 , 
  
 token_count 
  
 FLOAT64 
> , 
  
 values 
  
 ARRAY<FLOAT64> 
> ) 
 REMOTE 
  
 OPTIONS 
  
 ( 
  
 endpoint 
  
 = 
  
 '//aiplatform.googleapis.com/projects/ PROJECT 
/locations/ LOCATION 
/publishers/google/models/ $MODEL_NAME 
' 
 ); 
 

Replace the following:

  • MODEL_NAME : the name of the Vertex AI text embedding model
  • PROJECT : the project hosting the Vertex AI endpoint
  • LOCATION : the location of the Vertex AI endpoint

Spanner grants appropriate permissions automatically. If it doesn't, review the model endpoint access control .

Schema discovery and validation is not available for Generative AI models. You are required to provide INPUT and OUTPUT clauses which match against the models schema. For the full schema of the text embedding model, see Get text embeddings .

Generate text embeddings

To generate embeddings, pass a piece of text directly to the ML.PREDICT function using the following SQL:

  SELECT 
  
 embeddings 
 . 
 values 
 FROM 
  
 ML 
 . 
 PREDICT 
 ( 
  
 MODEL 
  
  MODEL_NAME 
 
 , 
  
 ( 
 SELECT 
  
 "A product description" 
  
 as 
  
 content 
 ) 
 ); 
 

To generate embeddings for data stored in a table, use the following SQL:

  SELECT 
  
 id 
 , 
  
 embeddings 
 . 
 values 
 FROM 
  
 ML 
 . 
 PREDICT 
 ( 
  
 MODEL 
  
  MODEL_NAME 
 
 , 
  
 ( 
 SELECT 
  
 id 
 , 
  
 description 
  
 as 
  
 content 
  
 FROM 
  
 Products 
 ) 
 ); 
 

Store text embeddings

After generating the embeddings in a read-only transaction, store them in Spanner so they can be managed with your operational data. To store the embeddings, use a read-write transaction .

For workloads that are less performance sensitive, you can generate and insert embeddings with the following SQL in a read-write transaction:

  CREATE 
  
 TABLE 
  
 Products 
 ( 
  
 id 
  
 INT64 
  
 NOT 
  
 NULL 
 , 
  
 description 
  
 STRING 
 ( 
 MAX 
 ), 
  
 embeddings 
  
 ARRAY<FLOAT32> 
 , 
 ) 
  
 PRIMARY 
  
 KEY 
 ( 
 id 
 ); 
 
  INSERT 
  
 INTO 
  
 Products 
  
 ( 
 id 
 , 
  
 description 
 , 
  
 embeddings 
 ) 
 SELECT 
  
 @ 
 Id 
 , 
  
 @ 
 Description 
 , 
  
 embeddings 
 . 
 values 
 FROM 
  
 ML 
 . 
 PREDICT 
 ( 
  
 MODEL 
  
 MODEL_NAME 
 , 
  
 ( 
 SELECT 
  
 @ 
 Description 
  
 as 
  
 content 
 ) 
 ); 
 

PostgreSQL

Generate text embeddings

To generate embeddings, pass a piece of text directly to the spanner.ML_PREDICT_ROW function using the following SQL:

  SELECT 
  
 spanner 
 . 
 ML_PREDICT_ROW 
 ( 
  
 'projects/ PROJECT 
/locations/ LOCATION 
/publishers/google/models/ $MODEL_NAME 
' 
 , 
  
 '{"instances": [{"content": "A product description"}]}' 
 :: 
 jsonb 
  
 ) 
  
 - 
> 'predictions' 
 - 
> 0 
 - 
> 'embeddings' 
 - 
> 'values' 
 ; 
 

Replace the following:

  • PROJECT : the project hosting the Vertex AI endpoint
  • LOCATION : the location of the Vertex AI endpoint
  • MODEL_NAME : the name of the Vertex AI text embedding model

To generate embeddings for data stored in a table, use the following SQL:

  SELECT 
  
 id 
 , 
  
 spanner 
 . 
 ML_PREDICT_ROW 
 ( 
  
 'projects/ PROJECT 
/locations/ LOCATION 
/publishers/google/models/ $MODEL_NAME 
' 
 , 
  
 JSONB_BUILD_OBJECT 
 ( 
 'instances' 
 , 
  
 JSONB_BUILD_ARRAY 
 ( 
 JSONB_BUILD_OBJECT 
 ( 
 'content' 
 , 
  
 description 
 )))) 
  
 ) 
  
 - 
>  
 ` 
 predictions 
 `- 
> 0 
 ->` 
 embeddings 
 `->` 
 values 
 `` 
 FROM 
  
 Products 
 ; 
 

Replace the following:

  • PROJECT : the project hosting the Vertex AI endpoint
  • LOCATION : the location of the Vertex AI endpoint
  • MODEL_NAME : the name of the Vertex AI text embedding model

Store text embeddings

After generating the embeddings in a read-only transaction, store them in Spanner so they can be managed with your operational data. To store the embeddings, use a read-write transaction .

For workloads that are less performance sensitive, you can generate and insert embeddings with the following SQL in a read-write transaction:

  CREATE 
  
 TABLE 
  
 Products 
  
 ( 
  
 id 
  
 INT8 
  
 NOT 
  
 NULL 
 , 
  
 description 
  
 TEXT 
 , 
  
 embeddings 
  
 REAL 
 [], 
  
 PRIMARY 
  
 KEY 
 ( 
 id 
 ) 
 ); 
 
  INSERT 
  
 INTO 
  
 Products 
  
 ( 
 id 
 , 
  
 description 
 , 
  
 embeddings 
 ) 
 SELECT 
  
 @ 
 Id 
 , 
  
 @ 
 Description 
 , 
  
 spanner 
 . 
 FLOAT32_ARRAY 
 ( 
 spanner 
 . 
 ML_PREDICT_ROW 
 ( 
  
 'projects/ PROJECT 
/locations/ LOCATION 
/publishers/google/models/ $MODEL_NAME 
' 
 , 
  
 JSONB_BUILD_OBJECT 
 ( 
 'instances' 
 , 
  
 JSONB_BUILD_ARRAY 
 ( 
 JSONB_BUILD_OBJECT 
 ( 
 'content' 
 , 
  
 @ 
 Description 
 ))) 
  
 ) 
  
 - 
>  
 'predictions' 
 - 
> 0 
 - 
> 'embeddings' 
 - 
> 'values' 
 )); 
 

Replace the following:

  • PROJECT : the project hosting the Vertex AI endpoint
  • LOCATION : the location of the Vertex AI endpoint
  • MODEL_NAME : the name of the Vertex AI text embedding model

Update text embeddings

To update your embeddings or to ingest data in realtime, use the UPDATE ( GoogleSQL and PostgreSQL ) statement.

To update the Products table in the previous example, use the following SQL:

GoogleSQL

  UPDATE 
  
 Products 
 SET 
  
 description 
  
 = 
  
 @ 
 description 
 , 
  
 embeddings 
  
 = 
  
 ( 
 SELECT 
  
 embeddings 
 . 
 values 
  
 FROM 
  
 ML 
 . 
 PREDICT 
 ( 
 MODEL 
  
  MODEL_NAME 
 
 , 
  
 ( 
 SELECT 
  
 @ 
 description 
  
 as 
  
 content 
 )) 
  
 ) 
 WHERE 
  
 id 
  
 = 
  
 @ 
 id 
 ; 
 

Replace the following:

  • MODEL_NAME : the name of the Vertex AI text embedding model

PostgreSQL

  UPDATE 
  
 Products 
 SET 
  
 description 
  
 = 
  
 $ 
 1 
 , 
  
 embeddings 
  
 = 
  
 spanner 
 . 
 FLOAT32_ARRAY 
 ( 
  
 spanner 
 . 
 ML_PREDICT_ROW 
 ( 
  
 'projects/ PROJECT 
/locations/ LOCATION 
/publishers/google/models/ $MODEL_NAME 
' 
 , 
  
 JSONB_BUILD_OBJECT 
 ( 
 'instances' 
 , 
  
 JSONB_BUILD_ARRAY 
 ( 
 JSONB_BUILD_OBJECT 
 ( 
 'content' 
 , 
  
 $ 
 1 
 ))) 
  
 ) 
  
 - 
>  
 'predictions' 
 - 
> 0 
 - 
> 'embeddings' 
 - 
> 'values' 
 ) 
 WHERE 
  
 id 
  
 = 
  
 $ 
 2 
 ; 
 

Replace the following:

  • PROJECT : the project hosting the Vertex AI endpoint
  • LOCATION : the location of the Vertex AI endpoint
  • MODEL_NAME : the name of the Vertex AI text embedding model

What's next

Design a Mobile Site
View Site in Mobile | Classic
Share by: