1. Introducción
Los conjuntos de datos masivos contienen estadísticas valiosas, pero extraer información significativa puede ser una tarea desalentadora. Las herramientas de análisis tradicionales a menudo no proporcionan explicaciones matizadas y similares a las humanas que nos ayuden a comprender realmente la historia que se esconde en nuestros datos. Los almacenes de datos contienen cada vez más datos no estructurados, pero no siempre se puede acceder a ellos para obtener estadísticas. El texto, las imágenes y los videos no estructurados contienen información valiosa para la evolución de tu empresa. Los LLM ofrecen una nueva y potente forma de comprender tus datos, ya que proporcionan explicaciones, análisis de opiniones, detección de objetos y mucho más. Con el surgimiento de los modelos multimodales (y la capacidad de almacenar datos de objetos, como imágenes y videos, en BigQuery a través de tablas de objetos), la integración de potentes LLMs como Gemini 1.0 Pro (para el análisis basado en texto) y Gemini 1.0 Pro Vision (para el análisis de texto y de imágenes o videos) con BigQuery puede transformar la forma en que analizas los datos.
En este codelab, analizaremos los siguientes dos métodos para extraer estadísticas de LLM a partir de los datos de tu empresa y escalar esas estadísticas a miles de filas en BigQuery:
Método 1: Invocación de modelos remotos
- Llama a Gemini 1.0 Pro desde BigQuery con
ML.GENERATE_TEXTen la consultaSELECT. - Usa este enfoque cuando el modelo ya esté disponible como un modelo remoto en BigQuery y quieras usarlo de inmediato. Consulta el estado del modelo que deseas usar en la documentación de BigQuery.
Método 2: Implementación de la función remota
- Llama a una Cloud Function que implementa la llamada a Gemini 1.0 Pro Vision, expuesta como una función remota en BigQuery.
- Usa este enfoque cuando el modelo que deseas usar no esté disponible de forma predeterminada como modelo remoto o si deseas más flexibilidad y personalización en tu caso de uso.
Qué compilarás
- En el método Remote Model Invocation, compilarás un resumidor de ubicaciones para el conjunto de datos de libros de archivo en Internet (que está disponible públicamente en BigQuery) invocando el modelo remoto de Gemini 1.0 Pro en la construcción ML.GENERATE_TEXT en BigQuery.

- En el método de Implementación de funciones remotas, compilarás un validador de imágenes para validar imágenes de prueba en comparación con una imagen de referencia. Para ello, crearás un conjunto de datos que contenga capturas de pantalla de imágenes de prueba en una tabla externa y le pedirás a Gemini 1.0 Pro Vision que lo valide en comparación con la imagen de referencia. Luego, crearás una Cloud Function de Java que implemente la llamada a Gemini Pro Vision y la invocarás como una función remota en BigQuery.

Nota:
Es posible que haya más modelos de IA generativa de Vertex AI disponibles como modelos remotos en BigQuery. Esto significa que puedes acceder a estos modelos con la estructura ML.GENERATE_TEXT de BigQuery de forma predeterminada. Sin embargo, incluso en el caso de disponibilidad del modelo remoto, siempre tienes la opción de crear personalizaciones avanzadas para tu caso de uso con Cloud Functions y, luego, acceder a estos modelos como funciones remotas desde BigQuery.
¿Por qué BigQuery?
BigQuery es un almacén de datos sin servidores y de múltiples nubes que puede escalar de bytes a petabytes con una sobrecarga operativa mínima, por lo que es una excelente opción para almacenar datos de entrenamiento de AA. Con las capacidades integradas de aprendizaje automático de BigQuery (BQML) y de análisis, puedes crear predicciones sin código solo con consultas en SQL. Además, puedes acceder a datos de fuentes externas con consultas federadas, lo que elimina la necesidad de tener canalizaciones complejas de ETL.
BigQuery es un almacén de datos en la nube completamente administrado que ayuda a los usuarios a analizar datos estructurados, semiestructurados y no estructurados.
2. Requisitos
3. Antes de comenzar
- En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
- Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información para verificar si la facturación está habilitada en un proyecto .
- Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud y que viene precargado con bq. Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.

