Пройдите два списка одновременно - PullRequest
3 голосов
/ 22 октября 2019

У меня есть входной CSV, который будет иметь следующий формат

email,skills,expertiseLevels
john1@xyz.com,"Oracle database;SSIS;SQL Server","5;4;3"
john2@xyz.com,"Python;Hadoop;SQL Server","1;2;4"

, где для каждой строки экспертиза уровней [i] сигнализирует об опыте человека в навыках [i]

Я хотел бы написать запрос Cypher для получения набора данных, например, так:

╒════════════════════════════════════╤═════════════════╤════════════════╕
│"email"                             │"skill"          │"expertiseLevel"│
╞════════════════════════════════════╪═════════════════╪════════════════╡
│"john1@xyz.com"                     │"Oracle database"│"5"             │
├────────────────────────────────────┼─────────────────┼────────────────┤
│"john1@xyz.com"                     │"SSIS"           │"4"             │
├────────────────────────────────────┼─────────────────┼────────────────┤
│"john1@xyz.com"                     │"SQL Server"     │"3"             │
├────────────────────────────────────┼─────────────────┼────────────────┤
│"john2@xyz.com"                     │"Python"         │"1"             │
├────────────────────────────────────┼─────────────────┼────────────────┤
│"john2@xyz.com"                     │"Hadoop"         │"2"             │
├────────────────────────────────────┼─────────────────┼────────────────┤
│"john2@xyz.com"                     │"SQL Server"     │"4"             │
└────────────────────────────────────┴─────────────────┴────────────────┘

Запрос, который у меня сейчас есть, работает, только мне было интересно, есть либолее простой способ достичь того, что я ищу:

LOAD CSV WITH HEADERS FROM 'file:///test.csv' AS line
WITH line.email AS email, split(line.skills,";") AS skills, split(line.expertiseLevels,";") AS expertiseLevels
WITH email, reduce(x = "", idx in range(0,size(skills)-1) | x + skills[idx] + ":" + expertiseLevels[idx] + ";") AS se
WITH email, split(se,";") AS skillsWithExpertise
UNWIND skillsWithExpertise AS skillWithExpertise
WITH email AS email, split(skillWithExpertise,":") AS tokens
WHERE skillWithExpertise <> ""
WITH email, tokens[0] AS skill, tokens[1] AS expertiseLevel
RETURN email, skill, expertiseLevel;

Спасибо

1 Ответ

2 голосов
/ 22 октября 2019

Это даст желаемый результат:

LOAD CSV WITH HEADERS FROM 'file:///test.csv' AS line
WITH
  line.email AS email,
  SPLIT(line.skills, ";") AS skills,
  SPLIT(line.expertiseLevels, ";") AS expertiseLevels
UNWIND RANGE(0, SIZE(skills)-1) AS i
RETURN email, skills[i] AS skill, expertiseLevels[i] AS expertiseLevel
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...