Как запустить файл сценария cypher из терминала с помощью команды cypher-shell neo4j? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть файл сценария шифра, и я хотел бы запустить его напрямую.

Все ответы, которые я смог найти в SO, насколько мне известно, используют команду neo4j-shell, которая в моей версии (Neo4j server 3.5.5) представляется устаревшей и заменена командой cyphershell.

Используя команду sudo ./neo4j-community-3.5.5/bin/cypher-shell --help Я получил следующие инструкции.

использование: cypher-shell [-h] [-a АДРЕС] [-u ИМЯ ПОЛЬЗОВАТЕЛЯ] [-p ПАРОЛЬ] [--encryption {true, false}] [--format {auto, verbose, plain}] [--debug] [--non-interactive] [--sample-row SAMPLE-ROWS] [--wrap {true, false}] [-v] [--driver-version] [--fail-fast | --fail-at-end] [cypher]

Оболочка командной строки, где вы можете выполнить Cypher против экземпляр Neo4j. По умолчанию оболочка является интерактивной, но вы можете используйте его для написания скриптов, передавая шифр непосредственно в команде строка или путем передачи файла с выражениями шифра (требуется Powershell в Windows).

Вот мой файл, который пытается создать граф из CSV-файлов, и он взят из книги "Алгоритмы графов".

WITH "https://github.com/neo4j-graph-analytics/book/raw/master/data" AS base 
WITH base + "transport-nodes.csv" AS uri
LOAD CSV WITH HEADERS FROM uri AS row
MERGE (place:Place {id:row.id})
SET place.latitude = toFloat(row.latitude),
  place.longitude = toFloat(row.latitude),
  place.population = toInteger(row.population)

WITH "https://github.com/neo4j-graph-analytics/book/raw/master/data/" AS base 
WITH base + "transport-relationships.csv" AS uri
LOAD CSV WITH HEADERS FROM uri AS row
MATCH (origin:Place {id: row.src})
MATCH (destination:Place {id: row.dst})
MERGE (origin)-[:EROAD {distance: toInteger(row.cost)}]->(destination)

Когда я пытаюсь передать файл напрямую с помощью команды:

sudo ./neo4j-community-3.5.5/bin/cypher-shell neo_4.cypher

сначала запрашивается имя пользователя и пароль, но после ввода правильного пароля (неправильный пароль приводит к ошибке The client is unauthorized due to authentication failure.), я получаю сообщение об ошибке:

Invalid input 'n': expected <init> (line 1, column 1 (offset: 0))
"neo_4.cypher"
 ^

Когда я пытаюсь выполнить команду с помощью команды:

 sudo cat neo_4.cypher| sudo ./neo4j-community-3.5.5/bin/cypher-shell -u usr -p 'pwd'

вывод не генерируется и графика тоже нет.

Как запустить файл сценария шифра с помощью команды neo4j cypher-shell?

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Я думаю, что ключ здесь:

cypher-shell -- help

... Stuff deleted

positional arguments:
  cypher                 an optional string of cypher to execute and then exit

Это означает, что параметром является действительный шифр, а не имя файла. Таким образом, это работает:

GMc@linux-ihon:~> cypher-shell "match(n) return n;"
username: neo4j
password: ****
+-----------------------------+
| n                           |
+-----------------------------+
| (:Job {jobName: "Job01"})   |
| (:Job {jobName: "Job02"})   |

Но это не так (потому что текст "neo_4.cypher" не является допустимым запросом шифра)

cypher-shell neo_4.cypher

В справке также сказано:

example of piping a file:
  cat some-cypher.txt | cypher-shell

Итак:

cat neo_4.cypher | cypher-shell

должно работать. Возможно, ваша проблема связана с судо. Конкретно кот ... | sudo cypher-shell. Возможно, что sudo защищает cypher-shell от некоторого произвольного ввода (хотя в моей системе это не так).

Если вам действительно нужно использовать sudo для запуска cypher, попробуйте использовать следующее:

sudo cypher-shell arguments_as_needed < neo_4.cypher

Кроме того, ваш сценарий не имеет возврата, поэтому он, вероятно, не будет отображать никаких данных, но вы все равно должны увидеть сводные отчеты о загруженных записях.

Возможно, попробуйте сначала что-нибудь попроще, например, простое совпадение ... return ... query в вашем скрипте.

О, и не забудьте завершить запрос шифра точкой с запятой!

0 голосов
/ 08 мая 2019

Проблема в файле шифра: каждая строка должна заканчиваться точкой с запятой: ;.Мне все еще нужно sudo для запуска программы.

Файл, взятый из книги, похоже, на самом деле содержит и другие ошибки.

...