- Una vez que te conectes a Cloud Shell, verifica que ya te autenticaste y que el proyecto se configuró con tu ID del proyecto con el siguiente comando:
gcloud auth list
- En Cloud Shell, ejecuta el siguiente comando para confirmar que el comando gcloud conoce tu proyecto.
gcloud config list project
- Si tu proyecto no está configurado, usa el siguiente comando para hacerlo:
gcloud config set project <YOUR_PROJECT_ID>
- Navega a Gemini for Google Cloud Marketplace para habilitar la API. También puedes usar el siguiente comando en la terminal de Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Asegúrate de que las siguientes APIs estén habilitadas:
- BigQuery
- Conexión de BigQuery
- Cloud Function
- Cloud Run
- Vertex AI
- Cloud Build
- API de Cloud Storage
La alternativa a usar el comando de gcloud es acceder a la consola a través de este vínculo.
Consulta la documentación para ver los comandos y el uso de gcloud.
4. Crea un conjunto de datos y una conexión externa de BigQuery
Comencemos por crear un conjunto de datos y una conexión de recursos de Cloud.
Un conjunto de datos en BigQuery es un contenedor para todas las tablas y los objetos de tu aplicación.
Para crear un conjunto de datos, haz lo siguiente:
- Ve a la página de BigQuery en la consola de Google Cloud.
- En el panel Explorador, selecciona el proyecto en el que deseas crear el conjunto de datos.
- Expande la opción Acciones (el ícono de puntos suspensivos verticales) y haz clic en Crear conjunto de datos.

