Cómo buscar un gráfico

En este instructivo, se muestra cómo realizar una búsqueda semántica en los datos de tu gráfico mediante la generación de incorporaciones autónomas y la AI.SEARCH función.

Objetivos

En este instructivo, se abarcan las siguientes tareas:

  • Crea tablas que contengan información sobre personas, cuentas financieras, propiedad de cuentas y transferencias de cuentas.
  • Usa la generación de incorporaciones autónomas para simplificar tu flujo de trabajo de mantenimiento de incorporaciones.
  • Crea un gráfico que defina las relaciones entre los datos almacenados en tus tablas.
  • Usa la función AI.SEARCH en los nodos de tu gráfico para realizar una búsqueda semántica en las descripciones de las cuentas.
  • Usa la función AI.SEARCH en los bordes de tu gráfico para realizar una búsqueda semántica en las notas de transferencia de cuentas.

Costos

En este documento, usarás los siguientes componentes facturables de Cloud de Confiance by S3NS:

  • BigQuery: You incur costs for the data that you process in BigQuery.

Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.

Antes de empezar

Console

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  4. Asegúrate de tener los siguientes roles en el proyecto: Editor de datos de BigQuery, Administrador de IAM de proyecto

    Verifica los roles

    1. En la Cloud de Confiance consola de, dirígete a la página IAM.

      Ir a IAM
    2. Selecciona el proyecto.
    3. En la columna Principal, busca todas las filas que te identifiquen a ti o a un grupo en el que se te incluya. Para saber en qué grupos estás incluido, comunícate con tu administrador.

    4. Para todas las filas en las que se te especifique o se te incluya, verifica la columna Rol para ver si la lista de roles incluye los roles necesarios.

    Otorga los roles

    1. En la Cloud de Confiance consola de, dirígete a la página IAM.

      Ir a IAM
    2. Selecciona el proyecto.
    3. Haz clic en Grant access.
    4. En el campo Principales nuevas, ingresa tu identificador de usuario. Este suele ser el identificador de un usuario que pertenece a un grupo de identidades de personal. Para obtener más información, consulta Representa a los usuarios del grupo de personal en políticas de IAM o comunícate con el administrador.

    5. Haz clic en Selecciona un rol y, luego, busca el rol.
    6. Para otorgar roles adicionales, haz clic en Agregar otro rol y agrega uno más.
    7. Haz clic en Guardar.

gcloud

  1. Instala Google Cloud CLI.

  2. Configura gcloud CLI para usar tu identidad federada.

    Para obtener más información, consulta Accede a la gcloud CLI con tu identidad federada.

  3. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  4. Crea o selecciona un Cloud de Confiance proyecto.

    Roles necesarios para seleccionar o crear un proyecto

    • Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crea un proyecto: Para crear un proyecto, necesitas el rol de creador de proyectos (roles/resourcemanager.projectCreator), que contiene el resourcemanager.projects.create permiso. Obtén más información para otorgar roles.
    • Crea un proyecto de: Cloud de Confiance

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el Cloud de Confiance proyecto de que estás creando.

    • Selecciona el Cloud de Confiance proyecto de que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre de tu Cloud de Confiance proyecto de.

  5. Verifica que la facturación esté habilitada para tu Cloud de Confiance proyecto.

  6. Habilita la API de BigQuery:

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el serviceusage.services.enable permiso. Obtén más información para otorgar roles.

    gcloud services enable bigquery.googleapis.com
  7. Otorga roles a tu cuenta de usuario. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de IAM: roles/bigquery.dataEditor, roles/resourcemanager.projectIamAdmin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Reemplaza lo siguiente:

Crear tablas

Para almacenar las tablas y el gráfico que creas en los siguientes ejemplos, crea un conjunto de datos. La siguiente consulta crea un conjunto de datos llamado graph_search:

CREATE SCHEMA IF NOT EXISTS graph_search;

Las siguientes tablas contienen información sobre personas y cuentas, y las relaciones entre cada una de estas entidades:

  • Person: Información sobre personas
  • Account: Información sobre cuentas bancarias
  • PersonOwnAccount: Información sobre quién es propietario de qué cuentas
  • AccountTransferAccount: Información sobre transferencias entre cuentas

