Crea y consulta un gráfico
En este documento, se muestra cómo usar BigQuery Graph para crear un gráfico con información financiera y ejecutar consultas de gráficos con el lenguaje de consulta de gráficos (GQL).
Roles obligatorios
Para obtener los permisos que
necesitas para crear y consultar gráficos,
pídele a tu administrador que te otorgue el
rol de IAM de editor de datos de BigQuery (roles/bigquery.dataEditor)
en el conjunto de datos en el que creas las tablas de nodos, las tablas de aristas y el gráfico.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Crea tablas de nodos y aristas
Los gráficos se compilan a partir de tablas de BigQuery existentes y se almacenan en conjuntos de datos.
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_db:
CREATE SCHEMA IF NOT EXISTS graph_db;
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 las transferencias entre cuentas.
Para crear estas tablas, ejecuta las siguientes
CREATE TABLE instrucciones:
CREATE OR REPLACE TABLE graph_db.Person (
id INT64,
name STRING,
birthday TIMESTAMP,
country STRING,
city STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.Account (
id INT64,
create_time TIMESTAMP,
is_blocked BOOL,
nick_name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.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_db.Person(id) NOT ENFORCED,
FOREIGN KEY (account_id) REFERENCES graph_db.Account(id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.AccountTransferAccount (
id INT64 NOT NULL,
to_id INT64 NOT NULL,
amount FLOAT64,
create_time TIMESTAMP NOT NULL,
order_number STRING,
PRIMARY KEY (id, to_id, create_time) NOT ENFORCED,
FOREIGN KEY (id) REFERENCES graph_db.Account(id) NOT ENFORCED,
FOREIGN KEY (to_id) REFERENCES graph_db.Account(id) NOT ENFORCED
);
Crea un gráfico
Para crear un gráfico, usa la
CREATE PROPERTY GRAPH instrucción.
En el siguiente ejemplo, se crea un gráfico llamado FinGraph en el conjunto de datos graph_db. Las tablas Account y Person son las tablas de nodos.
Las tablas AccountTransferAccount y PersonOwnAccount son las tablas de aristas, que representan las relaciones entre las tablas de nodos.
CREATE OR REPLACE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Account,
graph_db.Person
)
EDGE TABLES (
graph_db.PersonOwnAccount
SOURCE KEY (id) REFERENCES Person (id)
DESTINATION KEY (account_id) REFERENCES Account (id)
LABEL Owns,
graph_db.AccountTransferAccount
SOURCE KEY (id) REFERENCES Account (id)
DESTINATION KEY (to_id) REFERENCES Account (id)
LABEL Transfers
);
Inserta datos
Para actualizar los datos de un gráfico, actualiza los datos de las tablas de nodos y aristas. Cuando creas un gráfico, tus datos no se mueven ni se copian. En cambio, un gráfico actúa como una vista lógica de los datos que existen en las tablas de nodos y aristas. Las consultas de gráficos muestran resultados basados en los datos que existen en las tablas de nodos y aristas en el momento en que ejecutas la consulta.
La siguiente consulta inserta datos en las tablas que creaste:
INSERT INTO graph_db.Account
(id, create_time, is_blocked, nick_name)
VALUES
(7,"2020-01-10 06:22:20.222",false,"Vacation Fund"),
(16,"2020-01-27 17:55:09.206",true,"Vacation Fund"),
(20,"2020-02-18 05:44:20.655",false,"Rainy Day Fund");
INSERT INTO graph_db.Person
(id, name, birthday, country, city)
VALUES
(1,"Alex","1991-12-21 00:00:00","Australia","Adelaide"),
(2,"Dana","1980-10-31 00:00:00","Czech_Republic","Moravia"),
(3,"Lee","1986-12-07 00:00:00","India","Kollam");
INSERT INTO graph_db.AccountTransferAccount
(id, to_id, amount, create_time, order_number)
VALUES
(7,16,300,"2020-08-29 15:28:58.647","304330008004315"),
(7,16,100,"2020-10-04 16:55:05.342","304120005529714"),
(16,20,300,"2020-09-25 02:36:14.926","103650009791820"),
(20,7,500,"2020-10-04 16:55:05.342","304120005529714"),
(20,16,200,"2020-10-17 03:59:40.247","302290001255747");
INSERT INTO graph_db.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");

Consulta un gráfico
Para consultar un gráfico, ejecuta consultas que usen el lenguaje de consulta de gráficos.
La siguiente consulta usa una
MATCH instrucción
para encontrar información sobre a quién Dana transfirió dinero:
GRAPH graph_db.FinGraph
MATCH
(person:Person {name: "Dana"})-[own:Owns]->
(account:Account)-[transfer:Transfers]->(account2:Account)<-[own2:Owns]-(person2:Person)
RETURN
person.name AS owner,
transfer.amount AS amount,
person2.name AS transferred_to
ORDER BY person2.name;
Los resultados son similares a los siguientes:
+-------+--------+----------------+ | owner | amount | transferred_to | +-------+--------+----------------+ | Dana | 500.0 | Alex | | Dana | 200.0 | Lee | +-------+--------+----------------+
Visualiza los resultados de las consultas de gráficos
Puedes
visualizar los resultados de las consultas de gráficos
en un notebook con el comando mágico %%bigquery --graph seguido de tu
consulta de GQL. La consulta debe mostrar elementos de gráfico en formato JSON. Para visualizar los resultados de la consulta que ejecutaste en la sección anterior, ejecuta la siguiente consulta en una celda de código de notebook:
%%bigquery --graph
GRAPH graph_db.FinGraph
MATCH
p = ((person:Person {name: "Dana"})-[own:Owns]->
(account:Account)-[transfer:Transfers]->(acount2:Account)<-[own2:Owns]-(person2:Person))
RETURN
TO_JSON(p) AS path;

Borra un gráfico
Para borrar un gráfico, usa la DROP PROPERTY GRAPH instrucción. Borrar un gráfico no afecta las tablas que se usaron para definir los nodos y las aristas del gráfico. La siguiente consulta borra el gráfico FinGraph:
DROP PROPERTY GRAPH graph_db.FinGraph;
¿Qué sigue?
- Consulta la introducción a BigQuery Graph.
- Obtén más información sobre los esquemas de gráficos.
- Obtén más información para escribir consultas de gráficos.
- Obtén más información sobre el lenguaje de consulta de gráficos (GQL).
- Para obtener un instructivo sobre la detección de fraude, consulta Detección de fraude con BigQuery Graph.
- Para obtener un instructivo sobre perfiles de clientes, consulta Crea recomendaciones de 360 grados para clientes con BigQuery Graph.
- Para obtener un instructivo sobre cadenas de suministro, consulta Trazabilidad de la cadena de suministro con BigQuery Graph.