- Haz clic en Crear conjunto de datos.
- Ingresa
gemini_bq_fnen el campo ID del conjunto de datos. - Establece el tipo de ubicación como
Multi-regiony acepta el valor predeterminado, que esUS(multiple regions in United States.. - Haz clic en Crear conjunto de datos.
- Verifica que el conjunto de datos se haya creado y aparezca debajo del ID de tu proyecto en el panel Explorador.
Se requiere una conexión de BigQuery para interactuar con tu Cloud Function. Para crear una función remota, debes crear una conexión de BigQuery. En este codelab, usaremos la conexión de BigLake para acceder al modelo desde BigQuery a través de Cloud Function. Las conexiones de BigLake ayudan a conectar la fuente de datos externa y, al mismo tiempo, conservan la seguridad y el control de acceso de BigQuery detallados, que en nuestro caso es la API de Gemini Pro de Vertex AI.
Para crear la conexión de BigLake, haz lo siguiente:
- Haz clic en Agregar en el panel Explorador de la página de BigQuery.

- Haz clic en Conexiones a fuentes de datos externas.
- En el menú Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (Cloud Resource).
- En el campo ID de conexión, ingresa el nombre de tu conexión como
gemini-bq-conn. - Establece el tipo de ubicación como
Multi-regiony acepta el valor predeterminado, que esUS(multiple regions in United States.. - Haz clic en Crear conexión.
- Haz clic en Ir a la conexión y, luego, copia el ID de la cuenta de servicio en el panel Información de conexión.

- Ve a la página IAM y administración y haz clic en Otorgar acceso.
- Pega el ID de la cuenta de servicio en el campo Nuevos principales.
- Selecciona el rol
Vertex AI useren la lista de roles y, luego, haz clic en Guardar.

Ahora creaste correctamente el conjunto de datos y la conexión de BigQuery. A continuación, completarás los pasos necesarios para la invocación remota del modelo.
5. Caso de uso 1: Invocación de modelos remotos: Configura la invocación de modelos remotos
Ahora que creaste tu conjunto de datos y tu conexión, creemos un modelo en BigQuery basado en el modelo fundamental Gemini Pro de Vertex AI. Al final de este ejercicio, tendrás tu aplicación de LLM en funcionamiento usando solo consultas SQL.
Paso 1: Crea una tabla de BigQuery que contenga los datos de entrada para el modelo remoto
Crea una tabla llamada books en tu conjunto de datos que pueda contener alrededor de 50 registros de la tabla bigquery-public-data.gdelt_internetarchivebooks.1905 en el conjunto de datos Internet Archive Books que BigQuery obtuvo para uso público.
Para ello, ejecuta la siguiente instrucción DDL (lenguaje de definición de datos) desde el panel del editor de SQL de BigQuery:
create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)
Paso 2 : Crea un modelo de BigQuery
Crea un modelo en tu conjunto de datos. Para ello, ejecuta el siguiente DDL desde el panel del editor de SQL de BigQuery:
CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');
Observa que el modelo se crea con una opción para verlo.
Paso 3 : Prueba tu nueva aplicación de IA generativa
Usa la función ML.GENERATE_TEXT en una consulta SELECT para enviar una solicitud al modelo remoto.
SELECT ml_generate_text_llm_result as Gemini_Response, prompt as Prompt
FROM ML.GENERATE_TEXT(MODEL `gemini_bq_fn.gemini_remote_model`,
(select 'You are a text summarizer and standardizer. From the following text that contains address locations, standardize and print one standardized, consolidated address. You cannot return empty because you know how to pick up sensible data from the text in this field: ' ||
substring(locations, 0, 200) as prompt
from `gemini_bq_fn.books`),
STRUCT(
TRUE AS flatten_json_output));
Deberías ver el siguiente resultado:

¡Felicitaciones! Demostraste con éxito cómo usar un modelo remoto (basado en un modelo gemini-pro) con la función ML.GENERATE_TEXT para analizar datos de texto en una tabla de BigQuery.
Ahora probemos otro modelo de Vertex AI con las funciones remotas de BigQuery. Supongamos que deseas agregar más personalización y flexibilidad a la forma en que puedes usar el modelo de forma remota en BigQuery. Los modelos admitidos se enumeran en la documentación de BigQuery.
6. Caso de uso núm. 2: Implementación de funciones remotas: Configura la implementación de funciones remotas
En este ejercicio, crearás una función en BigQuery basada en la Cloud Function de Java que implementa el modelo fundamental de Gemini 1.0 Pro Vision. Primero, crearás e implementarás la función de Cloud Functions en Java para comparar imágenes con el modelo de Gemini 1.0 Pro Vision y, luego, crearás la función remota en BigQuery que invoca la función de Cloud Functions implementada. Recuerda que se puede seguir el mismo procedimiento para cualquier ejecución de funciones remotas en BigQuery.
¡Comencemos!
Paso 1: Crea la función de Cloud Functions de Java
Compilarás una función de Cloud de 2ª gen. en Java para validar imágenes de prueba en comparación con una imagen de referencia. La imagen de referencia se almacena en un conjunto de datos que contiene capturas de pantalla de imágenes de prueba en una tabla externa en BigQuery. Validarás las imágenes con el modelo de Gemini Pro Vision (SDK de Java). Luego, implementarás la función de Cloud Functions de Java en un extremo de REST.
Sigue estos pasos:
- Inicia el editor de Cloud Shell.
- Si usas el editor heredado, haz clic en Probar el nuevo editor.
- En la barra de estado, haz clic en Cloud Code - Acceder.
- Si se te solicita que autorices a Cloud Shell Editor para que realice llamadas a la API de Google Cloud, haz clic en Autorizar. Sigue las instrucciones para acceder a tu Cuenta de Google. Ya te conectaste a Google Cloud.
- Si no ves tu proyecto en la barra de estado de Cloud Code, haz clic en Cloud Code - Sign In > Select a Google Cloud project. Elige el proyecto de Google Cloud en el que deseas crear tus Cloud Functions. El proyecto se carga y se convierte en el proyecto activo en el editor de Cloud Shell.
- En la barra de estado de Cloud Code, haz clic en el nombre del proyecto activo. En el menú Selección rápida que aparece, selecciona Nueva aplicación.
- En el diálogo Create New Application, selecciona Cloud Functions application.

- Selecciona Java: Hello World cuando se te solicite que elijas una plantilla.

- Ingresa
Gemini-BQ-Functioncomo el nombre de tu proyecto en la ruta de acceso del proyecto. La estructura del proyecto aparece en una nueva vista del editor de Cloud Shell.

- Agrega las dependencias necesarias dentro de la etiqueta
<dependencies>... </dependencies>o copia las dependencias del archivo pom.xml de muestra. - Cambia el nombre de tu clase de
HelloWorld.javaa algo más significativo. Supongamos que esGeminiBigQueryFunction.java. Cambia el nombre del paquete según corresponda. - Reemplaza el código de marcador de posición en el archivo GeminiBigQueryFunction.Java por el código de muestra que se proporciona en el repositorio de GitHub. Asegúrate de reemplazar la variable <YOUR_PROJECT_ID> por el ID de tu proyecto en el código de muestra.
- Ve a la terminal de Cloud Shell. Verifica que estés en el directorio de tu proyecto. De lo contrario, navega al directorio del proyecto ejecutando el siguiente comando:
cd Gemini-BQ-Function
- Ejecuta la siguiente instrucción para compilar e implementar la Cloud Function:
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .
Reemplaza el punto de entrada en el comando por el punto de entrada de tu función. El resultado es una URL de REST con el siguiente formato:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
- Para probar esta Cloud Function, ejecuta el siguiente comando desde la terminal:
gcloud functions call gemini-bq-fn --region=us-central1 --gen2 --data '{"calls":[["https://storage.googleapis.com/img_public_test/image_validator/baseline/1.JPG", "https://storage.googleapis.com/img_public_test/image_validator/test/2.JPG", "PROMPT_ABOUT_THE_IMAGES_TO_GEMINI"]]}'
Respuesta para la instrucción de muestra aleatoria:

¡Genial! La implementación genérica de Cloud Functions para el modelo de Gemini Pro Vision está lista. Usemos este endpoint directamente en los datos de BigQuery desde una función remota de BigQuery.
Paso 2: Crea una tabla de objetos y una función remota de BigQuery
Requisitos previos
Necesitarás un bucket de Cloud Storage para esta parte del ejercicio. Sigue estos pasos para crear un bucket de Cloud Storage:
- Para crear un bucket, ve a la consola de Cloud Storage y haz clic en Crear.
- Ingresa
demo-bq-gemini-public-imagecomo nombre del bucket y haz clic en Crear. - Desmarca la opción
Enforce public access prevention on this bucket. Si bien en este ejercicio crearás este bucket para el acceso público, te recomendamos que evites el acceso público y proporciones permisos a cuentas de servicio específicas según sea necesario en tus casos de uso empresariales. - Después de crear el bucket, ve a la pestaña Permisos para ver y cambiar los permisos.
- Para agregar principales, haz clic en Otorgar acceso. Especifica un ID de cuenta de servicio para otorgar permisos a una cuenta específica o especifica
allUserspara otorgar acceso público a tu bucket. - Selecciona el rol
Storage Object Viewery haz clic en Guardar. Si se te solicita, elige permitir el acceso público. - Ve a la pestaña Objetos y sube imágenes de referencia y de prueba para compararlas. Para este codelab, puedes subir los siguientes objetos que están disponibles de forma pública: baseline.JPG, TEST1.JPG y TEST2.JPG.
Crea una tabla de objetos de BigQuery
Crea una tabla de objetos externa desde BigQuery para acceder a los datos no estructurados en el bucket usando la conexión y el conjunto de datos que creaste antes. Para ello, ejecuta la siguiente instrucción DDL (lenguaje de definición de datos) desde el panel del editor de consultas de BigQuery:
CREATE OR REPLACE EXTERNAL TABLE `gemini_bq_fn.image_validation`
WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(object_metadata="SIMPLE", uris=["gs://demo-bq-gemini-public-image/*.JPG"]);
Verifica que se haya creado una nueva tabla de objetos llamada image_validation en tu conjunto de datos.
Crea una función remota de BigQuery
Crea una función remota en BigQuery para invocar la Cloud Function de Java que implementa el modelo de Gemini Pro Vision. Crea esto en el mismo conjunto de datos. Para ello, ejecuta el siguiente DDL desde el panel del editor de SQL de la consola de BigQuery:
CREATE OR REPLACE FUNCTION `gemini_bq_fn.FN_IMAGE_VALIDATE` (baseline STRING, test STRING, prompt STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (
endpoint = 'https://us-central1-<your project id>.cloudfunctions.net/gemini-bq-fn',
max_batching_rows = 1
);
La URL del extremo es la URL de REST que se mostró anteriormente en este ejercicio. Esto crea la función remota en BigQuery. Hay tres parámetros en el DDL anterior. Los dos primeros parámetros son URLs a las imágenes almacenadas en la tabla de objetos que se creó en el paso anterior. El último parámetro es la instrucción para el modelo (Gemini Pro Vision). Puedes consultar el código de Cloud Functions en Java que se usa para analizar esta firma:
Gson().fromJson(request.getReader(), JsonObject.class);
JsonArray calls_array = requestJson.getAsJsonArray("calls");
JsonArray calls = (JsonArray) calls_array.get(0);
String baseline_url = calls.get(0).toString().replace("\"", "");
String test_url = calls.get(1).toString().replace("\"", "");
String prompt_string = calls.get(2).toString();
Cómo invocar a Gemini desde BigQuery
Usa la función remota en una consulta SELECT para probar la función de validación de las imágenes en relación con la instrucción.
select gemini_bq_fn.FN_IMAGE_VALIDATE(
'https://storage.googleapis.com/demo-bq-gemini-public-image/Baseline.JPG',
REPLACE(uri, 'gs://', 'https://storage.googleapis.com/') ,
'You are an expert image validator who can respond with JSON result. Find 2 images here. The first one is the reference image. The second image is the test image. Compare the second image to see if the second image is similar to the first in terms of the text present in the image. Respond ONLY in JSON Format with 3 attributes namely SIMILARITY which is a \"YES\" or \"NO\", SIMILARITY_SCORE which is a percentage and DIFFERENCE_COMMENT which is a string.' ) as IMAGE_VALIDATION_RESULT
from `gemini_bq_fn.image_validation`
where uri like '%TEST1%';
Prueba la consulta anterior con los archivos de objeto TEST1 y TEST2. Verás un resultado similar al siguiente:

Estas son las imágenes para tu referencia:
Imagen de referencia

Imagen de prueba

Observa que ambas imágenes son similares en el sentido de que tienen la vista de la consola de Cloud de Duet AI, pero el texto de ambas es diferente, ya que el modelo lo presenta en formato JSON.
Con esto, probaste correctamente la implementación de la función remota.
7. Beneficios y casos de uso
Veamos algunos de los beneficios de integrar BigQuery y Gemini para el análisis de datos estructurados y no estructurados.
- Incorporación de la IA generativa a tus datos: Ya no tendrás que mover datos, duplicarlos ni agregar complejidad. Puedes analizar datos y generar estadísticas en el mismo entorno de BigQuery.
- Análisis mejorados: Las explicaciones en lenguaje natural de Gemini agregan una nueva capa de comprensión a tus datos, y puedes lograrlo con consultas en SQL.
- Escalabilidad: Esta solución maneja grandes conjuntos de datos y análisis complejos con facilidad y con poco esfuerzo de código.
Las aplicaciones para esto son muchas. Considera situaciones en finanzas (análisis de tendencias del mercado), comercio minorista (opinión del cliente), atención médica (resúmenes de informes médicos), etc., en las que tus equipos de análisis y de negocios podrían implementar estas herramientas con relativamente poco esfuerzo, recursos y un lenguaje y una herramienta conocidos.
8. Limpia
Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta publicación:
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.
- Si quieres conservar tu proyecto, omite los pasos anteriores y borra la Cloud Function. Para ello, navega a Cloud Functions, marca la función que quieres borrar en la lista de funciones y haz clic en Borrar.
9. Felicitaciones
Felicitaciones. Con los modelos de Gemini integrados en BigQuery, ya no solo analizas tus datos, sino que también cuentas historias con ellos. Puedes generar las narrativas ocultas dentro de tus conjuntos de datos y transformar la forma en que comprendes tus estadísticas. ¡Comienza a experimentar! Aplica esta técnica a tus propios conjuntos de datos y descubre las historias que se esconden en ellos. Dado que BigQuery admite datos no estructurados en tablas de objetos ( tablas externas), intenta usar Gemini Pro Vision para crear estadísticas generativas sobre datos de imágenes. Consulta la documentación de Vertex AI, Funciones remotas de BigQuery y Cloud Functions para obtener orientación más detallada. Aquí se encuentra el repo de GitHub para este proyecto. Cuéntanos qué creas con lo que aprendiste.