Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.
05-13-2019 09:36 PM
I have created 24 nodes which represents different hours of the day and also all other nodes required for my use case.
I want to import data with time values and create a relationship from node (s1) to time (0am). The time values certainly differ, but I want that all time within a range be mapped to a specific hour let’s say between 0:00:00 to 0:59:59 be mapped to node labelled 0 hour as shown in the image displayed below.
My difficulty is creating that range of relationships.
Thanks in advance.
Dataset
05-14-2019 12:49 PM
Here is a solution:
I created a sample .csv file with four rows with hours 0, 1, 2, and 3. In the sample data I took only the first two columns from your post.
S1,Date
com.sina.weibo,2014-04-30T0:00:37
com.sina.weibo,2014-04-30T1:00:37
com.sina.weibo,2014-04-30T2:00:37
com.sina.weibo,2014-04-30T3:00:37
<
LOAD CSV WITH HEADERS FROM 'file:/bayitaa.csv' AS line
WITH line, split(line.Date, "T") as tn
WITH line, tn, split(tn[1], ':') as tn2
MERGE (dt:Dte {dte: tn[0]})
MERGE (hr:Hrs {hr: tn2[0]})
MERGE (hr)-[:DATE]->(dt)
MERGE (s1:S1 {name: line.S1})
MERGE (s1)-[:Time {val:tn[1]}]->(hr)
;
/>
Result:
05-15-2019 02:42 AM
@ameyasoft thanks for the insight.
Based on your solution I tried to add the connections that the users made as shown in @strato.bayitaa 's initial post.
//create constraints
create constraint on (u:User) assert u.ID is unique
//our version of community code
LOAD CSV WITH HEADERS FROM 'file:/connections1.csv'AS line
WITH line, split(line.Date, "T") as tn
WITH line, tn, split(tn[1], ':') as tn2
//return tn2[1]
MERGE (dt:Date {date: tn[0]})
MERGE (hr:Hour {hr: tn2[0]})
MERGE (tm:Time {t:tn[1]})
MERGE (tm)-[:FOR]->(hr)
MERGE (dt)-[:HAS]->(hr)
MERGE (con:Connection)-[:AT]->(tm)
MERGE (s:Service {name: line.S})
MERGE (con)-[:TO]->(s)
WITH con,line
MERGE (U:User {ID:line.User})
with U,con
MERGE (U)-[:MAKES]->(con)
//MERGE (s)-[:Time {t:tn[1]}]->(hr)
It appears quite entangled. @ameyasoft can you think of a simpler way to achieve the same result?
@strato.bayitaa it may be necessary to place a unique constraint on the services nodes too for take care of different services.
05-15-2019 12:29 PM
Here is my data model:
LOAD CSV WITH HEADERS FROM 'file:/connections1.csv'AS line
WITH line, split(line.Date, "T") as tn
WITH line, tn, split(tn[1], ':') as tn2
MERGE (s:Service {name: line.S})
MERGE (dt:Date {date: tn[0]})
MERGE (s)-[:CONNECTED_DATE]->(dt)
MERGE (hr:Hour {hr: tn2[0]})
MERGE (dt)-[:HAS]->(hr)
MERGE (tm:Time {t:tn[1]})
MERGE (hr)-[:FOR]->(tm)
MERGE (U:User {ID:line.User})
MERGE (tm)-[:CONNECTED_USER]->(u)
;
I tested with my sample file with user id added.
Result:
Schema:
This way you can get all users connected to a service on any given date and hour.
I did not find code fro Connection node and hence I did not include.
Check and let me know.
05-19-2019 11:18 PM
My reason for explicitly modeling the connection node was to avoid the scenario where it would be difficult to query some information . For instance, in your proposed model, it appears that for multiple connections to different services on the same day, it will be difficult to identify which service a particular ->(hour)->(time)->(user) pattern is related to.
05-15-2019 01:01 AM
Thanks very much @ [ameyasoft]
All the sessions of the conference are now available online