Начало работы
Подключение
Тесты производительности
Развёртывание
Использование данных
Загрузка данных
Миграция данных
Запрос данных
Управление кластерами
Обновление
Глобальное обслуживание
Масштабирование
Мониторинг
Безопасность
Лучшие практики
Технические принципы
Типы данных
Хранилище
Исполняющий движок
Потоковая обработка (Domino)
MARS3 Индексы
Расширения
Расширенные функции
Расширенный запрос
Федеративные запросы
Grafana
Резервное копирование и восстановление
Аварийное восстановление
Графовая база данных
Введение
Предложения
Функции
Расширенные темы
Руководство
Настройка производительности
Устранение неполадок
Инструменты
Параметры конфигурации
SQL-команда
Часто задаваемые вопросы
Предикаты — это булевы функции, возвращающие true или false для заданного набора входных значений. Чаще всего они используются в предложении WHERE запросов для фильтрации подграфов.
exists(property)Функция exists(property) возвращает true, если указанное свойство существует у вершины, ребра или карты. Эта функция отличается от предложения EXISTS в подзапросе.
Синтаксис: exists(property)
Возвращаемое значение:
Булево значение типа agtype.
Параметры:
| Имя | Описание |
|---|---|
property |
Свойство вершины или ребра. |
Запрос:
SELECT *
FROM cypher('graph_name', $$MATCH (n)
WHERE exists(n.surname)
RETURN n.first_name, n.last_name
$$) as (first_name agtype, last_name agtype);
Результат:
| first_name | last_name |
|---|---|
| 'John' | 'Smith' |
| 'Patty' | 'Patterson' |
EXISTS(path)Функция EXISTS(path) возвращает true, если указанный шаблон пути совпадает хотя бы с одним путём в графе.
Примечание!
Известное ограничение подзапросовEXISTS
В YMatrix AGE подзапросEXISTS, ссылающийся на переменные из внешней области видимости, может завершиться ошибкой:
ERROR: could not devise a query plan for the given query.
- Условие возникновения:
Ошибка возникает, когдаEXISTSиспользуется в предложенииWHEREконструкцииOPTIONAL MATCH, а шаблонEXISTSссылается на переменную, объявленную до этогоOPTIONAL MATCH.- Примеры:
Завершается ошибкой:MATCH (a:A) WITH a OPTIONAL MATCH (a)-[:incs]->(c) WHERE EXISTS((c)<-[:incs]-(a)) RETURN a, c;
Выполняется успешно:MATCH (a:A) WITH a OPTIONAL MATCH (a)-[:incs]->(c) WHERE EXISTS((c)<-[:incs]-()) RETURN a, c.- Причина:
AGE транслируетOPTIONAL MATCHв SQL-конструкциюLATERAL LEFT JOIN, аEXISTS— в SQL-подзапросEXISTS SubLink. При ссылкеEXISTSна переменную из внешней области возникает глубоко вложенная структура:LATERAL-подзапрос, содержащийEXISTS SubLink, который ссылается на переменные на два уровня выше. Распределённый планировщик запросов YMatrix не может построить корректный план выполнения для таких многоранговых ссылок на внешние переменные — это ограничение базового распределённого планировщика.- Рекомендуемые обходные решения:
- Объедините шаблон
EXISTSнепосредственно в паттернOPTIONAL MATCH:
MATCH (a:A) WITH a OPTIONAL MATCH (a)-[:incs]->(c)<-[:incs]-(a) RETURN a, c;- Разделите запрос на несколько шагов, чтобы избежать ссылки на внешние переменные внутри
EXISTSв рамкахOPTIONAL MATCH:
MATCH (a:A) WITH a OPTIONAL MATCH (a)-[:incs]->(c) WITH a, c WHERE c IS NULL OR EXISTS((c)<-[:incs]-()) RETURN a, c.
Примечание!
Область действия ограничения: Это ограничение действует только при одновременном выполнении всех следующих условий:
- Используется
OPTIONAL MATCH(порождающийLATERAL LEFT JOIN);EXISTSприменяется в его предложенииWHERE;- Шаблон
EXISTSссылается на переменную из внешней области видимости данногоOPTIONAL MATCH.
EXISTSв обычных конструкцияхMATCH, проверки существования свойств (EXISTS(n.prop)) и шаблоныEXISTS, не ссылающиеся на внешние переменные, работают без ограничений.
Запрос:
SELECT *
FROM cypher('graph_name', $$
MATCH (n)
WHERE exists((n)-[]-({name: 'Willem Defoe'}))
RETURN n.full_name
$$) as (full_name agtype);
Результат:
| full_name |
|---|
| 'Toby Maguire' |
| 'Tom Holland' |