1. Descripción general
¿Qué es la administración de datos maestros?
La administración de datos maestros (MDM) se centra en crear una única fuente de verdad confiable para los datos más importantes de tu organización. Imagina una biblioteca organizada meticulosamente en la que cada libro (punto de datos) esté correctamente etiquetado, actualizado y sea fácil de encontrar.
Los datos maestros representan las entidades comerciales fundamentales y centrales que son esenciales para las operaciones de una empresa. Estos son los elementos clave de los datos de instancia principal:
- Entidades comerciales: Son entidades como clientes, productos, proveedores, ubicaciones y empleados, que son los sustantivos en torno a los que gira tu empresa.
- Identificadores: Identificadores únicos que garantizan que cada entidad sea distinta y se pueda rastrear en todos los sistemas
- Atributos: Son las características que describen cada entidad, por ejemplo, la dirección de un cliente, el precio de un producto, etcétera.
Para ayudarte a comprender mejor los datos maestros, comparémoslos con los datos transaccionales. Los datos transaccionales registran eventos individuales (una compra, un envío, etcétera). Mientras que los datos maestros proporcionan el contexto para esos eventos definiendo las entidades involucradas. Por ejemplo, una transacción de ventas se vincula a los datos principales del cliente, el producto y el vendedor.
Si bien la implementación de un MDM sólido es fundamental para la toma de decisiones estratégicas, puede ser compleja y requerir muchos recursos. Aquí es donde entra en juego el poder transformador de la IA generativa, en particular, de modelos como Gemini 1.0 Pro, Gemini 1.0 Pro Vision y Gemini 1.5 Pro.
2. Objetivo
En este codelab, demostrarás cómo Gemini 1.0 Pro simplifica las aplicaciones de administración de datos maestros, como el enriquecimiento y la deduplicación, para los datos de citibike_stations disponibles en el conjunto de datos públicos de BigQuery.
Qué necesitarás
- Conjunto de datos público de BigQuery
bigquery-public-data.new_york_citibike. - Llamadas a funciones de Gemini (una Cloud Function de Java que obtiene la información de la dirección con la API de Geocoding inversa para las coordenadas disponibles con los datos de citibike_stations)
- Las APIs de Vertex AI Embeddings y Vector Search en BigQuery para identificar duplicados
Qué compilarás
- Crearás un conjunto de datos de BigQuery para el caso de uso. En este conjunto de datos, crearás una tabla de destino con datos de la tabla del conjunto de datos públicos
bigquery-public-data.new_york_citibike.citibike_stations. - Implementarás la función de Cloud Functions que incluye la llamada a función de Gemini para la estandarización de direcciones.
- Almacenarás los datos de direcciones enriquecidos en las tablas de destino (de las dos fuentes que se proporcionan para esta demostración).
- Invocarás la API de Vertex AI Embeddings desde BigQuery en los datos de la dirección.
- Usarás la Búsqueda de vectores de BigQuery para identificar registros duplicados.
En el siguiente diagrama, se representa el flujo de datos y los pasos involucrados en la implementación.

3. Requisitos
4. 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 usando 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 APIs de BigQuery, BigQuery Connection, Cloud Functions, Cloud Run, Vertex AI y Cloud Build estén habilitadas. La alternativa al comando de gcloud es a través de la consola con este vínculo.
Consulta la documentación para ver los comandos y el uso de gcloud.
5. 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.

