Можно ли создать график в AGE, используя существующую таблицу в базе данных?

Я только начал с расширения Apache AGE. Я изучаю функциональные возможности графовой базы данных. Есть ли способ создать график из существующих таблиц/схем, чтобы таблица стала меткой, а атрибуты стали свойствами вершины?

create_graph('имя графика') используется для создания графиков, но я могу создать новый график только с помощью этой функции.

3 ответа

Это не так просто. Для начала надо это понять.

При выводе графовой модели из реляционной модели помните о некоторых общих рекомендациях.

  1. Строка — это узел.

  2. Имя таблицы — это имя метки.

  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.

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