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 papel do IAM de Editor de dados do BigQuery (roles/bigquery.dataEditor) no conjunto de dados em que você cria as tabelas de nós, de arestas e o grafo.
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
ou o modelador de gráficos visuais.
O exemplo a seguir usa a instrução CREATE PROPERTY GRAPH para criar 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 | +-------+--------+----------------+
Também é possível usar gráficos como uma fonte de dados em análise conversacional, que permite fazer perguntas em linguagem natural sobre seus gráficos. Por exemplo, você pode perguntar "Para quem Dana transferiu dinheiro e quanto foi transferido?".
Visualizar os resultados da consulta de gráfico
É possível
visualizar os resultados da consulta de gráfico
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 criar 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.