Pular para o conteúdo principal

TigerGraph 101: An Intro to Graph - WEBINAR - 4 episódios

 1 - https://youtu.be/qay0GJJ28W8

An introduction to graph 

How to create your first graph using TigerGraph Cloud's GraphStudio

Notebook: https://colab.research.google.com/drive/1JhYcnGVWT51KswcXZzyPzKqCoPP5htcC?usp=sharing


Slides: https://docs.google.com/presentation/d/1Ck-PKMqHKLkZfwFoYznMf53gpypoIzwPV360XoyHkYc/edit?usp=sharing


Data:

https://github.com/DanBarkus/TigerGraph-101

É possível criar o esquema global e depois usar localmente criando um grafo. 

Os jobs de carga devem ser criados mapeamento as colunas do CSV com os vértices e arestas do grafo. A seguir podem ser executados. 

As consultas são criadas, instaladas (compiladas, otimizadas) e depois executadas. A instalação cria o endpoint da consulta para execução.

As operações podem ser feitas através de um notebook em python ou no Graph Studio

2 - https://youtu.be/gNk5tTkIXJw

How graph compares to relational databases

Data Preparation and Converting a Relational Dataset to Graph 

Presentation: 

https://docs.google.com/presentation/d/1YbDMYV5yjIx-UygCkGp4OdBEYxOaoytaNzlk0tToXgk/edit?usp=sharing


Notebook / repo: 

https://github.com/DanBarkus/Patent_Graph

Vértices e Arestas ficam em memória em tempo de execução, o vértice é uma área de memória que contém o primary ID e as arestas são ponteiros para essas áreas. Atributos (chave e valor) de vértices e arestas ficam em disco. Assim se a operações percorrer um caminho no grafo são resolvidas em memória, sendo extremamente rápidas, se a operação envolver atributos então é necessário fazer acesso a disco, sendo mais lenta. 

Se um determinado atributo de um vértice for usado como filtro esse deve ser modelado como um vértice e não como um atributo. 

You CAN NOT have more than one of the same Edge type between the same two Vertices

Uma aresta de um tipo X só ocorre uma vez em um par de vértices. Ou seja, v -X> u e v -Y> u estão OK mas não pode haver outra aresta do tipo X ou Y mesmo que com atributos diferentes. O primary ID de aresta é formado por primary ID do primeiro vértice + tipo da aresta + primary ID do segundo vértice. Nesse caso não é possível modelar fatos que envolvem as mesmas entidades em contextos diferentes. Por exemplo: MBachelet -president> Chile 

Existem funções para gerar UUID (gsql_uuid_v4) em caso de entidades sem primary ID natural para os vértices / nós. 

3 - https://youtu.be/sJ5o_b_9G0s

Schema Modeling and Data Loading

Presentation: https://docs.google.com/presentation/d/1xHOoWGYtnhdzxlAKgIJB3CfR1LR0diTShoSKlyhXpB0/edit?usp=sharing


Notebook / repo: https://github.com/DanBarkus/Patent_Graph


A modelagem e carga de dados poder ser feita através da interface gráfica ou por linha de código com GSQL


Global Schema x Graph Schema: é possível aproveitar partes do global no local (grafo) e não é necessário aderir a todo o Global Schema. A modificação do grafo local é por job e a do global é por comando. Existe interdependência para realizar alterações no global que afetam o local.


Sugestão de convenção de nomes para tipo de vértices, tipo de arestas e nome de atributos.


Somente um atributo por vértice pode ser indexado para acelerar o look up. É possível definir valores default para atributos sem valor no momento da carga.


As arestas podem ser direcionadas ou não, com GSQL é possível percorrer o grafo em qualquer direção (se criar o reverse edge)


O schema deve ser publicado. 


GSQL Pattern
CREATE VERTEX <VERTEX_TYPE_NAME>(PRIMARY_ID <PRIMARY_ID_NAME> <PRIMARY_ID_TYPE>, <ATTRIBUTE_NAME> <ATTRIBUTE_TYPE>, ...)

CREATE DIRECTED|UNDIRECTED EDGE <EDGE_TYPE_NAME>(FROM <SOURCE_VERTEX_TYPE>, TO <DESTINATION_VERTEX_TYPE>, <ATTRIBUTE_NAME> <ATTRIBUTE_TYPE>, ...)


Data Mapping para carregar os dados de arquivos para o grafo. O primeiro passo é carregar os arquivos.

É possível juntar campos dos arquivos de entrada para gerar um uniqueID, caso não exista.  Cada arquivo deve ter um loading job com os mapeamentos para carregar, é possível carregar dois arquivos em paralelo mas não é o default da interface. 


É possível deletar vértices e arestas assim como dropar todos o grafo. 


VOLTAR PARA REVER O JNOTEBOOK COM O EXEMPLO

4 - https://youtu.be/dP7ammiYqQ0

Querying and Beyond

Presentation: 

https://docs.google.com/presentation/d/1d-M_mP5jIAAp3fjtHqOblQk7bbygRBBoQZRtFijPQ7g/edit?usp=sharing

Installed vs Interpreted Queries

Installed .... armazenadas, podem receber parâmetros por variáveis

  Compiled for fastest possible runtime performance
