SET

Предложение SET обновляет метки и свойства вершин и рёбер.

Примечание!
В YMatrix AGE базовое MPP-хранилище требует перемещения данных, что разбивает запрос на несколько срезов. Поскольку YMatrix допускает только один срез записи на транзакцию, одновременное использование нескольких операторов записи в одном запросе Cypher может вызвать ошибку:
ERROR: AssignTransactionId() called by Segment Reader process.
Поэтому минимизируйте одновременное применение нескольких операторов записи (например, CREATE, SET, REMOVE, MERGE) в рамках одного запроса Cypher.

Завершающее предложение SET

Предложение SET, за которым не следует другое предложение, является завершающим. Когда запрос Cypher завершается завершающим предложением, функция cypher() не возвращает строк результата. Однако функция cypher() по-прежнему требует списка определений столбцов. Если запрос завершается завершающим предложением, укажите в списке фиктивный столбец — соответствующая переменная не будет содержать данных.

Установка свойств

Чтобы задать свойство вершины или ребра, используйте SET.

Запрос

SELECT *
FROM cypher('graph_name', $$
   MATCH (v {name: 'Andres'})
   SET v.surname = 'Taylor'
$$) AS (v agtype);

Запрос применяет изменение, но не возвращает строк.

Результат

v
(0 строк)

Возврат обновлённой вершины

Чтобы обновить и вернуть одну вершину, используйте следующий запрос:

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (v {name: 'Andres'})
    SET v.surname = 'Taylor'
    RETURN v
$$) AS (v agtype);

Возвращает обновлённую вершину.

Результат

v
{id: 3; label: 'Person'; properties: {surname: "Taylor", name: "Andres", age: 36, hungry: true}}::vertex
(1 строка)

Удаление свойств

Хотя стандартным способом удаления свойства является REMOVE, для этой цели можно использовать и SET — например, когда значение свойства берётся из параметра.

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (v {name: 'Andres'})
    SET v.name = NULL
    RETURN v
$$) AS (v agtype);

Возвращает вершину без свойства name.

Результат

v
{id: 3; label: 'Person'; properties: {surname: "Taylor", age: 36, hungry: true}}::vertex
(1 строка)

Установка нескольких свойств в одном предложении SET

Чтобы задать несколько свойств в одном запросе, перечислите присваивания через запятую.

Запрос

SELECT *
FROM cypher('graph_name', $$
MATCH (v {name: 'Andres'})
SET v.position = 'Developer', v.surname = 'Taylor'
RETURN v
$$) AS (v agtype);

Результат

v
{"id": 281474976710661, "label": "", "properties": {"name": "Andres", "surname": "Taylor", "position": "Developer"}}::vertex
(1 строка)

Установка нескольких свойств с помощью нескольких предложений SET

Для назначения свойств также допускается использование нескольких предложений SET.

Предпочтительно задавать несколько свойств в одном предложении SET, а не распределять их по нескольким предложениям SET.

Запрос

SELECT *
FROM cypher('graph_name', $$
MATCH (v {name: 'Andres'})
SET v.position = 'Developer'
SET v.surname = 'Taylor'
RETURN v
$$) AS (v agtype);

Результат

v
{"id": 281474976710661, "label": "", "properties": {"name": "Andres", "surname": "Taylor", "position": "Developer"}}::vertex
(1 строка)