Я выполняю этот простой запрос в базе данных Amazon Neptune, используя непосредственно API Neptune:
POST {{host}}/openCypher
Content-Type: application/json
{
"query":"MERGE (t:Test {reference: $reference}) SET t.test=$test RETURN t",
"parameters": {
"reference": "test",
"test": "100"
}
}
Но в ответ я получаю следующую ошибку:
"detailedMessage": "Operation terminated (internal error)",
"code": "InternalFailureException",
"message": "Operation terminated (internal error)"
Что дает?
Я пробовал другие примеры, устанавливающие для теста разные значения. Все они сработали, что делает проблему еще более странной. См. ниже:
{
"query":"MERGE (t:Test {reference: $reference}) SET t.test=$test RETURN t",
"parameters": {
"reference": "test",
"test": "1"
}
{
"query":"MERGE (t:Test {reference: $reference}) SET t.test=$test RETURN t",
"parameters": {
"reference": "test",
"test": true
}
{
"query":"MERGE (t:Test {reference: $reference}) SET t.test=$test RETURN t",
"parameters": {
"reference": "test",
"test": false
}
{
"query":"MERGE (t:Test {reference: $reference}) SET t.test=$test RETURN t",
"parameters": {
"reference": "test",
"test": 1
}
{
"query":"MERGE (t:Test {reference: $reference}) SET t.test=$test RETURN t",
"parameters": {
"reference": "test",
"test": 100
}
{
"query":"MERGE (t:Test {reference: $reference}) SET t.test=$test RETURN t",
"parameters": {
"reference": "test",
"test": "test"
}
Такой запрос должен работать. Как вы отправляете запрос на Нептун?
Я только что проверил в блокноте Neptune:
params = {
'reference': 'test',
'test': '100'
}
%%oc -qp params
MERGE (t:Test {reference: $reference})
SET t.test=$test
RETURN t
{'~id': 'fbaa1199-9f2b-41ef-bdfe-27776e04a0d00',
'~entityType': 'node',
'~labels': ['Test'],
'~properties': {'reference': 'test', 'test': '100'}}
Я также попробовал то же самое через AWS CLI:
!aws neptunedata execute-open-cypher-query \
--open-cypher-query "MERGE (t:Test {reference: \$reference}) SET t.test=\$test RETURN t" \
--parameters "{\"reference\": \"test\", \"test\": \"100\"}" \
--endpoint-url "https://mycluster.cluster-abcdeolo6phb.us-west-2.neptune.amazonaws.com:8182"
{
"results": [
{
"t": {
"~id": "fbaa1199-9f2b-41ef-bdfe-27776e04a0d00",
"~entityType": "node",
"~labels": [
"Test"
],
"~properties": {
"reference": "test",
"test": "100"
}
}
}
]
}
Или напрямую используя API:
awscurl -X POST https://mycluster.cluster-abcdeolo6phb.us-west-2.neptune.amazonaws.com:8182/opencypher \
--service neptune-db \
--region us-west-2 \
-d '{ \
"query":"MERGE (t:Test {reference: $reference}) SET t.test=$test RETURN t", \
"parameters": { \
"reference": "test", \
"test": "100" \
} \
}'
{
"results": [{
"t": {
"~id": "fbaa1199-9f2b-41ef-bdfe-27776e04a0d00",
"~entityType": "node",
"~labels": ["Test"],
"~properties": {
"reference": "test",
"test": "100"
}
}
}]
}
Эта ошибка исправлена в версии 1.3.2.1 Neptune Engine -> https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.3.2.1.html
Исправлена ошибка, из-за которой параметризованные запросы на мутацию вызывали исключение InternalFailureException, если переданный параметр еще не присутствует в базе данных.