- Ingresa
mdm_geminien 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 Functions. 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 la lista 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.
6. Implementa la función de Gemini Function Calling (Cloud Function en Java)
Sigue estos pasos para implementar la función de Cloud Functions de Java que incluye la llamada a función de Gemini.
- Clona el repositorio de GitHub desde la terminal de Cloud Shell con el siguiente comando:
git clone https://github.com/AbiramiSukumaran/GeminiFunctionCalling
- Reemplaza los marcadores de posición
YOUR_API_KEYyYOUR_PROJECT_IDpor tus valores.
Si lees el blog aquí, sabrás que las implementaciones de llamadas a funciones usan la API de Reverse Geocoding. Puedes crear tu propia API_KEY siguiendo las instrucciones que se indican aquí.
- En la terminal de Cloud Shell, ve al directorio del proyecto GeminiFunctionCalling que acabas de clonar y ejecuta la siguiente instrucción para compilar e implementar la Cloud Function:
gcloud functions deploy gemini-fn-calling --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http
Di "y" cuando se te solicite con las preguntas de "Allow unauthenticated invocations". Lo ideal es que configures la autenticación para tus aplicaciones empresariales, según la recomendación. Sin embargo, como se trata de una app de demostración, continuaremos sin autenticarnos.
El resultado es una URL de REST con el siguiente formato:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling
- Para probar esta Cloud Function, ejecuta el siguiente comando desde la terminal:
gcloud functions call gemini-fn-calling --region=us-central1 --gen2 --data '{"calls":[["40.714224,-73.961452"]]}'
Respuesta para una instrucción de muestra aleatoria:
'{"replies":["{ \"DOOR_NUMBER\": \"277\", \"STREET_ADDRESS\": \"Bedford Ave\", \"AREA\":
null, \"CITY\": \"Brooklyn\", \"TOWN\": null, \"COUNTY\": \"Kings County\", \"STATE\":
\"NY\", \"COUNTRY\": \"USA\", \"ZIPCODE\": \"11211\", \"LANDMARK\": null}}```"]}'
Los parámetros de solicitud y respuesta de esta Cloud Function se implementan de una manera compatible con la invocación de funciones remotas de BigQuery. Se puede consumir directamente desde los datos de BigQuery en su lugar. Esto significa que, si tus datos de entrada (datos de latitud y longitud) se encuentran en BigQuery, puedes llamar a la función remota en los datos y obtener la respuesta de la función, que se puede almacenar o procesar directamente en BigQuery.
- Ejecuta el siguiente DDL desde BigQuery para crear una función remota que invoque esta función de Cloud Functions implementada:
CREATE OR REPLACE FUNCTION
`mdm_gemini.MDM_GEMINI` (latlng STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (
endpoint = 'https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling', max_batching_rows = 1
);
Consulta de prueba para usar la nueva función remota creada:
SELECT mdm_gemini.MDM_GEMINI(latlong) from mdm_gemini.CITIBIKE_STATIONS limit 1;
Si la consulta de prueba que usa la nueva función remota creada en BigQuery falla debido a un problema de permisos de Cloud Functions, ve a Cloud Functions desde la consola de Google Cloud y busca la Cloud Function implementada llamada "gemini-fn-calling". Ve a la pestaña de permisos, agrega el principal como "allUsers" y otorga el rol "Invocador de Cloud Functions" para asegurarte de que se pueda acceder a Cloud Functions desde todos los usuarios (solo porque esta es una app de demostración).
7. Prueba una solución alternativa
Si no tienes la API_KEY necesaria para el enfoque de llamada a la función de geocodificación inversa o no tienes implementada la Cloud Function por algún motivo, puedes hacer lo siguiente como alternativa:
- Descarga el archivo CITIBIKE_STATIONS.csv del repositorio en la carpeta del proyecto de Cloud Shell y navega a esa carpeta.
- Exporta los datos del CSV a tu nuevo conjunto de datos de BigQuery
mdm_geminicon el siguiente comando en la terminal de Cloud Shell:
bq load --source_format=CSV --skip_leading_rows=1 mdm_gemini.CITIBIKE_STATIONS ./CITIBIKE_STATIONS.csv \ name:string,latlng:string,capacity:numeric,num_bikes_available:numeric,num_docks_available:numeric,last_reported:timestamp,full_address_string:string
8. Crea una tabla y enriquece los datos de la dirección
Paso 1: Crea la tabla
Importante: Omite este paso si usaste la solución alternativa, ya que debes haber creado la tabla.
Si no usaste la solución alternativa, ejecuta el siguiente DDL en el editor de SQL de BigQuery:
CREATE TABLE mdm_gemini.CITIBIKE_STATIONS as (
select name, latitude || ',' || longitude as latlong, capacity, num_bikes_available, num_docks_available,last_reported,
'' as full_address_string
from bigquery-public-data.new_york_citibike.citibike_stations) ;
Ahora, enriquezcamos los datos de la dirección invocando la función remota en las coordenadas de latitud y longitud disponibles en la tabla. Establece las siguientes condiciones para los datos:
- Se informó en el año 2024
- Cantidad de bicicletas disponibles > 0
- Capacidad > 100
Ejecute la siguiente consulta:
update `mdm_gemini.CITIBIKE_STATIONS`
set full_address_string = `mdm_gemini.MDM_GEMINI`(latlong)
where EXTRACT(YEAR FROM last_reported) = 2024 and num_bikes_available > 0 and capacity > 100;
Paso 2: Crea una segunda fuente para los datos de ubicación de las estaciones de bicicletas
No omitas este paso, incluso si usaste la solución alternativa para crear la tabla.
En este paso, crearás una segunda fuente de datos de ubicación de las estaciones de bicicletas para los fines de este codelab. Esto es para demostrar que el MDM reúne datos de múltiples fuentes y, luego, identifica la verdad absoluta.
Ejecuta los siguientes DDL en el editor de SQL de BigQuery para crear la segunda fuente de datos de ubicación con dos registros. Llamemos a esta tabla mdm_gemini.CITIBIKE_STATIONS_SOURCE2 y, luego, insertemos dos registros en ella.
CREATE TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE2 (name STRING(55), address STRING(1000), embeddings_src ARRAY<FLOAT64>);
insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Location broadway and 29','{ "DOOR_NUMBER": "1593", "STREET_ADDRESS": "Broadway", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10019", "LANDMARK": null}', null);
insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Allen St & Hester','{ "DOOR_NUMBER": "36", "STREET_ADDRESS": "Allen St", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10002", "LANDMARK": null}', null);
9. Genera embeddings para los datos de direcciones
Los embeddings son vectores numéricos de alta dimensión que representan una entidad determinada, como un fragmento de texto o un archivo de audio. Los modelos de aprendizaje automático (AA) usan embeddings para codificar la semántica de esas entidades a fin de facilitar el razonamiento y la comparación. Por ejemplo, una operación común en los modelos de agrupamiento en clústeres, clasificación y recomendación es medir la distancia entre vectores en un espacio de embedding para encontrar elementos que sean más semánticamente similares. La API de incorporaciones de texto de Vertex AI te permite crear una incorporación de texto con la IA generativa en Vertex AI. Los embeddings de texto son representaciones numéricas del texto que capturan las relaciones entre palabras y frases. Obtén más información sobre los embeddings de texto de Vertex AI aquí.
- Ejecuta el siguiente DDL para crear un modelo remoto para la API de Vertex AI Text Embeddings:
CREATE OR REPLACE MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (ENDPOINT = 'textembedding-gecko@latest');
- Ahora que el modelo de incorporaciones remoto está listo, generemos incorporaciones para la primera fuente y almacenémoslas en una tabla con la siguiente consulta:
CREATE TABLE `mdm_gemini.CITIBIKE_STATIONS_SOURCE1` AS (
SELECT *
FROM ML.GENERATE_EMBEDDING(
MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
( select name, full_address_string as content from `mdm_gemini.CITIBIKE_STATIONS`
where full_address_string is not null )
)
);
En lugar de crear una tabla nueva, también puedes almacenar el campo de resultado de los embeddings en la misma tabla mdm_gemini.CITIBIKE_STATIONS que creaste antes.
- Para generar embeddings para los datos de direcciones en la tabla CITIBIKE_STATIONS_SOURCE2, ejecuta la siguiente consulta:
update `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` a set embeddings_src =
(
SELECT ml_generate_embedding_result
FROM ML.GENERATE_EMBEDDING(
MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
( select name, address as content from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` ))
where name = a.name) where name is not null;
Esto debería crear incorporaciones para la segunda fuente. Ten en cuenta que creamos el campo de incorporaciones en la misma tabla CITIBIKE_STATIONS_SOURCE2.
- Para visualizar las incorporaciones generadas para las tablas de datos fuente 1 y 2, ejecuta la siguiente consulta:
select name,address,embeddings_src from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2`;
select name,content,ml_generate_embedding_result from `mdm_gemini.CITIBIKE_STATIONS_SOURCE1`;
Ahora, realicemos una búsqueda de vectores para identificar duplicados.
10. Ejecuta una búsqueda de vectores para marcar direcciones duplicadas
En este paso, buscarás los dos primeros embeddings que coincidan con cada fila de datos en la columna embeddings_src de la tabla mdm_gemini.CITIBIKE_STATIONS_SOURCE2 en la columna ml_generate_embedding_result de la tabla mdm_gemini.CITIBIKE_STATIONS_SOURCE1.
Para ello, ejecuta la siguiente consulta:
select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
'ml_generate_embedding_result',
(SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
'embeddings_src',
top_k => 2
) where query.name <> base.name
order by distance desc;
Tabla a la que le hacemos la consulta: mdm_gemini.CITIBIKE_STATIONS_SOURCE1 en el campo ml_generate_embedding_result
Tabla que usamos como base: mdm_gemini.CITIBIKE_STATIONS_SOURCE2 en el campo embeddings_src
top_k: Especifica la cantidad de vecinos más cercanos que se devolverán. El valor predeterminado es 10. Un valor negativo se trata como infinito, lo que significa que todos los valores se cuentan como vecinos y se devuelven.
distance_type: Especifica el tipo de métrica que se usará para calcular la distancia entre dos vectores. Los tipos de distancia admitidos son euclidiana y coseno. El valor predeterminado es Euclidean.
El resultado de la búsqueda es el siguiente:

Como puedes ver, se enumeraron los dos vecinos más cercanos (en otras palabras, los duplicados más cercanos) para las dos filas de CITIBIKE_STATIONS_SOURCE2 de CITIBIKE_STATIONS_SOURCE1. Dado que no se especifica distance_type, se supone que es euclidiana y la distancia se lee como las distancias en los valores de TEXTO de la dirección entre las dos fuentes, siendo la más baja la que tiene los textos de dirección más similares.
Establezcamos distance_type en Cosine con la siguiente consulta:
select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
'ml_generate_embedding_result',
(SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
'embeddings_src',
top_k => 2,distance_type => 'COSINE'
) where query.name <> base.name
order by distance desc;
El resultado de la búsqueda es el siguiente:

Ambas búsquedas (de ambos tipos de distancia) se ordenan de forma DESCENDENTE según la distancia, lo que significa que queremos enumerar los resultados en orden de distancia decreciente. Sin embargo, notarás que el orden de distancia de la segunda búsqueda se invierte. ¿Puedes adivinar por qué?
¡Eso es! ¡Acertaste! En la similitud del coseno, un número más grande significa mayor similitud y menor distancia. En la distancia euclidiana, un número mayor significa una mayor distancia entre los valores.
Para obtener más información sobre la comprensión del MDM y sugerencias para comprender la diferencia y las aplicaciones de las distancias euclidiana y coseno, lee el blog.
11. 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.
12. ¡Felicitaciones!
¡Felicitaciones! Demostraste el poder de usar Gemini 1.0 Pro y la llamada a función para transformar algunas actividades de MDM en capacidades de IA generativa simplificadas, pero potentes, determinísticas y confiables. Ahora que lo sabes, no dudes en identificar otras formas de implementar el mismo caso de uso o otras funciones de MDM. ¿Hay conjuntos de datos que podrías validar, brechas de información que podrías completar o tareas que podrías automatizar con llamadas estructuradas incorporadas en tus respuestas de IA generativa? Consulta la documentación de Vertex AI, Funciones remotas de BigQuery, Cloud Functions, Incorporaciones y Vector Search 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.