Cypher (linguagem de consulta) - Cypher (query language)

Cypher é uma linguagem de consulta de gráfico declarativa que permite uma consulta de dados expressiva e eficiente em um gráfico de propriedades.

Cypher foi em grande parte uma invenção de Andrés Taylor enquanto trabalhava para a Neo4j, Inc. (anteriormente Neo Technology) em 2011. O Cypher foi originalmente planejado para ser usado com o banco de dados de gráficos Neo4j , mas foi aberto por meio do projeto openCypher em outubro de 2015.

A linguagem foi projetada com o poder e a capacidade do SQL (linguagem de consulta padrão para o modelo de banco de dados relacional ) em mente, mas o Cypher foi baseado nos componentes e necessidades de um banco de dados construído sobre os conceitos da teoria dos grafos . Em um modelo de gráfico, os dados são estruturados como nós ( vértices em matemática e ciências de rede) e relacionamentos (arestas em matemática e ciências de rede) para focar em como as entidades nos dados estão conectadas e relacionadas umas às outras.

Modelo gráfico

Cypher é baseado no Property Graph Model , que organiza os dados em nós e arestas (chamados de “relacionamentos” no Cypher). Além desses elementos gráficos padrão de nós e relacionamentos, o modelo de gráfico de propriedade adiciona rótulos e propriedades para descrever categorias e atributos mais refinados dos dados.

Nós são as entidades no gráfico. Eles podem conter qualquer número de atributos (pares de valores-chave) chamados propriedades. Os nós podem ser marcados com zero ou mais rótulos (como tags ou categorias), representando suas diferentes funções em um domínio. Os relacionamentos fornecem conexões direcionadas, nomeadas e semanticamente relevantes entre duas entidades de nó. Um relacionamento sempre tem uma direção, um nó inicial, um nó final e exatamente um tipo de relacionamento. Como os nós, os relacionamentos também podem ter propriedades.

Os rótulos podem agrupar nós semelhantes atribuindo zero ou mais rótulos de nó. Os rótulos são como tags e permitem que você especifique certos tipos de entidades a serem procuradas ou criadas. Propriedades são pares de valores-chave com uma ligação de uma chave de string e algum valor do sistema de tipo Cypher. As consultas Cypher são montadas com padrões de nós e relacionamentos com qualquer filtragem especificada em rótulos e propriedades para criar, ler, atualizar e excluir dados encontrados no padrão especificado.

Sistema de tipo

O sistema de tipo Cypher inclui muitos dos tipos comuns usados ​​em outras linguagens de programação e consulta. Os tipos suportados incluem tipos de valor escalar, como booleano, string, número, inteiro e números de ponto flutuante. Ele também oferece suporte a tipos temporais como datetime, localdatetime, date, time, localtime e duration. Tipos de contêiner para mapas e listas estão disponíveis, junto com tipos de gráfico para nó, relacionamento e caminho e um tipo vazio.

Sintaxe

A linguagem de consulta Cypher descreve padrões de nós e relacionamentos e filtra esses padrões com base em rótulos e propriedades. A sintaxe do Cypher é baseada na arte ASCII , que é uma arte visual baseada em texto para computadores. Isso torna a linguagem muito visual e fácil de ler porque representa tanto visual quanto estruturalmente os dados especificados na consulta. Por exemplo, os nós são representados com parênteses ao redor dos atributos e informações sobre a entidade. Os relacionamentos são representados com uma seta (direcionada ou não) com o tipo de relacionamento entre colchetes.

//node
(variable:Label {propertyKey: 'propertyValue'})

//relationship
-[variable:RELATIONSHIP_TYPE]->

//Cypher pattern
(node1:LabelA)-[rel1:RELATIONSHIP_TYPE]->(node2:LabelB)

Palavras-chave

Semelhante a outras linguagens de consulta, Cypher contém uma variedade de palavras-chave para especificar padrões, padrões de filtragem e retornar resultados. Entre os mais comuns estão: MATCH, WHERE e RETURN. Eles operam de maneira um pouco diferente do SELECT e WHERE no SQL ; no entanto, eles têm finalidades semelhantes.

MATCH é usado antes de descrever o padrão de pesquisa para localizar nós, relacionamentos ou combinações de nós e relacionamentos juntos. WHERE no Cypher é usado para adicionar restrições adicionais aos padrões e filtrar quaisquer padrões indesejados. O RETURN do Cypher formata e organiza como os resultados devem ser enviados. Assim como com outras linguagens de consulta, você pode retornar os resultados com propriedades, listas, ordenação e muito mais específicos.