Para crear estas tablas, ejecuta las siguientes CREATE TABLE instrucciones:

CREATE OR REPLACE TABLE graph_search.Person (
  id               INT64,
  name             STRING,
  PRIMARY KEY (id) NOT ENFORCED
);

CREATE OR REPLACE TABLE graph_search.Account (
  id                    INT64,
  create_time           TIMESTAMP,
  is_blocked            BOOL,
  description           STRING,
  description_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
                          GENERATED ALWAYS AS (
                          AI.EMBED(description, model => 'embeddinggemma-300m')
                          ) STORED OPTIONS( asynchronous = TRUE ),
  PRIMARY KEY (id) NOT ENFORCED
);

CREATE OR REPLACE TABLE graph_search.PersonOwnAccount (
  id               INT64 NOT NULL,
  account_id       INT64 NOT NULL,
  create_time      TIMESTAMP,
  PRIMARY KEY (id, account_id) NOT ENFORCED,
  FOREIGN KEY (id) REFERENCES graph_search.Person(id) NOT ENFORCED,
  FOREIGN KEY (account_id) REFERENCES graph_search.Account(id) NOT ENFORCED
);

CREATE OR REPLACE TABLE graph_search.AccountTransferAccount (
  id               INT64 NOT NULL,
  to_id            INT64 NOT NULL,
  amount           FLOAT64,
  create_time      TIMESTAMP NOT NULL,
  order_number     STRING,
  notes            STRING,
  notes_embedding  STRUCT<result ARRAY<FLOAT64>, status STRING>
                     GENERATED ALWAYS AS (
                     AI.EMBED(notes, model => 'embeddinggemma-300m')
                     ) STORED OPTIONS( asynchronous = TRUE ),
  PRIMARY KEY (id, to_id, create_time) NOT ENFORCED,
  FOREIGN KEY (id) REFERENCES graph_search.Account(id) NOT ENFORCED,
  FOREIGN KEY (to_id) REFERENCES graph_search.Account(id) NOT ENFORCED
);

Las tablas Account y AccountTransferAccount usan la generación de incorporaciones autónomas para mantener las incorporaciones de sus columnas description y notes.

En este instructivo, usamos el modelo embeddinggemma-300m porque se ejecuta en BigQuery y funciona bien para cadenas cortas. Para cadenas más largas que superen los 128 tokens, debes elegir un modelo de incorporación diferente, como text-embedding-005. Para obtener más información, consulta cómo elegir un modelo de incorporación .

Inserta datos

Las siguientes consultas insertan algunos datos de muestra en tus tablas. Las instrucciones INSERT omiten las columnas de incorporación y BigQuery las propaga automáticamente.

INSERT INTO graph_search.Account
  (id, create_time, is_blocked, description)
VALUES
  (7,"2020-01-10 06:22:20.222",false,"Fund for a refreshing tropical vacation"),
  (16,"2020-01-27 17:55:09.206",true,"Fund for a rainy day!"),
  (20,"2020-02-18 05:44:20.655",false,"Saving up for travel");

INSERT INTO graph_search.Person
  (id, name)
VALUES
  (1,"Alex"),
  (2,"Dana"),
  (3,"Lee");

INSERT INTO graph_search.AccountTransferAccount
  (id, to_id, amount, create_time, order_number, notes)
VALUES
  (7,16,300,"2020-08-29 15:28:58.647","304330008004315", "wedding present"),
  (7,16,100,"2020-10-04 16:55:05.342","304120005529714", "birthday gift"),
  (16,20,300,"2020-09-25 02:36:14.926","103650009791820", "for shared cost of dinner"),
  (20,7,500,"2020-10-04 16:55:05.342","304120005529714", "fees for tuition"),
  (20,16,200,"2020-10-17 03:59:40.247","302290001484851", "loved the lunch");

INSERT INTO graph_search.PersonOwnAccount
  (id, account_id, create_time)
VALUES
  (1,7,"2020-01-10 06:22:20.222"),
  (2,20,"2020-01-27 17:55:09.206"),
  (3,16,"2020-02-18 05:44:20.655");

Crea un gráfico

