Можно ли создать график в AGE, используя существующую таблицу в базе данных?
Я только начал с расширения Apache AGE. Я изучаю функциональные возможности графовой базы данных. Есть ли способ создать график из существующих таблиц/схем, чтобы таблица стала меткой, а атрибуты стали свойствами вершины?
create_graph('имя графика') используется для создания графиков, но я могу создать новый график только с помощью этой функции.
3 ответа
Это не так просто. Для начала надо это понять.
При выводе графовой модели из реляционной модели помните о некоторых общих рекомендациях.
Строка — это узел.
Имя таблицы — это имя метки.
Соединение или внешний ключ — это отношение.
Используя эти отношения, вы можете моделировать данные. Это если вам нужно убедиться в отсутствии ошибок.
Без примера здесь представлен динамический способ создания графика из реляционной модели.
1-й создайте функцию PostgreSQL, которая принимает аргументы. Пример, имя и должность лица. Это создаст узел.
CREATE OR REPLACE FUNCTION public.create_person(name text, title text)
RETURNS void
LANGUAGE plpgsql
VOLATILE
AS $BODY$
BEGIN
load 'age';
SET search_path TO ag_catalog;
EXECUTE format('SELECT * FROM cypher(''graph_name'', $$CREATE (:Person {name: %s, title: %s})$$) AS (a agtype);', quote_ident(name), quote_ident(title));
END
$BODY$;
2-й используйте функцию так,
SELECT public.create_person(sql_person.name, sql_person.title)
FROM sql_schema.Person AS sql_person;
Вы создали узел для каждой строки в SQL_SCHEMA.Person.
Чтобы экспортировать данные из таблицы PGSQL в график AGE, вы можете попробовать экспортировать файл CSV. Например, если у вас есть следующая таблица с именем сотрудников:
SELECT * from employees;
id | name | manager_id | title
----+------------------------+------------+------------
1 | Gabriel Garcia Marquez | | Boss
2 | Dostoevsky | 1 | Director
3 | Victor Hugo | 1 | Manager
4 | Albert Camus | 2 | Engineer
5 | Haruki Murakami | 3 | Analyst
6 | Virginia Woolf | 1 | Consultant
7 | Liu Cixin | 2 | Manager
8 | Franz Kafka | 4 | Intern
9 | Daphne Du Maurier | 7 | Engineer
Сначала экспортируйте CSV, используя следующую команду:
\copy (SELECT * FROM employees) to '/home/username/employees.csv' with csv header
Теперь вы можете импортировать это в AGE. Помните, что для графовой базы данных имя таблицы — это имя метки вершины. Столбцы таблицы являются свойствами вершины.
Сначала убедитесь, что вы создали метку для вашего графика. В этом случае имя метки будет «сотрудники», такое же, как имя таблицы.
SELECT create_vlabel('graph_name','employees');
Теперь загружаем все узлы этой метки (каждая строка из исходной таблицы — это один узел в графе).
SELECT load_labels_from_file('graph_name','employees','/home/username/employees.csv');
Теперь ваш график должен иметь все табличные данные таблицы сотрудников.
Дополнительную информацию можно найти в документации:https://age.apache.org/age-manual/master/intro/agload.html .
Я нашел следующий вопрос в stackoverflow и теперь создаю соответствующие запросы для вставки данных путем прохода по таблице.Можно ли создать график в AGE, используя существующую таблицу в базе данных?
Самая большая разница, которую я обнаружил между примером и моим решением, заключается в использовании «%1$s», «%2$s» и т. д. для подстановки в команде формата. Это позволило мне использовать int, boolean или другие поддерживаемые типы в AGE.