Amazon Neptune OpenCypher. В чем причина сообщения «Операция завершена (внутренняя ошибка)» при использовании SET после MERGE?

Я выполняю этот простой запрос в базе данных 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"    
} 

1
75
2

Ответы:

Такой запрос должен работать. Как вы отправляете запрос на Нептун?

Я только что проверил в блокноте 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, если переданный параметр еще не присутствует в базе данных.