REST endpoint created for easy access
Takes 1-2 minutes to compile and install 

Interpreted ... executadas sob demanda, ad-hoc
Immediately runnable
Faster query writing iteration time
Some limited functionality

The SELECT Statement: Utilizes graph patterns to traverse edges

Sempre opera sobre um conjunto de vértices (vértices únicos). 

 

A Basic Query 

 

Most basic SELECT that you can write
Creates a vertex_set of all Inventor vertices to use as the source_vertex_set
Selects all vertices from source_vertex_set
Places all vertices in result_vertex_set
Print result_vertex_set

 

Pattern Matching

 

Patterns define edge traversals made by the SELECT statement
Follow the format: vertex_type - (edge_type) - vertex_type
Pattern: source_vertex_set :alias_vertex_set - (edge_type:edge_type_alias ) - destination_vertex_type :destination_alias

 

definir o tipo de vértice de origem, o tipo de aresta e o tipo de vértice de destino

 
Example:
start:s - (filed_application:f) - Application:a
 

Exist within the FROM clause of the SELECT statement
Aliases and edge_type do  not need to be included if not needed

 

FROM é o MATCH do Cypher

 

Pattern Matching Query: Will output all Application vertices connected to an Inventor vertex by any edge

WHERE Clause: Specifies conditions that must be met for a vertex or edge to be selected
Multiple checks can be strung together with commas between

WHERE can be used on any vertex or edge attribute

 

** Entender melhor se é possível fazer filtro e join com edge attirbute ** 

 

Global ACCUM Query
 

For each edge between an Inventor named Joseph and an Application, the @@applications SumAccum will increment by 1

 

CREATE QUERY sample() FOR GRAPH Patents 

{ SumAccum<INT> @@applications; start = {Inventor.*};  

result = SELECT s FROM start:s - () - Application:a 

WHERE s.first == “Joseph” ACCUM @@applications += 1;

 

Totalizar os nós do tipo application que estão ligados a nós com o first(name) = Joseph

 

Com um único @ antes da variável de acumulador passa a ser local accumulator e funciona como um atributo para o vértice, funcionam somente dentro do bloco de "DML"


Cláusula HAVING pode ser aplicada no resultado do accumulator


GSQL tem LIMIT, OFFSET, ORDER BY,

 

Multi-hops (path query), repeated patterns (recursão)



Comentários

Postagens mais visitadas deste blog

Connected Papers: Uma abordagem alternativa para revisão da literatura

Durante um projeto de pesquisa podemos encontrar um artigo que nos identificamos em termos de problema de pesquisa e também de solução. Então surge a vontade de saber como essa área de pesquisa se desenvolveu até chegar a esse ponto ou quais desdobramentos ocorreram a partir dessa solução proposta para identificar o estado da arte nesse tema. Podemos seguir duas abordagens:  realizar uma revisão sistemática usando palavras chaves que melhor caracterizam o tema em bibliotecas digitais de referência para encontrar artigos relacionados ou realizar snowballing ancorado nesse artigo que identificamos previamente, explorando os artigos citados (backward) ou os artigos que o citam (forward)  Mas a ferramenta Connected Papers propõe uma abordagem alternativa para essa busca. O problema inicial é dado um artigo de interesse, precisamos encontrar outros artigos relacionados de "certa forma". Find different methods and approaches to the same subject Track down the state of the art rese...

Knowledge Graph Embedding with Triple Context - Leitura de Abstract

  Jun Shi, Huan Gao, Guilin Qi, and Zhangquan Zhou. 2017. Knowledge Graph Embedding with Triple Context. In Proceedings of the 2017 ACM on Conference on Information and Knowledge Management (CIKM '17). Association for Computing Machinery, New York, NY, USA, 2299–2302. https://doi.org/10.1145/3132847.3133119 ABSTRACT Knowledge graph embedding, which aims to represent entities and relations in vector spaces, has shown outstanding performance on a few knowledge graph completion tasks. Most existing methods are based on the assumption that a knowledge graph is a set of separate triples, ignoring rich graph features, i.e., structural information in the graph. In this paper, we take advantages of structures in knowledge graphs, especially local structures around a triple, which we refer to as triple context. We then propose a Triple-Context-based knowledge Embedding model (TCE). For each triple, two kinds of structure information are considered as its context in the graph; one is the out...

KnOD 2021

Beyond Facts: Online Discourse and Knowledge Graphs A preface to the proceedings of the 1st International Workshop on Knowledge Graphs for Online Discourse Analysis (KnOD 2021, co-located with TheWebConf’21) https://ceur-ws.org/Vol-2877/preface.pdf https://knod2021.wordpress.com/   ABSTRACT Expressing opinions and interacting with others on the Web has led to the production of an abundance of online discourse data, such as claims and viewpoints on controversial topics, their sources and contexts . This data constitutes a valuable source of insights for studies into misinformation spread, bias reinforcement, echo chambers or political agenda setting. While knowledge graphs promise to provide the key to a Web of structured information, they are mainly focused on facts without keeping track of the diversity, connection or temporal evolution of online discourse data. As opposed to facts, claims are inherently more complex. Their interpretation strongly depends on the context and a vari...