Моя графовая модель содержит информацию о происхождении данных и о том, как данные перемещаются из одного столбца в другой через сопоставления столбцов в нашем инструменте ETL.Базовый шаблон с одним переходом будет выглядеть следующим образом ...
(source:Column)-[:SOURCE_OF_MAPPING]->(map:ColumnMapping)-[:TARGET_OF_MAPPING]->(target:Column)
, поэтому
- source может быть столбцом с именем "STAGING_TABLE_1.FULL_NAME",
- target может быть столбцом с именем «STAGING_TABLE_2.FULL_NAME», а
- map будет тем, что было указано в запросе выбора в потоке данных инструмента ETL,Возможно, что-то вроде «UPPER (STAGING_TABLE_1.FULL_NAME || STAGING_TABLE_1.TITLE)»
Что мне нужно сделать, это сказать, если я смотрю на конкретный целевой столбец, скажем, «DATA_MART_FACT_1.FULL_NAME»", из какого столбца происходят эти данные?
Ниже приведен запрос шифрования, который я пытаюсь использовать, но он возвращает только один скачок, то есть сопоставление источника и столбца, где целью является" DATA_MART_FACT_1.FULL_NAME ".
MATCH (source:Column)-[:SOURCE_OF_MAPPING*]->(c:ColumnMapping)-[:TARGET_OF_MAPPING*]->(target:Column)
WHERE target.name = 'DATA_MART_FACT_1.FULL_NAME'
RETURN source, target, c
Я попытался удалить имена отношений и просто пометить звездочкой в квадратных скобках, но это просто убивает мою установку neo4j (в настоящее время используется 5 ГБ памяти и 50% использования ЦП и зависаниеоколо 10 минут).Есть ограничения на все уникальные свойства.
Я знаю, что данные содержат то, что мне нужно, потому что в браузере neo4j я могу расширять узлы и следовать по пути, как я ожидал.Может ли кто-нибудь предоставить мне запрос шифра, который позволит мне это сделать?Возможно, моя графовая модель нуждается в небольшом рефакторинге с точки зрения имен отношений и направлений, чтобы это работало, и я очень рад это изучить.
Вот несколько цифр для генерации базового примера.
CREATE
(_0:`Column` {`name`:"STAGING_TABLE_1.FULL_NAME"}),
(_1:`Column` {`name`:"STAGING_TABLE_2.FULL_NAME"}),
(_2:`Column` {`name`:"DATA_MART_FACT_1.FULL_NAME"}),
(_3:`ColumnMapping` {`mappingText`:"UPPER(STAGING_TABLE_1.FULL_NAME)"}),
(_4:`ColumnMapping` {`mappingText`:"LOWER(STAGING_TABLE_2.FULL_NAME)"}),
(_0)-[:`SOURCE_OF_MAPPING`]->(_3),
(_3)-[:`MAPS_TO`]->(_1),
(_1)-[:`SOURCE_OF_MAPPING`]->(_4),
(_4)-[:`MAPS_TO`]->(_2)
Тогда запрос, который я использовал, возвращает только один прыжок
MATCH (source:Column)-[:SOURCE_OF_MAPPING*..10]->(c:ColumnMapping)-[:MAPS_TO*..10]->(target:Column) WHERE target.name = 'DATA_MART_FACT_1.FULL_NAME' RETURN source, target, c
Тогда следующий вид запроса возвращает то, что мне нужно, но отсутствует связь между первыми 2 узлами.
MATCH (source:Column)-[:SOURCE_OF_MAPPING|MAPS_TO*..10]->(n)-[:MAPS_TO]->(target:Column)
WHERE target.name = 'DATA_MART_FACT_1.FULL_NAME'
AND (n:Column or n:ColumnMapping)
RETURN *;
Конечный результат, который я хотел бы получить, заключается в следующем (обратите внимание, псевдонимы просто включены сюда для иллюстрации потока данных, и для моих требований фактические результаты не должны быть псевдонимами) ...
(c1:Column)-[:SOURCE_OF_MAPPING]->(cm1:ColumnMapping)-[:MAPS_TO]->(c2:Column)-[:SOURCE_OF_MAPPING]->(cm2:ColumnMapping)-[:MAPS_TO]-(target:Column)
и в табличном формате источник |картографирование |цель STAGING_TABLE_1.FULL_NAME |UPPER (STAGING_TABLE_1.FULL_NAME) |STAGING_TABLE_2.FULL_NAME STAGING_TABLE_2.FULL_NAME |НИЖЕ (STAGING_TABLE_2.FULL_NAME) |DATA_MART_FACT_1.FULL_NAME
Как ни странно, когда я создал интерактивный пример (сайт может быть нестабильным и иногда может потребовать несколько обновлений, прежде чем он заработает), и хотя таблица возвращает одну строку согласноВ моей локальной установке визуальное графическое представление показывает все ожидаемые узлы и отношения.
Любой и все советы приветствуются.Заранее спасибо.
РЕДАКТИРОВАТЬ: я реорганизовал сопоставление моего столбца с целевым направлением отношений столбца, чтобы сделать ядро потока естественным, как если бы это были данные, передаваемые из источника, в сопоставление столбца и в цель.Не было никаких изменений в поведении.