Neo4J Certificação

CAP é motivo de você pensar em Tirar Neo4J + MongoDB ! Claro melhorar seus projetos, resolvendo mais facilmente seus problemas computacionais.

O Exame consiste em 80 perguntas que devem ser respondidas dentro de uma hora e que você deve passar com uma pontuação de 85% ou mais para ser certificado.
As questões do exame abrangem estas áreas:
- Noções básicas do banco de dados de gráficos
- As especificidades do modelo de gráfico de propriedade
- Sintaxe do Cypher , incluindo semântica para importação, criação e consulta de dados
- Desenvolvimento de aplicações com Neo4j
- Problemas de modelagem de dados gráficos
- Neo4j em produção , incluindo armazenamento em cluster, backups e monitoramento
Certificação Neo4j
Você já fez o exame de certificação Neo4j e falhou? Você estudou, mas ficou nervoso demais para dar o mergulho e começar o exame? Ou você simplesmente pensou que conseguiria chegar lá em algum momento e não encontrou tempo?
Neste post, quero destacar os principais pontos de estudo e recursos para se concentrar, a fim de ajudá-lo a estudar e passar no exame de certificação Neo4j. Isso decorre de minhas próprias experiências para o exame e coisas que eu gostaria de saber antes de fazer o teste.
Diretrizes do Exame
Primeiro, o exame é totalmente gratuito e permite que qualquer pessoa faça o exame quantas vezes for necessário (e faça a devolução) para poder passar. Não passou a primeira vez? Não se preocupe. Basta estudar mais algumas coisas e tente novamente. Ninguém, exceto os funcionários internos do Neo4j, que estiverem monitorando os resultados do exame, saberá quantas vezes você falhou antes de passar. ;)
Se você é um testador nervoso e sente pânico a cada vez antes de um teste, eu até recomendo estudar bem e passar pelo exame uma vez, simplesmente para ter uma ideia do teste e da hora. Se você passar, ótimo. Se não, você tirou os nervos do caminho e tem um bom ponto de partida para estudar e testar o conteúdo.
Ah, sim, há um limite de tempo. Mas não tenha medo. O teste dá uma hora para completar 80 perguntas (aproximadamente 45 segundos por questão). Se você tiver tempo extra no final, você também pode voltar e rever suas respostas para qualquer uma das 80 perguntas que você não tem certeza.
A pontuação é simplesmente passar ou reprovar, e você simplesmente precisa obter 80% das perguntas corretas para passar. Isso significa que cada questão vale aproximadamente 1,25 pontos. No entanto, algumas perguntas pedem que você marque “todas as que se aplicam”, então essas questões seriam divididas pelo número de respostas corretas (que varia).
Mais uma vez, você não precisa se preocupar muito com isso. A maneira que eu gosto de pensar é que quanto mais peças a uma resposta significa que sua probabilidade de escolher uma peça correta aumenta. Qualquer porção de um ponto ainda conta, afinal! :)
Material de estudo
Agora, a seção que você provavelmente estava esperando — o que estudar. Para começar, você pode visitar as páginas do desenvolvedor do Neo4j que fornecem uma introdução ao banco de dados gráfico Neo4j, linguagem de consulta Cypher, modelagem de dados, importação / visualização de dados, drivers e guias de idiomas e outras integrações e recursos.
Uma vez que você tenha uma noção dos conceitos básicos, recomendo começar com o Manual do Neo4j Developer e o Manual de Operações .
A maior parte das perguntas do teste é extraída de ambos os manuais. Dentro desses dois lugares, eu gastaria tempo extra e focar na seção Cypher no Manual do Desenvolvedor e na seção Clustering no Manual de Operações.
As funções e exemplos do Cypher são questões comuns no exame. Saber ler sintaxes e frases diferentes ajudará você a responder a perguntas, mesmo que você não seja um assistente no idioma. Há várias perguntas que fornecem uma instrução Cypher e pedem para você escolher qual resposta tem os resultados de devolução corretos.
No lado das operações, questões sobre clustering e backups são intercaladas com uma ocasional sobre permissões ou configuração. Você pode esperar algumas transações de leitura / gravação e roteamento em um cluster, bem como algumas funções e registros.
Questões gerais sobre o modelo e componentes do banco de dados gráfico também são importantes para entender algumas questões e como base para grande parte do outro material. No geral, há uma boa mistura entre os tópicos. Embora você não precise conhecer os manuais capa a capa, eu entenderia pontos e conceitos importantes, além de fazer anotações de alguns pontos menores.
Outras maneiras de estudar
Se você não é muito leitor, eu ainda recomendo rever os manuais, mas você pode dividir isso com alguns recursos visuais. O Curso de Introdução apresenta uma introdução ao banco de dados de gráficos Neo4j e ao Cypher.
Há também alguns vídeos introdutórios no canal Neo4j no YouTube que revisam os fundamentos dos gráficos e o modelo do gráfico de propriedades, bem como alguns Cypher.
A página de Certificação Neo4j também possui ótimos links e FAQs. Aqui também é onde você vai quando você está pronto para fazer o exame. Basta clicar no botão “Entrar” no lado direito e preencher alguns campos de informação. Isso levará você a uma tela de entrada. De lá, você pode começar o exame.
Qual o proximo?
Depois de estudar e passar no exame (não importa as retomadas), não se esqueça de postar em algum lugar nas redes sociais para que o Neo4j possa comemorar com você e adicionar o título / certificação ao seu currículo! Você também receberá uma incrível camiseta “Neo4jCertified Developer”.
Além disso, você será adicionado ao Knowledge Graph como desenvolvedor certificado e fará parte do gráfico deles !
Recursos
- Guias de primeiros passos para desenvolvedores
- Manual do Desenvolvedor
- Manual de Operações
- Canal do Neo4j no YouTube
- Página de Certificação Neo4j
E muito ama uma boa certificação. Por duas vezes, quando é de graça e quadruplicado, por isso, se é uma nova tecnologia legal como o Neo4j. Caso você não esteja familiarizado com o Neo4j, é um banco de dados gráfico — um novo conceito de banco de dados que pertence à classe NoSQL de bancos de dados, ou seja, não segue um modelo relacional. Em vez disso, permite o armazenamento e o cálculo de gráficos.De uma perspectiva puramente matemática, um gráfico é formalmente definido como um par ordenado de vértices (chamados nós em Neo4j) e bordas (conhecido como relacionamentos em Neo4j). Em outras palavras, os cidadãos de primeira classe de um gráfico são ‘coisas’ e ‘conexões entre coisas’. Sem dúvida, você já pode pensar em muitos problemas que podem ser conceitualizados como problemas gráficos. De fato, para um número surpreendente de coisas que não parecem muito gráficas, é possível fazer uso de bancos de dados de gráficos. Não que você deva sempre fazê-lo (nenhuma tecnologia é uma panacéia para todos os problemas e eu ficaria muito desconfiada em alguém que implementaria séries temporais como um banco de dados gráfico), mas isso não significa que não seja possível na maioria dos casos.
O que me leva ao apelo do Neo4j. Em geral, você tinha duas abordagens para representar graficamente as operações até que os bancos de dados de gráficos entrassem na cena. Uma delas era escrever seu próprio modelo de objeto gráfico e tê-lo persistente na memória. Isso não é ruim, mas um banco de dados com certeza não é. Enquanto isso, uma alternativa é decompor o gráfico em uma tabela de vértices e suas propriedades e outra tabela de conexões entre vértices (uma matriz de adjacência) e armazená-lo em um RDBMS regular ou, um pouco mais eficientemente, em um armazenamento de valor-chave NoSQL. . Isso é um pouco melhor, mas ainda requer considerável reinvenção da roda.A força dos bancos de dados gráficos é que eles facilitam operações mais complexas, muito além do armazenamento e da recuperação de gráficos, como a busca por padrões, propriedades e caminhos. Um exemplo feito para a morte seria o famoso problema conhecido como Seis Graus de Kevin Bacon , uma versão da cultura pop dos números de Erdös : para um ator e um Kevin Bacon dentro de um gráfico com , qual é o caminho mais curto (e está abaixo de seis saltos?) para ir para ? Bancos de dados de gráficos transformam isso em uma consulta simples. O Neo4j é um dos primeiros DBs de gráficos de nível industrial, com um produto de nível corporativo que você pode implantar com segurança em um sistema de produção sem se preocupar muito com isso. Escrito em Java, é estável, rápido e tem invólucros de API suficientes para ter algum sobra para os presentes no próximo Natal. Juntamente com as APIs mais tradicionais, ele tem uma interface muito amigável e muito visual baseada na web que representa imediatamente seus resultados de consulta e uma linguagem de consulta um tanto estranha, mas não muito contra-intuitiva, conhecida como Cypher. Assim, se os problemas com grafos são o tipo de problema com o qual você lida regularmente, levar o Neo4j para dar uma volta pode ser uma boa ideia.
O que , por sua vez, me leva à certificação Neo4j. Pelo preço imbatível de $ 0,00, agora você pode se sentar para o título de Neo4j Certified Professional Ou seja, se você passar no teste de 80 perguntas com 60 minutos de tempo com uma pontuação de 80% ou mais. Agora, não deixe que o fato de ser oferecido de graça o detenha — o teste é muito feroz. É preciso um conhecimento bastante profundo do Neo4j para passar (eu estive em torno do Neo4jdesde que ele existe, e embora eu nunca tenha tentado e passado na primeira tentativa recentemente, tem sido surpreendentemente difícil até para mim! ), o limite de tempo significa que mesmo se você decidir se referir às suas anotações (não tenho certeza se isso não é trapaça — eu pessoalmente não o fiz, já que era tão demorado), você não poderá passar meramente de notas. Pior, não há exames de teste e o material de preparação é escasso (muito caro!) Treinamentos. Como tal, eu escrevi as dez coisas que gostaria de ter conhecido antes de iniciar o exame. Enquanto passei na primeira tentativa, Foi muito mais difícil do que eu esperava e eu definitivamente teria me preparado para isso de forma diferente, se eu soubesse como seria! Felizmente, você pode tentar quantas vezes quiser, sem custo, e como tal não é uma tarefa impossível,1 mas você está em uma viagem se quiser passar com uma boa pontuação. Prenda o cinto de segurança, levante a mesa da bandeja e coloque-a em uma posição totalmente ereta — é hora de comprar o Neo4j!1. Este não é um teste de usuário … é um teste de usuário e DBA.
Eu não ouvi falar de uma única loja Neo4j que tivesse um DBA Neo4j dedicado para suportar operações gráficas. O que é ok — comparado com a arte relativamente misteriosa dos DBAs RDBMS (corporativos), o Neo4j é fácil de configurar. Ao mesmo tempo, o modelo parece esperar que os usuários saibam o que estão fazendo e estejam confiantes com alguns ajustes de banco de dados próximos do metal. Boa.
A desvantagem é que cerca de um quarto das perguntas tem a ver com a configuração do Neo4j, e elas entram no âmago da questão. Espera-se, por exemplo, conhecer minúcias bastante detalhadas das configurações do servidor de alta disponibilidade da edição Enterprise .
Preste atenção às consultas do Cypher. O diabo está nos detalhes.
Se você fez tantos testes de múltipla escolha quanto você, você sabe que aprendeu uma coisa: todos seguem o mesmo padrão. Duas respostas são completas e qualquer um que tenha feito a leitura pode identificar isso. Os dois restantes são enganosamente semelhantes, no entanto, e ambos soam “corretos o suficiente”. No teste Neo4j, isso é principalmente no domínio das consultas Cypher. Várias questões envolvem um ‘problema’ sendo descrito e quatro possíveis consultas Cypher. O candidato deve então identificar quais destes, ou quais vários deles, respondem à descrição do problema. Muitas vezes, a resposta correta pode ser distinguida da incorreta por um cólon colocado de maneira correta ou um colchete fechado na ordem correta. Em caso de dúvida, dê uma olhada muito forte na sintaxe do Cypher.
Oh, por acaso? O teste faz uso relativamente liberal do (a)-[:RELATION]-(b) padrão de consulta “correspondência de ambas as direções” . Isso pega (a)-[:RELATION]->(b)b em como (b)-[:RELATION]->(a). A falta da flecha é fácil de ignorar e pode levá-lo para o caminho errado …
Desenvolver equivalência de consulta para segunda natureza.
O Python foi construído para que houvesse um e exatamente um jeito certo de fazer tudo. Tipo de. Cypher é o oposto — existem dezenas de maneiras de expressar certas relações, em grande parte devido à equivalência de relacionamentos. Como tal, esteja ciente de duas equivalências. Uma é a equivalência de parâmetros e parâmetros inline WHERE:
- PARTIDA ( a: Pessoa { nome: “John Smith” } ) — [ : REL ] -> ( b )
- RETURN a;
- PARTIDA ( a: Person ) — [ : REL ] -> ( b )
- ONDE a.name = “John Smith”
- RETURN a;
Além disso, as seguintes parciais são equivalentes, mas nem sempre:
- ( a ) — [ : FIRST_REL ] -> ( b ) <- [ : SECOND_REL ] — ( c )
- ( a ) — [ : FIRST_REL ] -> ( b )
- ( c ) — [ : SECOND_REL ] -> ( b )
Quando você vê uma declaração Cypher, você deve poder ver todas as suas formas. Recapitular pergunta: quando as declarações no segundo par NÃO são equivalentes?
O teste é projetado com base na edição Enterprise.
O Neo4j vem em dois ‘sabores’ — Comunidade e Empresa. Este último tem muitos recursos interessantes, como um modo de ‘alta disponibilidade’ distribuído e resiliente a erros. A premissa da certificação é que você é familiar — e familiar a um grau bastante alto, na verdade! — com muitos dos recursos exclusivos do Neo4j. Como tal, a menos que você tenha a sorte de ser um usuário corporativo, ele poderá se recomprar para fazer o download da versão de avaliação de 30 dias do Neo4j Enterprise.
O teste é geralmente bem escrito.
Em outras palavras, a maioria das coisas é bastante clara. Por razoavelmente claro, quero dizer que há pouca ambiguidade e usa a mesma linguagem que a referência (embora comparando questões de teste a frases que ficaram na minha cabeça e que acabei verificando após o teste, apenas palavras suficientes são alteradas para dissuadir ser trapaceiros de Ctrl + F-ing através do manual! Não há perguntas capciosas — então tente entender as perguntas da maneira mais “mundana”, “trivial” Sim, as vezes é simples assim!
TRUNCATE BRAINSPACE sql_clauses;
Um monte de cláusulas SQL tradicionais (sim, TRUNCATE é um exemplo — assim é, JOINe seus vários irmãos, que descrevem um conceito que simplesmente não existe no Neo4j) aparecem como argumentos vermelhos nas perguntas do aplicativo Cypher. Tente forçar seu cérebro a mudar de SQL para Cypher — e não caia na armadilha de pensar instintivamente nas cláusulas da solução SQL! Esqueça o SQL. E, acima de tudo, esqueça que sua lógica de seleção MATCH é algo diferente do SELECT SQL.
Tenha uma visão geral de 30.000 pés do assunto
Em particular, tenha uma visão geral de quais são suas opções para realizar determinadas tarefas. Como você pode acessar o Neo4j? Você pode ter gasto 99% do seu tempo na interface da Web e / ou interagindo usando o SDK, mas na verdade existe um shell. Como você pode fazer backup do Neo4j e o que o backup faz? Quais são as suas opções para monitorar o Neo4j? Mais uma vez, é mais provável que a maioria dos usuários pense em uma solução, talvez duas, quando há várias outras. A coisa difícil sobre este teste é que requer que você seja exaustivo — tanto em amplitude como em profundidade.
Algoritmos, estatísticas e agregação
Até onde eu sei, todo mundo recebe perguntas um pouco diferentes, mas meu teste não incluiu nada sobre os algoritmos gráficos inerentes ao Neo4j (boas notícias para filisteus pessoas que querem fazer as coisas). No entanto, incluiu alguns detalhes sobre as funções de agregação. Você faz disso o que você quer.
Pratique em Northwind, mas conheça o Movie DB como a palma da sua mão.
Fora da caixa, se você instalar a Comunidade Neo4j no seu computador, você tem dois bancos de dados de amostra que o Navegador oferece para carregar em sua instância — Moviee Northwind. O último deve ser altamente familiar para você se você tiver um passado em bancos de dados relacionais. Enquanto isso, o primeiro é um favorito do Neo4j, não menos importante para o ângulo de Kevin Bacon. Se você fez o treinamento individualizado de Getting Started (como você deve ter!), Você terá usado o MovieDB o suficiente para ter uma boa noção dele. A maioria das perguntas sobre o texto pertence ou se relaciona de alguma forma a esse gráfico, portanto, um certo grau de familiaridade pode ajudá-lo a identificar os erros mais rapidamente. Ao mesmo tempo, Northwindé um banco de dados melhor e maior, mais divertido de usar e permite consultas mais complexas. Northwind deve, portanto, ser sua ferramenta educacional, mas você deve conhecer Movie bem esse pequeno sentimento de familiaridade que pode fazer a diferença entre passar e falhar. Ah, a propósito — enquanto Getting Started é um ótimo curso, você não terá uma chance de bola de neve no inferno sem o curso de Produção . Isso acontece mesmo que você tenha preenchido todas as implantações e integrações — muito simplesmente, a amplitude do teste é estatisticamente muito provável que esteja além de suas próprias experiências, mesmo que você tenha feito, por exemplo, implantações de alta disponibilidade. No mundo real, nos especializamos — para o teste, no entanto, você deve ser um generalista.
Refcards são seus amigos.
Comece com o da Cypher . Em seguida, crie seu próprio para alta disponibilidade. Lamine-os e carregue-os, se necessário — ou tome as poucas funções ou cláusulas que são seus pontos fracos, coloque-os em post-its e coloque-os em sua parede. O que quer que ajude — a menos que você esteja escrevendo código Cypher 24/7 (nesse caso, o que você está fazendo aqui?), Que duvido que aconteça muito, simplesmente não há substituto para ver o código correto e ser capaz de sentir código bom versus código ruim. O teste é incrivelmente rápido — 80 questões ao longo de 60 minutos dão a você 45 segundos para uma execução imediata. Pelo menos 15–20 do que está lendo a pergunta, se não mais (definitivamente era mais para mim — como observado, a maioria das perguntas retribui uma leitura completa!). Realisticamente, se você quiser fazer isso e ter tempo para pensar sobre as questões mais complexas, você tem que ser capaz de discutir questões simples do Cypher(eu diria que havia cerca de 8–10 delas, valendo uma média número de pontos, embora eu (e eu me arrependo disso agora) não os contasse. Quanto o exame de certificação Neo4j está longe de ser fácil, ele é factível (ei, se eu posso fazer isso, você também pode!). Como os bancos de dados de grafos estão se tornando cada vez mais importantes devido ao reconhecimento de que eles têm o potencial de acelerar determinados cálculos em dados gráficos, juntamente com o entendimento de que muitos processos naturais estão na realidade mais próximos de interações orientadas por relacionamentos do que a imagem estática que RDBMS tradicional a lógica procura transmitir, sabendo que o Neo4j é um bem definido para você e sua equipe. Independentemente da sua intenção de obter certificação e / ou ver certificações em geral (o meu também é, em geral, mais do lado menos elogioso), o que você aprende pode ser um recurso indispensável em pesquisa e operações também. É claro que estou feliz em responder a quaisquer perguntas sobre o Neo4j e o exame de certificação, na medida em que minhas visões subjetivas possam dar uma contribuição válida para o assunto.
A API REST do Neo4j fornece uma maneira de consultar o banco de dados com o Cypher. Cypher é uma linguagem de consulta de gráficos declarativos. Veja o manual do Neo4jpara aprender mais sobre isso. Neste artigo, mostrarei como usar a API REST para executar consultas Cypher a partir do código Java.
Minha classe CypherToJson está usando Jersey para fazer chamadas REST e simple-json para codificar e decodificar o texto JSON. O código está no GitHub no repositório jgrapht-neo4j-client . Aqui você pode encontrar um Jar com a classe: jgrapht-neo4j-client-0.1.jar . Para usar a classe nos projetos do Maven, você precisa adicionar uma nova dependência e repositório ao seu pom.xml.

Cypher Refcard 3.4
https://neo4j.com/docs/cypher-refcard/current/
Cypher é uma linguagem de consulta de gráficos declarativos que permite consultas e atualizações expressivas e eficientes de um gráfico de propriedades. Cypher é uma linguagem relativamente simples, mas ainda muito poderosa. Consultas de banco de dados muito complicadas podem ser facilmente expressas através do Cypher. Isso permite que os usuários se concentrem em seu domínio, em vez de se perderem no acesso ao banco de dados. Cypher foi em grande parte uma invenção de Andrés Taylor, enquanto trabalhava para Neo4j, Inc. (anteriormente Neo Technology) em 2011. Cypher foi originalmente destinado a ser usado com o banco de dados gráfico Neo4j , mas foi aberto através do projeto openCypher em outubro de 2015 e desde então tem sido adotado por vários outros fornecedores de bancos de dados gráficos, incluindo SAP HANA eAgensGraph
Para salvar dados você tem a disposição o seguinte:
- Nó (node): unidade fundamental responsável por guardar dados de uma entidade. Um nó pode ter várias propriedades. Um nó pode ter opcionalmente tipos (labels). Por exemplo, o nó Aluno pode ter as propriedades NomeCompleto, DataNascimento e pode ter os labels Aluno, ExAluno, etc. É sempre recomendável colocar um tipo para o nó, pois ajuda muito ao fazer consultas, ao visualizar dados de consultas e também, ajuda a a criar um modelo bacana para ser mostrado para o cliente.
- Relação (relationship): unidade fundamental responsável por gravar como um nó se relaciona com outro. Também pode ter propriedades. Por exemplo, é possível criar uma relação entre um nó do tipo Aluno e um nó do tipo Disciplina e criar uma relação do tipo Cursou, com várias propriedades. Note que é possível criar mais de uma relação para um mesmo par de nodes. A característica mais importante de uma relação é que ela possui direção. Por exemplo, a relação “Cursou” só faz sentido quando vai de Aluno para Disciplina. Ela tem uma direção clara. Há certos tipos de relação que até podem ser bidirecionais na prática, mas só é possível criar relações unidirecionais. Mas claro, a consulta pode ignorar da direção caso você queira (por exemplo, tanto faz a direção do relacionamento “Conhece” entre duas pessoas numa consulta).
Para fazer consultas é os principais comandos são:
- MATCH: responsável por montar um padrão de busca para que o engine traga os nós e relações de interesse. Equivalente ao SELECT do banco de dados relacional. O padrão principal de um MATCH é ()-[]-(). Ou seja, (um nó)-[relacionado]->(com outro nó). Este padrão visual é proposital e ajuda a visualizar qual padrão você está buscando no seu grafo. É possível modificar este padrão base à vontade para satisfazer certas queries, e inclusive, é possível incluir mais nodes e relações neste padrão base. Mas a ideia é sempre a mesma: trazer nós e relações de acordo com um certo padrão.
- CREATE: responsável por criar nós e relacionamentos entre eles.
- MERGE: é utilizado para criar nós e relações apenas quando eles não existem previamente na base. Isso é particularmente útil durante importação de dados… não queremos criar 10 vezes a mesma entidade do tipo Escola na base, não é mesmo?
- SET: muda as propriedades de uma relação ou nó.
- RETURN: responsável por trazer as consultas no formato esperado para o cliente. Vale notar que saber trabalhar com o RETURN é interessante porque é possível retornar linhas ou então, um grafo completo. Além disso, é possível fazer agregações como somas, contagens, médias, concatenação em listas e muito mais.
- DELETE: responsável por apagar nó ou relação inteira. Note que pode ser que você não consiga apagar um nó que esteja envolvido em outras relações. Se quiser apagar também as relações deste nó a ser excluído, use o DETACH DELETE.
- REMOVE: remove uma propriedade de um nó ou relação. Também serve para remover um label do nó.
- WITH: como o Cypher suporta fazer consultas que usem resultados de consultas prévias, o WITH serve para expor o resultado de um MATCH anterior para um próximo MATCH ou talvez, para um RETURN um pouco mais complexo. É a chave para quebrar patterns complexos em queries menores possivelmente mais rápidas.
Criar um nó sem label:
CREATE (n {nome: “Usuário 1”})
RETORNARETURN *Retorna o valor de todas as variáveis.
RETURN n AS columnNameUse o alias para o nome da coluna de resultados.
RETURN DISTINCT nRetornar linhas exclusivas.
ORDEM POR n . propriedadeClassifique o resultado.
ORDEM POR n . propriedade DESCClassifique o resultado em ordem decrescente.
SKIP $ skipNumberIgnore vários resultados.
LIMIT $ limitNumberLimite o número de resultados.
SKIP $ skipNumber LIMIT $ limitNumberPule os resultados no topo e limite o número de resultados.
Contagem de retorno ( * )O número de linhas correspondentes. Veja Aggregating Functions para mais.
COMMATCH ( usuário ) - [ : FRIEND ] - ( amigo )
ONDE usuário . name = $ name WITH user , count ( amigo ) AS amigos WHERE amigos > 10 RETURN userA WITHsintaxe é semelhante a RETURN. Ele separa as partes da consulta explicitamente, permitindo que você declare quais variáveis serão transportadas para a próxima parte.
MATCH ( user ) - [ : FRIEND ] - ( friend )
COM usuário , count ( amigo ) AS amigos
ORDER BY amigos DESC
SKIP 1
LIMIT 3
RETURN userORDER BY, SKIPe LIMITtambém pode ser usado com WITH.
UNIÃOPARTIDA ( a ) - [ : SAIBA ] -> ( b )
RETORNO b . nome
UNION
MATCH ( a ) - [ : LOVES ] -> ( b )
RETORNO b . nomeRetorna a união distinta de todos os resultados da consulta. Os tipos e nomes de colunas de resultados precisam corresponder.
PARTIDA ( a ) - [ : SAIBA ] -> ( b )
RETORNO b . nome
UNION ALL
MATCH ( a ) - [ : LOVES ] -> ( b )
RETORNO b . nomeRetorna a união de todos os resultados da consulta, incluindo linhas duplicadas.
MERGEMERGE ( n: Pessoa { nome: $ valor } )
ON CREATE SET n . created = timestamp ( ) ON MATCH SET n . Contador = coalescem ( n . contador , 0 ) + 1 , n . accessTime = timestamp ( )Combine um padrão ou crie-o se ele não existir. Use ON CREATEe ON MATCHpara atualizações condicionais.
CORRESPONDÊNCIA ( a: Pessoa { nome: $ valor1 } ) ,
( b: Pessoa { nome: $ valor2 } )
MERGE ( a ) - [ r: AMOS ] -> ( b )MERGE localiza ou cria um relacionamento entre os nós.
MATCH ( a: Pessoa { nome: $ valor1 } )
MERGE
( a ) - [ r: KNOWS ] -> ( b: Pessoa { nome: $ valor3 } )MERGE localiza ou cria subgrafos anexados ao nó.
EXCLUIRDELETE n , rExclua um nó e um relacionamento.
DETALHE DELETE nExclua um nó e todos os relacionamentos conectados a ele.
MATCH ( n )
DETACH DELETE mExclua todos os nós e relacionamentos do banco de dados.
REMOVERREMOVER n: PessoaRemover um marcador de n.
REMOVER n . propriedadeRemova uma propriedade.
PARA CADAFOREACH ( r IN relacionamentos ( caminho ) | SET r . Marcados = verdadeiro )Execute uma operação de mutação para cada relacionamento em um caminho.
FOREACH ( valor IN coll | CREATE ( : Pessoa { nome: valor } ) )Execute uma operação de mutação para cada elemento em uma lista.
LIGARCHAMAR db . label ( ) rótulo YIELDIsso mostra uma chamada independente para o procedimento interno db.labelspara listar todos os rótulos usados no banco de dados. Observe que os argumentos do procedimento necessários são fornecidos explicitamente entre colchetes após o nome do procedimento.
CHAMAR java . armazenado . procedureWithArgsChamadas standalone podem omitir YIELDe também fornecer argumentos implicitamente via parâmetros de instrução, por exemplo, uma chamada independente que requer um argumento inputpode ser executada passando o mapa de parâmetros {input: ‘foo’}.
CHAMAR db . labels ( ) Rótulo do YIELD RETURN count ( label ) AS countChama o procedimento db.labelsinterno dentro de uma consulta maior para contar todos os rótulos usados no banco de dados. As chamadas dentro de uma consulta maior sempre exigem a passagem de argumentos e a nomeação de resultados explicitamente com YIELD.
RótulosCREATE ( n: Pessoa { nome: $ valor } )Crie um nó com rótulo e propriedade.
MERGE ( n: Pessoa { nome: $ valor } )Corresponde ou cria nó (s) exclusivo (s) com o rótulo e a propriedade.
SET n: Cônjuge : Pai: EmpregadoAdicione rótulo (s) a um nó.
CORRESPONDÊNCIA ( n: Pessoa )Corresponde os nós rotulados Person.
PARTIDA ( n: Pessoa )
ONDE n . name = $ valueCorresponde os nós rotulados Personcom o dado name.
ONDE ( n: pessoa )Verifica a existência do rótulo no nó.
rótulos ( n )Etiquetas do nó.
REMOVER n: PessoaRemova o rótulo do nó.
Listas[ 'a' , 'b' , 'c' ] lista ASListas literais são declaradas entre colchetes.
tamanho ( $ lista ) como len , $ list [ 0 ] como valorAs listas podem ser passadas como parâmetros.
intervalo ( $ firstNum , $ lastNum , $ step ) lista ASrange()cria uma lista de números ( stepé opcional), outras funções que retornam listas são: labels(), nodes(), relationships(), filter(), extract().
MATCH p = ( a ) - [ : KNOWS * ] -> ( ) RETURN relacionamentos ( p ) AS rA lista de relacionamentos que compreendem um caminho de tamanho variável pode ser retornada usando caminhos nomeados e relationships().
RETURN matchedNode . lista [ 0 ] valor AS , tamanho ( lista matchedNode . ) como lenPropriedades podem ser listas de strings, números ou booleanos.
lista [ $ idx ] valor AS , lista [ $ startIdx . . $ endIdx ] AS sliceElementos de lista podem ser acessados com idxsubscritos entre colchetes. Índices inválidos retornam null. Fatias podem ser recuperadas com intervalos de start_idxpara end_idx, cada um dos quais pode ser omitido ou negativo. Elementos fora da faixa são ignorados.
UNWIND $ nomes como nome
MATCH ( n { nome: nome } )
RETURN avg ( n . Age )Com UNWIND, qualquer lista pode ser transformada novamente em linhas individuais. O exemplo corresponde a todos os nomes de uma lista de nomes.
PARTIDA ( a )
RETURN [ ( a ) -> ( b ) ONDE b . name = 'Bob' | b . idade ]Compreensões de padrão podem ser usadas para fazer uma projeção personalizada de uma correspondência diretamente em uma lista.
CORRESPONDÊNCIA ( pessoa )
VOLTAR pessoa { . nome , . idade }Projeções de mapa podem ser facilmente construídas a partir de nós, relacionamentos e outros valores de mapa.
Listar Expressõestamanho ( lista $ )Número de elementos na lista.
inverter ( $ lista )Inverta a ordem dos elementos na lista.
head ( $ list ) , last ( $ list ) , tail ( $ list )head()retorna o primeiro, last()o último elemento da lista. tail()retorna todos menos o primeiro elemento. Todos retornam nullpara uma lista vazia.
[ x IN lista ONDE x . prop <> $ valor | x . prop ]Combinação de filtro e extrato em uma notação concisa.
extrair ( x lista IN | x . prop )Uma lista do valor da expressão para cada elemento na lista original.
filtro ( x lista IN WHERE x . prop <> $ valor )Uma lista filtrada dos elementos em que o predicado é true.
reduzir ( s = "" , x lista IN | s + x . prop )Avalie a expressão para cada elemento na lista, acumule os resultados.
Funções Matemáticasabs ( $ expr )O valor absoluto.
rand ( )Retorna um número aleatório no intervalo de 0 (inclusive) a 1 (exclusivo) [0,1). Retorna um novo valor para cada chamada. Também é útil para selecionar um subconjunto ou ordenação aleatória.
rodada ( $ expr )Arredondar para o inteiro mais próximo; ceil()e floor()encontre o próximo inteiro para cima ou para baixo.
sqrt ( $ expr )A raiz quadrada.
assinar ( $ expr )0se zero, -1se negativo, 1se positivo.
sin ( $ expr )Funções trigonométricas também incluem cos(), tan(), cot(), asin(), acos(), atan(), atan2(), e haversin(). Todos os argumentos para as funções trigonométricas devem estar em radianos, se não especificado de outra forma.
graus ( $ expr ) , radianos ( $ expr ) , pi ( )Converte radianos em graus; use radians()para o reverso e pi()para π.
log10 ( $ expr ) , log ( $ expr ) , exp ( $ expr ) , e ( )Logaritmo base 10, logaritmo natural, eà potência do parâmetro e o valor de e.
Funções de StringtoString ( expressão $ )Representação de string da expressão.
substituir ( $ original , $ search , $ replacement )Substitua todas as ocorrências de searchpor replacement. Todos os argumentos devem ser expressões.
substring ( $ original , $ begin , $ subLength )Obtenha parte de uma string. O subLengthargumento é opcional.
left ( $ original , $ subLength ) ,
right ( $ original , $ subLength )A primeira parte de uma string. A última parte da string.
trim ( $ original ) , lTrim ( $ original ) ,
rTrim ( $ original )Apare todos os espaços em branco, ou do lado esquerdo ou direito.
toUpper ( $ original ) , toLower ( $ original )Maiúsculas e Minúsculas.
dividir ( $ original , $ delimitador )Divida uma string em uma lista de strings.
reverter ( $ original )Inverta uma string.
tamanho ( $ string )Calcule o número de caracteres na string.
OperadoresGeral
DISTINCT, .,[]
Matemático
+, -, *, /, %,^
Comparação
=, <>, <, >, <=, >=, IS NULL,IS NOT NULL
boleano
AND, OR, XOR,NOT
Corda
+
Lista
+, IN, [x],[x .. y]
Expressão regular
=~
Correspondência de cordas
STARTS WITH, ENDS WITH,CONTAINS
- nulonull é usado para representar valores ausentes / indefinidos.
- nullnão é igual a null. Não conhecer dois valores não implica que eles sejam o mesmo valor. Então a expressão null = nullcede nulle não true. Para verificar se uma expressão é null, use IS NULL.
- Expressões aritméticas, comparações e chamadas de função (exceto coalesce) retornarão nullse houver algum argumento null.
- Uma tentativa de acessar um elemento ausente em uma lista ou uma propriedade que não existe produz null.
- Em OPTIONAL MATCHcláusulas, nulls será usado para partes ausentes do padrão.
Padrões( n: pessoa )Nó com Personetiqueta.
( n: Pessoa : sueco )Nó com ambos Persone Swedishrótulos.
( n: Pessoa { nome: $ valor } )Nó com as propriedades declaradas.
( ) - [ r { nome: $ valor } ] - ( )Corresponde os relacionamentos com as propriedades declaradas.
( n ) -> ( m )Relacionamento de npara m.
( n ) - ( m )Relacionamento em qualquer direção entre ne m.
( n: Pessoa ) -> ( m )Nó nmarcado Personcom relação a m.
( m ) <- [ : SABE ] - ( n )Relação de tipo KNOWSde npara m.
( n ) - [ : CONHECE | : LOVES ] -> ( m )Relação de tipo KNOWSou de tipo LOVESde npara m.
( n ) - [ r ] -> ( m )Vincule o relacionamento à variável r.
( n ) - [ * 1 . . 5 ] -> ( m )Caminho de comprimento variável entre 1 e 5 relacionamentos de npara m.
( n ) - [ * ] -> ( m )Caminho de comprimento variável de qualquer número de relacionamentos de npara m. (Veja a seção Desempenho).
( n ) - [ : CONHECE ] -> ( m { propriedade: $ valor } )Uma relação de tipo KNOWSde um nó npara um nó mcom a propriedade declarada.
shortestPath ( ( n1: Pessoa ) - [ * . . 6 ] - ( n2: Pessoa ) )Encontre um caminho mais curto.
allShortestPaths ( ( n1: Pessoa ) - [ * . . 6 ] -> ( n2: Pessoa ) )Encontre todos os caminhos mais curtos.
tamanho ( ( n ) -> ( ) -> ( ) )Conte os caminhos que correspondem ao padrão.
Mapas{ name: 'Alice' , idade: 38 anos ,
endereço: { city: 'London' , residencial: true } }Mapas literais são declarados em chaves bem como mapas de propriedades. Listas são suportadas.
COM { pessoa: { name: 'Anne' , idade: 25 } } AS p
RETURN p . pessoa . nomeAcesse a propriedade de um mapa aninhado.
MERGE ( p: Pessoa { nome: $ mapa . Nome } )
ON CREATE SET p = $ mapOs mapas podem ser passados como parâmetros e usados como mapa ou acessando chaves.
MATCH ( matchedNode: Person )
RETURN matchedNodeNós e relacionamentos são retornados como mapas de seus dados.
mapa . nome , mapa . idade , mapa . crianças [ 0 ]As entradas do mapa podem ser acessadas por suas chaves. Chaves inválidas resultam em um erro.
Predicadosn . propriedade <> $ valueUse operadores de comparação.
existe ( n . propriedade )Use funções.
n . número > = 1 AND n . número <= 10Use operadores booleanos para combinar predicados.
1 <= n . número <= 10Use operadores encadeados para combinar predicados.
n: pessoaVerifique os rótulos dos nós.
variável IS NULLVerifique se algo está null.
NÃO existe ( n . Propriedade ) OR n . propriedade = valor $A propriedade não existe ou o predicado é true.
n . propriedade = valor $Retornos de propriedades não existentes null, o que não é igual a nada.
n [ "propriedade" ] = valor $As propriedades também podem ser acessadas usando um nome de propriedade calculado dinamicamente.
n . propriedade INICIA COM 'Tob' OU
n . propriedade ENDS COM 'n' OR
n . propriedade CONTAINS 'goodie'Correspondência de strings
n . propriedade = ~ 'Tob. *'Cadeia de correspondência de expressão regular.
( n ) - [ : SABE ] -> ( m )Assegure-se de que o padrão tenha pelo menos uma correspondência.
NÃO ( n ) - [ : SABE ] -> ( m )Excluir correspondências (n)-[:KNOWS]->(m)do resultado.
n . propriedade IN [ $ value1 , $ value2 ]Verifique se um elemento existe em uma lista.
Predicados da listaall ( x IN coll WHERE existe ( propriedade x . ) )Retorna truese o predicado for truepara todos os elementos da lista.
any ( x IN coll WHERE existe ( propriedade x . ) )Retorna truese o predicado for truepelo menos um elemento na lista.
nenhum ( x EM coll ONDE existe ( x . propriedade ) )Retorna truese o predicado for falsepara todos os elementos da lista.
único ( x IN coll WHERE existe ( propriedade x . ) )Retorna truese o predicado for trueexatamente para um elemento na lista.
CASOCASO n . olhos
QUANDO 'azul' ENTÃO 1
QUANDO 'castanho' ENTÃO 2
ELSE 3
FIMRetorna o THENvalor do WHENvalor correspondente . O ELSEvalor é opcional e substituído nullse ausente.
CASO
QUANDO n . olhos = 'azul' ENTÃO 1 QUANDO n . idade < 40 ENTÃO 2 ELSE 3 ENDTHENValor de retorno do primeiro WHENpredicado para avaliação true. Os predicados são avaliados em ordem.
ÍNDICECRIAR ÍNDICE SOBRE : Pessoa ( nome )Crie um índice no rótulo Persone na propriedade name.
PARTIDA ( n: Pessoa ) ONDE n . name = $ valueUm índice pode ser usado automaticamente para a comparação de igualdade. Observe que, por exemplo toLower(n.name) = $value, não usará um índice.
PARTIDA ( n: Pessoa )
ONDE n . nome IN [ valor $ ]Um índice pode ser usado automaticamente para as INverificações de lista.
PARTIDA ( n: Pessoa )
USANDO O ÍNDICE n: Pessoa ( nome )
ONDE n . name = $ valueO uso do índice pode ser imposto quando o Cypher usa um índice sub-ótimo, ou mais de um índice deve ser usado.
DROP INDEX ON : Pessoa ( nome )Solte o índice no rótulo Persone na propriedade name.
LIMITAÇÃOCREATE CONSTRAINT ON ( p: Pessoa )
ASSERT p . nome é únicoCrie uma restrição de propriedade exclusiva no rótulo Persone na propriedade name. Se qualquer outro nó com esse rótulo for atualizado ou criado com um nameque já existe, a operação de gravação falhará. Essa restrição criará um índice de acompanhamento.
DROP CONSTRAINT ON ( p: Pessoa )
ASSERT p . nome é únicoElimine a restrição e o índice exclusivos no rótulo Persone na propriedade name.
CREATE CONSTRAINT ON ( p: Pessoa )
ASSERT existe ( p . Nome )(★) Crie uma restrição de existência de propriedade de nó no rótulo Persone na propriedade name. Se um nó com esse rótulo for criado sem a name, ou se a namepropriedade for removida de um nó existente com o Personrótulo, a operação de gravação falhará.
DROP CONSTRAINT ON ( p: Pessoa )
ASSERT existe ( p . Nome )(★) Descarte a restrição de existência da propriedade do nó no rótulo Persone na propriedade name.
CREATE CONSTRAINT ON ( ) - [ l: GOSTADO ] - ( )
ASSERT existe ( l . Quando )(★) Crie uma restrição de existência de propriedade de relacionamento no tipo LIKEDe na propriedade when. Se um relacionamento com esse tipo for criado sem a when, ou se a whenpropriedade for removida de um relacionamento existente com o LIKEDtipo, a operação de gravação falhará.
DROP CONSTRAINT ON ( ) - [ l: GOSTADO ] - ( )
ASSERT existe ( l . Quando )(★) Elimine a restrição de existência de propriedade de relacionamento no tipo LIKEDe propriedade when.
CREATE CONSTRAINT ON ( p: Pessoa )
ASSERT ( p . Firstname , p . Surname ) É NODE KEY(★) Crie uma restrição de chave de nó na etiqueta Persone propriedades firstnamee surname. Se um nó com esse rótulo for criado sem ambos firstnamee / surname ou se a combinação dos dois não for exclusiva ou se os rótulos firstnamee / ou surnameem um nó existente com o Personrótulo forem modificados para violar essas restrições, a operação de gravação falhará.
DROP CONSTRAINT ON ( p: Pessoa )
ASSERT ( p . Firstname , p . Surname ) IS NODE KEY(★) Elimine a restrição Node Key na etiqueta Persone nas propriedades firstnamee surname.
- atuaçãoUse parâmetros em vez de literais quando possível. Isso permite que a Cypher reutilize suas consultas em vez de precisar analisar e criar novos planos de execução.
- Sempre defina um limite superior para seus padrões de comprimento variável. É fácil executar uma consulta e tocar todos os nós em um gráfico por engano.
- Retorna apenas os dados de que você precisa. Evite retornar nós e relacionamentos inteiros — em vez disso, escolha os dados necessários e retorne apenas isso.
- Use PROFILE/ EXPLAINpara analisar o desempenho de suas consultas. Consulte Query Tuning para obter mais informações sobre esses e outros tópicos, como dicas do planejador.
Sintaxe
Ler estrutura de consulta[ MATCH WHERE ]
[ OPCIONAL JOGO ONDE ]
[ COM [ ORDEM POR ] [ SALTAR ] [ LIMIT ] ]
RETURN [ ORDER BY ] [ SKIP ] [ LIMIT ]
PARTIDAMATCH ( n: Person ) - [ : KNOWS ] -> ( m: Pessoa )
ONDE n . name = 'Alice'Padrões de nós podem conter rótulos e propriedades.
PARTIDA ( n ) -> ( m )Qualquer padrão pode ser usado em MATCH.
MATCH ( n { nome: 'Alice' } ) -> ( m )Padrões com propriedades do nó.
PARTIDA p = ( n ) -> ( m )Atribuir um caminho para p.
PARTIDA OPCIONAL ( n ) - [ r ] -> ( m )Padrão opcional: nulls será usado para peças ausentes.
ONDEONDE n . propriedade <> $ valueUse um predicado para filtrar. Note-se que WHEREé sempre parte de um MATCH, OPTIONAL MATCH, WITHou STARTcláusula. Colocá-lo depois de uma cláusula diferente em uma consulta alterará o que ele faz.
Estrutura de consulta somente de gravação( CRIAR [ ÚNICO ] | MERGE ) * [ SET | DELETE | REMOVE | FOREACH ] * [ RETURN [ ORDER BY ] [ SKIP ] [ LIMIT ] ]
Estrutura de consulta de leitura e gravação[ MATCH WHERE ]
[ OPCIONAL JOGO ONDE ]
[ COM [ ORDEM POR ] [ SALTAR ] [ LIMITE ] ]
( CRIAR [ ÚNICO ] | MERGE ) * [ SET | DELETE | REMOVE | FOREACH ] * [ RETURN [ ORDER BY ] [ SKIP ] [ LIMIT ] ]
CRIOCREATE ( n { nome: $ valor } )
Crie um nó com as propriedades dadas.
CREATE ( mapa n $ )Crie um nó com as propriedades dadas.
DESENROLE $ listOfMaps AS propriedades
CRIAR ( n ) SET n = propriedadesCrie nós com as propriedades dadas.
CRIAR ( n ) - [ r: CONHECE ] -> ( m )Crie um relacionamento com o tipo e direção fornecidos; ligar uma variável a ela.
CREATE ( n ) - [ : AMA { desde: $ valor } ] -> ( m )Crie um relacionamento com o tipo, direção e propriedades fornecidos.
CONJUNTOSET n . propriedade1 = $ valor1 , n . property2 = $ value2Atualize ou crie uma propriedade.
SET n = $ mapDefinir todas as propriedades Isso removerá quaisquer propriedades existentes.
SET n + = $ mapaAdicione e atualize as propriedades, mantendo as existentes.
SET n: pessoaAdiciona um rótulo Persona um nó.
ImportarCARGA CSV DE
'https://neo4j.com/docs/cypher-refcard/3.4/csv/artists.csv' AS linha
CRIE ( : Artista { name: linha [ 1 ] , ano: toInteger ( linha [ 2 ] ) } )Carregue dados de um arquivo CSV e crie nós.
CARGA CSV COM HEADERS DE
'https://neo4j.com/docs/cypher-refcard/3.4/csv/artists-with-headers.csv' AS linha
CRIE ( : Artista { name: linha . Nome , ano: toInteger ( linha . Ano ) } )Carregar dados CSV que tenham cabeçalhos.
UTILIZAÇÃO PERIÓDICA COMMIT 500
CARGA CSV COM HEADERS DE
'https://neo4j.com/docs/cypher-refcard/3.4/csv/artists-with-headers.csv' AS linha
CRIE ( : Artista { name: linha . Nome , ano : toInteger ( linha . Ano ) } )Confirme a transação atual após cada 500 linhas ao importar grandes quantidades de dados.
LOAD CSV FROM
'https://neo4j.com/docs/cypher-refcard/3.4/csv/artists-fieldterminator.csv'
como linha FIELDTERMINATOR ';'
CREATE ( : Artista { nome: linha [ 1 ] , ano: toInteger ( linha [ 2 ] ) } )Use um terminador de campo diferente, não o padrão, que é uma vírgula (sem espaços em branco ao redor).
Funçõescoalesce ( n . propriedade , $ defaultValue )A primeira não nullexpressão.
timestamp ( )Milissegundos desde a meia-noite de 1 de janeiro de 1970, em UTC.
id ( nodeOrRelationship )O ID interno do relacionamento ou nó.
toInteger ( $ expr )Converte a entrada dada em um inteiro, se possível; Caso contrário, ele retorna null.
toFloat ( $ expr )Converte a entrada dada em um número de ponto flutuante, se possível; Caso contrário, ele retorna null.
toBoolean ( $ expr )Converte a entrada dada em um booleano, se possível; Caso contrário, ele retorna null.
chaves ( $ expr )Retorna uma lista de representações de string para os nomes de propriedades de um nó, relacionamento ou mapa.
propriedades ( { expr } )Retorna um mapa contendo todas as propriedades de um nó ou relacionamento.
Funções de caminhocomprimento ( caminho )O número de relacionamentos no caminho.
nós ( caminho )Os nós no caminho como uma lista.
relacionamentos ( caminho )Os relacionamentos no caminho como uma lista.
extrair ( x nós IN ( caminho ) | x . prop )Extrair propriedades dos nós em um caminho.
Funções Espaciaispoint ( { x: $ x , y: $ y } )Retorna um ponto em um sistema de coordenadas cartesianas 2D.
point ( { latitude: $ y , longitude: $ x } )Retorna um ponto em um sistema de coordenadas geográficas 2D, com coordenadas especificadas em graus decimais.
point ( { x: $ x , y: $ y , z: $ z } )Retorna um ponto em um sistema de coordenadas cartesianas em 3D.
point ( { latitude: $ y , longitude: $ x , altura: $ z } )Retorna um ponto em um sistema de coordenadas geográficas 3D, com latitude e longitude em graus decimais e altura em metros.
distância ( ponto ( { x: $ x1 , y: $ y1 } ) , ponto ( { x: $ x2 , y: $ y2 } ) )Retorna um número de ponto flutuante representando a distância linear entre dois pontos. As unidades retornadas serão as mesmas das coordenadas do ponto, e funcionará para os pontos cartesianos 2D e 3D.
distance ( point ( { latitude: $ y1 , longitude: $ x1 } ) , point ( { latitude: $ y2 , longitude: $ x2 } ) )Retorna a distância geodésica entre dois pontos em metros. Ele também pode ser usado para pontos geográficos 3D.
Funções Temporaisdate ( "2018-04-05" )Retorna uma data analisada de uma string.
hora local ( "12: 45: 30.25" )Retorna um horário sem fuso horário.
hora ( "12: 45: 30.25 + 01: 00" )Retorna um horário em um fuso horário especificado.
localdatetime ( "2018-04-05T12: 34: 00" )Retorna um datetime sem fuso horário.
datetime ( "2018-04-05T12: 34: 00 [Europa / Berlim]" )Retorna um datetime no fuso horário especificado.
data ( { ano: { ano } , mês: { mês } , dia: { dia } } )Todas as funções temporais também podem ser chamadas com um mapa de componentes nomeados. Este exemplo retorna uma data year, monthe daycomponentes. Cada função suporta um conjunto diferente de componentes possíveis.
datetime ( { date: { date } , hora: { time } } )Tipos temporais podem ser criados combinando outros tipos. Este exemplo cria um datetimede um datee um time.
date ( { date: { datetime } , day: 5 } )Tipos temporais podem ser criados selecionando-se tipos mais complexos, assim como substituindo componentes individuais. Este exemplo cria um dateselecionando de um datetime, bem como substituindo o daycomponente.
COM data ( "2018/04/05" ) AS d
RETURN d . ano , d . mês , d . dia , d . semana , d . dia da semanaOs acessadores permitem extrair componentes de tipos temporais.
Funções de duraçãoduração ( "P1Y2M10DT12H45M30.25S" )Retorna uma duração de 1 ano, 2 meses, 10 dias, 12 horas, 45 minutos e 30,25 segundos.
duração . entre ( $ date1 , $ date2 )Retorna uma duração entre duas instâncias temporais.
COM duração ( "P1Y2M10DT12H45M" ) AS d
RETURN d . anos , d . meses , d . dias , d . horas , d . minutosRetorna 1 ano, 14 meses, 10 dias, 12 horas e 765 minutos.
COM duração ( "P1Y2M10DT12H45M" ) AS d
RETURN d . anos , d . monthsOfYear , d . dias , d . horas , d . minutesOfHourRetorna 1 ano, 2 meses, 10 dias, 12 horas e 45 minutos.
date ( "2015-01-01" ) + duration ( "P1Y1M1D" )Retorna uma data de 2016–02–02. Também é possível subtrair durações de instâncias temporais.
duração ( "PT30S" ) * 10Retorna uma duração de 5 minutos. Também é possível dividir uma duração por um número.
Funções de Relacionamentotype ( a_relationship )Representação de cadeia do tipo de relacionamento.
startNode ( a_relationship )Inicie o nó do relacionamento.
endNode ( a_relationship )Nó final do relacionamento.
id ( a_relationship )O ID interno do relacionamento.
Funções de agregaçãocontagem ( * )O número de linhas correspondentes.
contagem ( variável )O número de não nullvalores.
count ( variável DISTINCT )Todas as funções de agregação também aceitam o DISTINCToperador, o que remove as duplicatas dos valores.
coletar ( n . propriedade )Lista dos valores, ignora null.
soma ( n . propriedade )Soma valores numéricos. Funções similares são avg(), min(), max().
percentileDisc ( n . property , $ percentile )Percentil Discreto Percentil contínuo é percentileCont(). O percentileargumento é de 0.0para 1.0.
stDev ( n . propriedade )Desvio padrão para uma amostra de uma população. Para uma população inteira usar stDevP().
Parece que é a hora certa para criar uma linguagem de consulta de gráfico de propriedade padrão. Mesclando o melhor do Cypher, PGQL e G-CORE em uma linguagem de consulta mais abrangente, construída especificamente para soluções gráficas.
A comunidade de gráficos de propriedades deve se unir para criar uma linguagem de consulta de gráficos padrão, o GQL, junto com o SQL
Os dados do GRAFOS de propriedade têm uma grande presença
Amazon Netuno, Oracle PGX, Servidor Neo4j, Gráfico SAP HANA, AgensGraph (sobre PostgreSQL), Azure CosmosDB, Gráfico Redis, Gráfico do SQL Server 2017, Cypher para Apache Spark, Cypher para Gremlin, Consulta de Gráfico de Propriedades SQL, TigerGraph, Memgraph, JanusGraph, Gráfico DSE… é difícil acompanhar.
E um futuro ainda maior
Milhares de aplicativos já usam o modelo de dados gráfico avançado e intuitivo. A capacidade de expressar, encontrar e extrair relações e padrões complexos; executar algoritmos gráficos; registrar transações; e realizar análises gráficas está provando seu valor todos os dias, em todos os domínios dos negócios e da ciência. E a adoção está acelerando.
Dados relacionais tem SQL
O SQL é um dos principais alicerces da moderna tecnologia da informação. Precisamos de uma linguagem de consulta declarativa para o modelo de dados gráfico de propriedade poderosa e distinta , para desempenhar um papel semelhante.
Muitos bancos de dados e serviços gráficos não são recursos de sistemas relacionais, mas sim implementações nativas e otimizadas. E muitas consultas gráficas, quando implementadas em sistemas relacionais, não precisam ser amarradas a tabelas na superfície. Há um grande papel para as extensões de gráficos no SQL, mas é improvável que elas sejam a principal vantagem da consulta gráfica.
Os dados do gráfico de propriedade precisam de GQL
Como o SQL, o novo GQL (Graph Query Language) precisa ser um padrão da indústria.
Idiomas diferentes para produtos diferentes não ajudam ninguém. Um padrão internacional permitirá que todo o mercado de dados do gráfico cresça, para benefício mútuo de todos os fornecedores e de todos os usuários. Um idioma, um conjunto de habilidades. Uma linguagem de consulta comum concentra-se no suporte à modelagem de dados, ferramentas ETL e de visualização para dados gráficos e consultas portáteis reduzem o bloqueio de fornecedores.
Mas o GQL também precisa ser ajustado e ágil para atender às necessidades do setor de dados de gráficos de propriedades em expansão. Deve funcionar com SQL, mas não deve ser confinado pelo SQL. O GQL seria uma linguagem que complementa a API de passagem do Gremlin do Apache Tinkerpop, bem como o SPARQL para repositórios triplos RDF. Isso resulta em melhores escolhas para desenvolvedores, engenheiros de dados, cientistas de dados, CIOs e CDOs.
Três línguas
Neste momento, existem três linguagens de consulta do gráfico de propriedades que estão intimamente relacionadas.
Nós temos Cypher (do Neo4j e da comunidade openCypher ). Nós temos PGQL (da Oracle). E temos o G-CORE , uma proposta de linguagem de pesquisa do Linked Data Benchmark Council (co-autoria de pesquisadores de nível mundial da Holanda, Alemanha, Chile, EUA e equipe técnica da SAP, Oracle, Capsenta e Neo4j).
Você teria dificuldade em diferenciá-las de muitas consultas comuns a gráficos. Eles têm modelos de dados, sintaxe e semântica muito semelhantes. Cada um está à frente do jogo ou atrás do jogo de uma forma ou de outra.
Seus autores compartilham muitas ambições para a próxima geração de consultas de gráficos, como uma linguagem de consulta de gráficos composta com construção de gráficos, visualizações e gráficos nomeados; e um recurso de correspondência de padrões que se estende a consultas de caminho regulares, em que expressões regulares localizam e recuperam padrões de maneira mais concisa e flexível.
Você pode fazer a certificação clicando aqui!
