Начало работы
Подключение
Тесты производительности
Развёртывание
Использование данных
Загрузка данных
Миграция данных
Запрос данных
Управление кластерами
Обновление
Глобальное обслуживание
Масштабирование
Мониторинг
Безопасность
Лучшие практики
Технические принципы
Типы данных
Хранилище
Исполняющий движок
Потоковая обработка (Domino)
MARS3 Индексы
Расширения
Расширенные функции
Расширенный запрос
Федеративные запросы
Grafana
Резервное копирование и восстановление
Аварийное восстановление
Графовая база данных
Введение
Предложения
Функции
Расширенные темы
Руководство
Настройка производительности
Устранение неполадок
Инструменты
Параметры конфигурации
SQL-команда
Часто задаваемые вопросы
Предложение CREATE используется для создания вершин и рёбер в графе.
Примечание!
В YMatrix AGE все вершины и рёбра, созданные предложениямиCREATEв рамках одного вызова функцииcypher(), размещаются на одном и том же сегменте.
Предложение CREATE, за которым не следует ни одно другое предложение, называется завершающим. Если запрос Cypher завершается завершающим предложением CREATE, функция cypher() не возвращает строк. Однако объявление списка столбцов при вызове функции обязательно — например, AS (a agtype). При завершающем предложении CREATE можно указать любое фиктивное имя столбца; оно не будет содержать данных.
SELECT *
FROM cypher('graph_name', $$
CREATE /* Это завершающее предложение CREATE без последующих предложений */
$$) AS (a agtype);
| a |
|---|
| Возвращено 0 строк |
Используйте следующий запрос для создания одной вершины.
SELECT *
FROM cypher('graph_name', $$
CREATE (n)
$$) AS (v agtype);
Этот запрос не возвращает данных.
| v |
|---|
| (0 строк) |
Разделяйте несколько шаблонов вершин запятыми.
SELECT *
FROM cypher('graph_name', $$
CREATE (n), (m)
$$) AS (v agtype);
| a |
|---|
| Возвращено 0 строк |
Добавьте метку к вершине с помощью синтаксиса :Label.
SELECT *
FROM cypher('graph_name', $$
CREATE (:Person)
$$) AS (v agtype);
Этот запрос не возвращает данных.
| v |
|---|
| Возвращено 0 строк |
Можно одновременно создать вершину с меткой и присвоить ей свойства в одном предложении CREATE.
SELECT *
FROM cypher('graph_name', $$
CREATE (:Person {name: 'Andres', title: 'Developer'})
$$) AS (n agtype);
Этот запрос не возвращает данных.
| n |
|---|
| (0 строк) |
Создание и возврат узлов можно выполнить в одном запросе с использованием предложения RETURN.
SELECT *
FROM cypher('graph_name', $$
CREATE (a {name: 'Andres'})
RETURN a
$$) AS (a agtype);
Возвращает вновь созданную вершину.
| a |
|---|
{id: 0; label: ''; properties: {name: 'Andres'}}::vertex |
| (1 строка) |
Для создания ребра, у которого начальная и конечная вершины совпадают (startid = endid), используйте один из следующих подходов:
CREATE.MATCH нужной вершины, затем — CREATE ребра.SELECT *
FROM cypher('graph_name', $$
CREATE (a)-[e:RELTYPE]->(a)
RETURN e
$$) AS (e agtype);
| e |
|---|
{id: 0; startid: 0, endid: 0; label: 'RELTYPE'; properties: {}}::edge |
| (1 строка) |
SELECT *
FROM cypher('graph_name', $$
MATCH (a:Person)
CREATE (a)-[e:RELTYPE]->(a)
RETURN e
$$) AS (e agtype);
| e |
|---|
{id: 0; startid: 0, endid: 0; label: 'RELTYPE'; properties: {}}::edge |
| (1 строка) |
Для создания ребра между двумя существующими вершинами сначала выполните MATCH обеих вершин, затем — CREATE ребра.
SELECT *
FROM cypher('graph_name', $$
MATCH (a:Person), (b:Person)
WHERE a.name = 'Node A' AND b.name = 'Node B'
CREATE (a)-[e:RELTYPE]->(b)
RETURN e
$$) AS (e agtype);
Возвращает вновь созданное ребро.
| e |
|---|
{id: 3; startid: 0, endid: 1; label: 'RELTYPE'; properties: {}}::edge |
| (1 строка) |
Свойства рёбер задаются аналогично свойствам вершин. Значения свойств могут быть произвольными выражениями.
SELECT *
FROM cypher('graph_name', $$
MATCH (a:Person), (b:Person)
WHERE a.name = 'Node A' AND b.name = 'Node B'
CREATE (a)-[e:RELTYPE {name:a.name + '<->' + b.name}]->(b)
RETURN e
$$) AS (e agtype);
Возвращает вновь созданное ребро.
| e |
|---|
{id: 3; startid: 0, endid: 1; label: 'RELTYPE'; properties: {name: 'Node A<->Node B'}}::edge |
| (1 строка) |
При использовании CREATE с шаблоном создаются все части шаблона, отсутствующие в текущей области видимости.
SELECT *
FROM cypher('graph_name', $$
CREATE p = (andres {name:'Andres'})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael {name:'Michael'})
RETURN p
$$) AS (p agtype);
Этот запрос создаёт три вершины и два ребра, привязывает полный путь к переменной p и возвращает его.
| p |
|---|
[{"id":0; "label": ""; "properties":{"name":"Andres"}}::vertex, {"id": 3; "startid": 0, "endid": 1; "label": "WORKS_AT"; "properties": {}}::edge, {"id":1; "label": ""; "properties": {}}::vertex, {"id": 3; "startid": 2, "endid": 1; "label": "WORKS_AT"; "properties": {}}::edge, {"id":2; "label": ""; "properties": {"name":"Michael"}}::vertex]::path |
| (1 строка) |