Criar e consultar um gráfico
Este documento mostra como usar o BigQuery Graph para criar um gráfico com informações financeiras e executar consultas de gráficos usando a linguagem de consulta de gráficos (GQL, na sigla em inglês).
Funções exigidas
Para receber as permissões necessárias para criar e consultar grafos, peça ao administrador para conceder a você o Editor de dados do BigQuery (roles/bigquery.dataEditor) papel do IAM no conjunto de dados em que você cria as tabelas de nós, de arestas e de grafos.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando personalizados papéis ou outros predefinidos papéis.
Criar tabelas de nós e arestas
Os gráficos são criados com base em tabelas do BigQuery e armazenados em conjuntos de dados.
Para armazenar as tabelas e o gráfico que você cria nos exemplos a seguir,
crie um conjunto de dados.
A consulta a seguir cria um conjunto de dados chamado graph_db:
CREATE SCHEMA IF NOT EXISTS graph_db;
As tabelas a seguir contêm informações sobre pessoas e contas, além das relações entre cada uma dessas entidades:
Person: informações sobre pessoas.Account: informações sobre contas bancárias.PersonOwnAccount: informações sobre quem é o proprietário de quais contas.AccountTransferAccount: informações sobre transferências entre contas.
Para criar essas tabelas, execute as seguintes
CREATE TABLE instruções:
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
);
Criar um gráfico
Para criar um gráfico, use a
CREATE PROPERTY GRAPH instrução.
O exemplo a seguir cria um gráfico chamado FinGraph no conjunto de dados graph_db. As tabelas Account e Person são as tabelas de nós.
As tabelas AccountTransferAccount e PersonOwnAccount são as tabelas de arestas, que representam relações entre as tabelas de nós.
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
);
Inserir dados
Para atualizar os dados em um gráfico, atualize os dados nas tabelas de nós e arestas. Ao criar um gráfico, os dados não são movidos nem copiados. Em vez disso, um gráfico atua como uma visualização lógica dos dados que existem nas tabelas de nós e arestas. As consultas de gráficos retornam resultados com base nos dados que existem nas tabelas de nós e arestas no momento em que você executa a consulta.
A consulta a seguir insere dados nas tabelas que você criou:
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");

Consultar um gráfico
Para consultar um gráfico, execute consultas que usam a linguagem de consulta de gráficos.
A consulta a seguir usa uma instrução
MATCH para encontrar informações sobre para quem Dana transferiu dinheiro:
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;
Os resultados são semelhantes aos seguintes:
+-------+--------+----------------+ | owner | amount | transferred_to | +-------+--------+----------------+ | Dana | 500.0 | Alex | | Dana | 200.0 | Lee | +-------+--------+----------------+
Visualizar resultados de consultas de gráficos
É possível
visualizar os resultados da consulta de gráficos
em um notebook usando o comando mágico %%bigquery --graph seguido da consulta
GQL. A consulta precisa retornar elementos de gráfico no formato JSON. Para visualizar os resultados da consulta executada na seção anterior, execute a consulta a seguir em uma célula de código do 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;

Excluir um gráfico
Para excluir um gráfico, use a DROP PROPERTY GRAPH instrução. A exclusão de um gráfico não afeta as tabelas usadas para definir os nós e as arestas do gráfico. A consulta a seguir exclui o gráfico FinGraph:
DROP PROPERTY GRAPH graph_db.FinGraph;
A seguir
- Consulte a introdução ao BigQuery Graph.
- Saiba mais sobre esquemas de gráficos.
- Saiba como escrever consultas de gráficos.
- Saiba mais sobre a linguagem de consulta de gráficos (GQL).
- Para um tutorial sobre detecção de fraudes, consulte Detecção de fraudes com o BigQuery Graph.
- Para um tutorial sobre perfis de clientes, consulte Criar recomendações de 360 graus do cliente com o BigQuery Graph.
- Para um tutorial sobre cadeias de suprimentos, consulte Rastreabilidade da cadeia de suprimentos com o BigQuery Graph.