PGQL
PGQL | |
---|---|
Класс языка | язык графовых запросов |
Разработчик | Oracle |
Сайт | pgql-lang.org (англ.) |
PGQL — это реализация языка графовых запросов, разработанная и реализованная компанией Oracle, и при этом доступная как спецификация с открытым исходным кодом[1] вместе с программным обеспечением для анализа JVM[2][3].
Описание
[править | править код]PGQL сочетает в себе знакомый синтаксис SQL SELECT, включая выражения SQL и сортировку и агрегацию результатов, с языком сопоставления шаблонов, очень похожим на язык Cypher. Он позволяет запрашивать спецификацию графа и включает в себя средство для макросов для захвата «представлений шаблонов» или именованных подшаблонов. Он не поддерживает операции вставки или обновления, будучи разработанным в первую очередь для аналитической среды, такой как продукт PGX от Oracle. PGQL также был реализован в «Oracle Big Data Spatial and Graph» и в исследовательском проекте PGX.D/Async[4].
Пример использования
[править | править код]Создание графа, связывающего людей (таблица Person), компании (таблица Company) и счета (таблица Account)[5]:
CREATE PROPERTY GRAPH financial_transactions
VERTEX TABLES (Persons LABEL Person PROPERTIES ( name ),
Companies LABEL Company PROPERTIES ( name ),
Accounts LABEL Account PROPERTIES ( number ))
EDGE TABLES (
Transactions
SOURCE KEY ( from_account ) REFERENCES Accounts ( number )
DESTINATION KEY ( to_account ) REFERENCES Accounts ( number )
LABEL transaction PROPERTIES ( amount ),
Accounts AS PersonOwner
SOURCE KEY ( number ) REFERENCES Accounts ( number )
DESTINATION Persons
LABEL owner NO PROPERTIES,
Accounts AS CompanyOwner
SOURCE KEY ( number ) REFERENCES Accounts ( number )
DESTINATION Companies
LABEL owner NO PROPERTIES,
Persons AS worksFor
SOURCE KEY ( id ) REFERENCES Persons ( id )
DESTINATION Companies
NO PROPERTIES)
SELECT, показывающий владельцев счетов, которые совершали транзакции с человеком по имени Nikita:
SELECT owner.name AS account_holder, SUM(t.amount) AS total_transacted_with_Nikita
FROM MATCH (
(p:Person) <-[:owner]- (account1:Account),
(account1) -[t:transaction]- (account2), /* match both incoming and outgoing transactions */
(account2:Account) -[:owner]-> (owner:Person|Company)
) ON financial_transactions
WHERE p.name = 'Nikita'
GROUP BY owner
Или используя PGQL со стандартным синтаксисом SQL:
SELECT account_holder, SUM(amount) AS total_transacted_with_Nikita
FROM GRAPH_TABLE ( financial_transactions
MATCH (p IS Person) <-[IS owner]- (account1 IS Account),
(account1) -[t IS transaction]- (account2), /* match both incoming and outgoing transactions */
(account2 IS Account) -[IS owner]-> (owner IS Person|Company)
WHERE p.name = 'Nikita'
COLUMNS (owner.name AS account_holder, t.amount)
)
GROUP BY account_holder
Результат:
account_holder | total_transacted_with_Nikita |
---|---|
Camille | 1000 |
Oracle | 4501 |
Примечания
[править | править код]- ↑ PGQL (англ.). pgql.org. Дата обращения: 6 октября 2019.
- ↑ van Rest, Oskar. PGQL: A property graph query language // Proceedings of the Fourth International Workshop on Graph Data Management Experiences and Systems : [англ.]. — ACM, June 2016. — P. 1–6. — ISBN 978-1-4503-4780-8. — doi:10.1145/2960414.2960421.
- ↑ van Rest, Oskar PGQL is an SQL-based query language for the Property Graph data model. (англ.). pgql.org (сентябрь 2015). Дата обращения: 3 ноября 2019.
- ↑ Roth, Nicholas P. PGX.D/Async: A Scalable Distributed Graph Pattern Matching Engine // Proceedings of the Fifth International Workshop on Graph Data-management Experiences & Systems : [англ.]. — ACM, 2017. — P. 1–6. — ISBN 978-1-4503-5038-9. — doi:10.1145/3078447.3078454.
- ↑ PGQL | Property Graph Query Language (англ.). pgql-lang.org. Дата обращения: 5 ноября 2024.
Ссылки
[править | править код]- Официальный сайт языка PGQL
- Официальная документация по языку PGQL
- Сравнение Cypher, PGQL и G-Core.