La siguiente consulta usa la CREATE PROPERTY GRAPH instrucción para crear un gráfico llamado FinGraph en el conjunto de datos graph_search. Las tablas Account y Person son las tablas de nodos. Las tablas AccountTransferAccount y PersonOwnAccount son las tablas de bordes, que representan las relaciones entre las tablas de nodos.

CREATE OR REPLACE PROPERTY GRAPH graph_search.FinGraph
NODE TABLES (graph_search.Account, graph_search.Person)
EDGE TABLES (
  graph_search.PersonOwnAccount
    SOURCE KEY (id) REFERENCES Person (id)
    DESTINATION KEY (account_id) REFERENCES Account (id)
    LABEL Owns,
  graph_search.AccountTransferAccount
    SOURCE KEY (id) REFERENCES Account (id)
    DESTINATION KEY (to_id) REFERENCES Account (id)
    LABEL Transfers
);

Buscar nodos

Las siguientes consultas muestran quién es propietario de las cuentas para viajes de placer y vacaciones. La primera consulta usa una DECLARE instrucción para crear una variable llamada similar_account. La variable se inicializa en la cláusula DEFAULT con una llamada a AI.SEARCH que busca cuentas cuyas descripciones sean más similares semánticamente a accounts for leisure travel and vacation. La consulta establece el argumento top_k en 2 en la llamada a AI.SEARCH para limitar la cantidad de resultados. La segunda consulta es una consulta de gráfico que muestra el nombre del propietario de la cuenta junto con la descripción de la cuenta.

DECLARE similar_account DEFAULT ((
SELECT ARRAY_AGG(base.id)
FROM
  AI.SEARCH(
    (SELECT * FROM graph_search.Account WHERE description_embedding IS NOT NULL),
    'description',
    'accounts for leisure travel and vacation',
    top_k => 2)
));

GRAPH graph_search.FinGraph
MATCH (p:Person)-[:Owns]->(a:Account)
WHERE a.id IN UNNEST(similar_account)
RETURN p.name, a.description;

El resultado es similar al siguiente:

+------+-----------------------------------------+
| name | description                             |
+------+-----------------------------------------+
| Dana | Saving up for travel                    |
| Alex | Fund for a refreshing tropical vacation |
+------+-----------------------------------------+

Buscar bordes

Las siguientes consultas muestran quién realizó transferencias de cuentas relacionadas con pagos de alimentos. La primera consulta usa la función AI.SEARCH para propagar una variable llamada food_transfers. Esta variable contiene el número de pedido de las transferencias cuya nota asociada es más similar semánticamente a food. La consulta establece el argumento top_k en 2 en la llamada a AI.SEARCH para limitar la cantidad de resultados. La segunda consulta es una consulta de gráfico que muestra el nombre del propietario de la cuenta junto con la nota de transferencia.

DECLARE food_transfers DEFAULT ((
SELECT ARRAY_AGG(base.order_number)
FROM
  AI.SEARCH(
    (SELECT * FROM graph_search.AccountTransferAccount WHERE notes_embedding IS NOT NULL),
    'notes',
    'food',
    top_k => 2)
));

GRAPH graph_search.FinGraph
MATCH (p:Person)-[:Owns]->(:Account)-[t:Transfers]->(:Account)
WHERE t.order_number IN UNNEST(food_transfers)
RETURN p.name, t.notes;

El resultado es similar al siguiente:

+------+---------------------------+
| name | notes                     |
+------+---------------------------+
| Dana | loved the lunch           |
| Lee  | for shared cost of dinner |
+------+---------------------------+

Crea un índice vectorial

Los índices vectoriales reducen la latencia y el costo de procesamiento de tus búsquedas. Las tablas de este instructivo son demasiado pequeñas para usar un índice vectorial. Los índices vectoriales son útiles cuando las tablas son grandes, por lo general, con millones de filas. BigQuery ofrece dos tipos de índices: IVF y TreeAH. Para obtener más información sobre cómo crear un índice y elegir un tipo, consulta Administra índices vectoriales.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

    Borra un Cloud de Confiance proyecto de:

    gcloud projects delete PROJECT_ID

¿Qué sigue?