Что такое оператор SQL для предложения MATCH в apacheAGE?

Если я правильно понимаю, каждый запрос, отправляемый при использовании расширения apacheAGE, анализируется, анализируется и переписывается, и, наконец, это оператор SQL, который выполняется в поддерживаемом процессе для postgres, чтобы фактически выполнить команду. Когда мы используем простой запрос соответствия, такой как

SELECT * FROM cypher('graph', $$ MATCH (u) return u $$) as (u agtype);

что такое оператор SQL, который запускает postgres, чтобы фактически получить правильные вершины?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
149
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Ответ принят как подходящий

Да, вы правы насчет первой части и поняли ее точно так же.

Однако во второй части я думаю, что оператор для простого запроса «Match (u) return u» будет выглядеть примерно так:

SELECT * FROM vertice_table;

Здесь vertice_table — это имя таблицы в базе данных PostgreSQL, содержащей вершины графа. И Select * будет использоваться для получения всех столбцов.

Надеюсь, это поможет!

Оператор sql, который будет сгенерирован, зависит от того, как граф представлен в postgres.

Это может быть что-то вроде этого:

SELECT * FROM graph_vertices WHERE label = 'u';

Это всего лишь упрощенный пример, и фактическое утверждение, конечно, может быть довольно сложным.

Да, на самом деле вы правы, когда мы запускаем запрос с использованием расширения Apache AGE, он анализирует запрос и анализирует его, а затем переписывает в оператор SQL.

Расширение переводит этот шифрованный запрос и результат

SELECT graph_properties FROM 'graph_name'  

Поэтому, когда мы запускаем это, на самом деле выполняется SQL-запрос на бэкэнде и возвращаются свойства графика.

Если вы хотите получить возраст человека, используя предложение WHERE с некоторыми критериями, вы можете написать такой запрос:

SELECT * FROM graph_vertices WHERE label = 'u' AND properties->>'age' > '15';

PostgreSQL будет искать таблицу вершин, а затем собирать (в данном случае с помощью соединений) и возвращать вершины в соответствии с критериями и запросом, которые вы хотели. Например, для вашего запроса оператор SQL будет похож на что-то вроде:

SELECT * FROM graph._ag_label_vertex AS u
JOIN graph._ag_label_edges AS e
ON u.id = e.start

Переведенный оператор SQL будет выглядеть примерно так:

SELECT data FROM vertices

Предположим, что граф хранится в таблице с именем vertices со столбцом с именем data, который содержит свойства вершин.

Оператор SQL извлечет все строки из таблицы vertices и вернет столбец данных, который содержит свойства вершин, соответствующие выходным данным шифрованного запроса.

В основном использует обычные операторы SQL…

Например MATCH (u:persons) RETURN u

Эквивалентно

SELECT * FROM persons

А также там, где используется предложение WHERE, та же идея реализована в операторах SQL... и, конечно, это может усложниться в зависимости от отношений..

Да, это правильно, запрос проходит через эти этапы, пока в конце не станет оператором sql. В этом конкретном примере вы показали, что шифрованный запрос предназначен для извлечения всех вершин, которые будут переведены в оператор sql, который выглядит примерно так. : SELECT * FROM vertices_table, это оператор sql, используемый postgres для получения всех вершин. Надеюсь, это ответит на ваш вопрос.

Да, именно так работает расширение Apache Age. Существует эквивалентный SQL-запрос для каждого запроса, который вы пишете в Apache AGE. Что касается вопроса, связанного с запросом выше Apache AGE, следующие запросы SQL будут эквивалентны,

SELECT * FROM graph_table WHERE label = 'u';

Теперь, когда вы посмотрите на приведенный выше запрос, graph_table представляет собой таблицу, в которой хранятся данные графика, а информация о метках узлов представлена ​​меткой столбца. Предложение WHERE фильтрует строки на основе значения метки «u», извлекая вершины, соответствующие указанной метке, и на основе характера запроса, заданного в Apache AGE, оно может создавать более сложные эквивалентные SQL-запросы.

SELECT * FROM cypher('graph_name', $$
    MATCH (:Person {name: 'Mark Smith'})-[]-(movie:Movie)
    RETURN movie.title
$$) as (title agtype);

Приведенный выше код возвращает все вершины, связанные с человеком по имени «Марк Смит», которые помечены как Movie.

Другие вопросы по теме