Usando as palavras-chave com a sintaxe de padrão mostrada acima, a consulta de exemplo abaixo irá procurar o padrão do nó (rótulo do ator e propriedade chamada nome com valor de 'Nicole Kidman') conectado por um relacionamento (tipo ACTED_IN e direção de saída longe do primeiro nó) para outro nó (rótulo do filme). A cláusula WHERE então filtra para manter apenas os padrões onde o nó Filme na cláusula de correspondência tem uma propriedade de ano que é menor que o valor do parâmetro passado. No retorno, a consulta especifica a saída dos nós do filme que se encaixam no padrão e filtrando a partir das cláusulas match e where.

MATCH (nicole:Actor {name: 'Nicole Kidman'})-[:ACTED_IN]->(movie:Movie)
WHERE movie.year < $yearParameter
RETURN movie

Cypher também contém palavras-chave para especificar cláusulas para escrever, atualizar e excluir dados. CREATE e DELETE são usados ​​para criar e excluir nós e relacionamentos. SET e REMOVE são usados ​​para definir valores para propriedades e adicionar rótulos aos nós. MERGE é usado para criar nós exclusivamente sem duplicatas. Os nós só podem ser excluídos quando não houver outros relacionamentos ainda existentes. Por exemplo:

MATCH (startContent:Content)-[relationship:IS_RELATED_TO]->(endContent:Content)
WHERE endContent.source = 'user'
OPTIONAL MATCH (endContent)-[r]-()
DELETE relationship, endContent

estandardização

Com o projeto openCypher, iniciou-se um esforço para padronizar o Cypher como a linguagem de consulta para processamento de gráficos. Como parte deste processo, houve cinco reuniões presenciais de implementadores openCypher (oCIMs). A primeira reunião ocorreu em fevereiro de 2017 na sede da SAP em Walldorf na Alemanha, coincidindo com uma reunião do Linked Data Benchmark Council. O OCIM mais recente aconteceu em Berlim, coincidindo com o Workshop do W3C sobre padrões da Web para gerenciamento de dados gráficos, em março de 2019.

Naquela reunião, houve um consenso para trabalhar para que o Cypher se tornasse uma contribuição significativa para um projeto mais amplo de uma linguagem de consulta gráfica padronizada internacional chamada GQL. Em setembro de 2019, uma proposta para um projeto de padrão GQL foi aprovada por uma votação de organismos de padrões nacionais que são membros do Comitê Técnico Conjunto 1 da ISO / IEC (responsável por padrões de tecnologia da informação). A proposta do projeto GQL afirma o seguinte:

Usar o gráfico como uma representação fundamental para modelagem de dados é uma abordagem emergente no gerenciamento de dados. Nessa abordagem, o conjunto de dados é modelado como um gráfico, representando cada entidade de dados como um vértice (também chamado de nó) do gráfico e cada relacionamento entre duas entidades como uma aresta entre vértices correspondentes. O modelo de dados gráficos tem chamado a atenção por suas vantagens exclusivas. Em primeiro lugar, o modelo gráfico pode ser um ajuste natural para conjuntos de dados que possuem estruturas hierárquicas, complexas ou mesmo arbitrárias. Essas estruturas podem ser facilmente codificadas no modelo de gráfico como arestas. Isso pode ser mais conveniente do que o modelo relacional, que requer a normalização do conjunto de dados em um conjunto de tabelas com tipos de linha fixos. Em segundo lugar, o modelo gráfico permite a execução eficiente de consultas caras ou funções analíticas de dados que precisam observar relacionamentos multi-hop entre entidades de dados, como consultas de acessibilidade, consultas de caminho mais curto ou mais barato ou análise de centralidade. Existem dois modelos de gráfico em uso: o modelo Resource Description Framework (RDF) e o modelo Property Graph. O modelo RDF foi padronizado pelo W3C em uma série de especificações. O modelo Property Graph, por outro lado, tem uma infinidade de implementações em bancos de dados de gráficos, algoritmos de gráficos e recursos de processamento de gráficos. No entanto, falta uma linguagem de consulta padronizada comum para gráficos de propriedades (como SQL para sistemas de banco de dados relacionais). O GQL é proposto para preencher esse vazio.

Veja também

  • Neo4j , um banco de dados de gráficos popular para o Cypher Query Language
  • Banco de dados gráfico , plano de fundo, modelos de dados, componentes e provedores para esta categoria de banco de dados
  • SPARQL , outra linguagem de consulta declarativa para consultar dados de gráfico
  • Gremlin , outra maneira de consultar dados gráficos
  • GQL ( Graph Query Language )

Referências