I see two issues with that approach: 1) Blueprints thrown an error if id is
not provided, and 2) inability to reference vertices in the same
transaction if we don't provide a blueprints-specific ID.
In other words, if we don't provide a unique id in addVertex, we get a
different error: Vertex with id already exists: Class:user
>
> gremlin> new File("/Users/sandro/vertices.csv").each({ line ->
> gremlin> (username, age) = line.split(",")
> gremlin> user = bg.addVertex("Class:user")
> gremlin> ElementHelper.setProperties(user,
> ["username":username,"age":age.toInteger()])
> gremlin> })
> Vertex with id already exists: Class:user
> Display stack trace? [yN]
Also, there will be no way for us to quickly look up the needed vertices by
ID, as in the following code:
> new File("/Users/sandro/edges.csv").each({ line ->
> (source, label, target) = line.split(",")
> v1 = bg.getVertex(sourceId)
> v2 = bg.getVertex(targetId)
>
> bg.addEdge(null, v1, v2, label,[weight:0.75f])
> })
On Monday, February 17, 2014 4:30:03 PM UTC-8, Lvc@ wrote:
>
> Ok, id is reserver in Blueprints, try using another field name.
>
> Lvc@
>
>
>
> On 18 February 2014 01:12, Sandro <[email protected] <javascript:>> wrote:
>
>> Luca,
>>
>> I tried to set the Id property in a subsequent call, but received an
>> error message stating something to the effect of "Id is a readonly field."
>>
>> Here is the exact error:
>>
>> gremlin> new File("/Users/sandro/vertices.csv").each({ line ->
>>>
>>> gremlin> (username, age) = line.split(",")
>>>
>>> gremlin> user = bg.addVertex("Class:user")
>>>
>>> gremlin> ElementHelper.setProperties(user,
>>> ["Class":"user",id:username,"username":username,"age":age.toInteger()])
>>>
>>> gremlin> })
>>>
>>> Property key is reserved for all elements: id
>>>
>>> Display stack trace? [yN]
>>>
>> Sandro
>>
>>
>> On Monday, February 17, 2014 3:32:50 PM UTC-8, Lvc@ wrote:
>>
>>> Can you setup the id as field after having indexed it?
>>>
>>> Lvc@
>>>
>>>
>>>
>>> On 18 February 2014 00:28, Sandro <[email protected]> wrote:
>>>
>>>> Thank you for creating an issue for CREATE LINK functionality. Will
>>>> retry when it will become available.
>>>>
>>>> As workaround, we have been trying to upload the data using Gremlin, by
>>>> following this example: http://stackoverflow.com/
>>>> questions/19006616/how-to-import-a-csv-file-into-titan-graph-database
>>>>
>>>> Sample code:
>>>>
>>>>
>>>>
>>>>> g = new OrientGraph("remote:localhost/cars")
>>>>> bg = new BatchGraph(g, VertexIDType.STRING, 1000)
>>>>> new File("/Users/sandro/vertices.csv").each({ line ->
>>>>> (username, age) = line.split(",")
>>>>> user = bg.addVertex(username)
>>>>> ElementHelper.setProperties(user, ["username":username,"age":
>>>>> age.toInteger()])
>>>>> })
>>>>> bg.commit()
>>>>> new File("/Users/sandro/edges.csv").each({ line ->
>>>>> (source, label, target) = line.split(",")
>>>>> v1 = bg.getVertex(source)
>>>>> v2 = bg.getVertex(target)
>>>>> bg.addEdge(null, v1, v2, label,[weight:0.75f])
>>>>> })
>>>>> bg.commit()
>>>>
>>>>
>>>> However, we ran into a challenge with bg.addVertex(id).
>>>>
>>>> We need to pass an Id to bg.addVertex, so that we can reference this
>>>> vertex in the subsequent operation and bind it to an edge.
>>>>
>>>> However, if we pass an Id into addVertex(id), then all vertices are
>>>> created as generic V's. On the other hand, if we pass class name by
>>>> calling bg.addVertex("class:MyClass"), then we cannot pass an id, and
>>>> therefore cannot reference this vertex by Id in the subsequent call to
>>>> bind
>>>> it to an edge.
>>>>
>>>> Is there a way in which we can load our graph using Gremlin, while
>>>> still retaining the inheritance class structure of Vertices?
>>>>
>>>> Sandro
>>>>
>>>>
>>>>
>>>>
>>>> On Monday, February 17, 2014 4:31:54 AM UTC-8, Lvc@ wrote:
>>>>
>>>>> I've created an issue for this: https://github.com/orien
>>>>> technologies/orientdb/issues/2045
>>>>>
>>>>> Lvc@
>>>>>
>>>>>
>>>>> On 17 February 2014 13:25, Luca Garulli <[email protected]> wrote:
>>>>>
>>>>>> Hi,
>>>>>> I think the problem is that we don't have an equivalent of "create
>>>>>> link" that transform field values aka RDBMS foreign keys, into edges but
>>>>>> only "links".
>>>>>>
>>>>>> Lvc@
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 17 February 2014 11:51, Andrey Lomakin <[email protected]>wrote:
>>>>>>
>>>>>>> Also I would be appreciate if you send me your db anyway ))) we will
>>>>>>> check why links were not created.
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Feb 17, 2014 at 12:48 PM, Andrey Lomakin <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hi Sandro,
>>>>>>>> Could you use "create edge" command instead create link
>>>>>>>> https://github.com/orientechnologies/orientdb/wiki/SQL-Create-Edge ?
>>>>>>>> if still will be an issue could you send me database in stage when
>>>>>>>> data
>>>>>>>> inserted but edges are still not created.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sun, Feb 16, 2014 at 7:05 PM, Sandro <[email protected]> wrote:
>>>>>>>>
>>>>>>>>> Would Luca or anyone with Bulk Insert experience be able to
>>>>>>>>> comment on our issue, please? Our inability to bulk insert multiple
>>>>>>>>> records is stopping us on our tracks
>>>>>>>>>
>>>>>>>>> Thank you,
>>>>>>>>> Sandro
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Saturday, February 15, 2014 9:14:04 AM UTC-8, Sandro wrote:
>>>>>>>>>>
>>>>>>>>>> Hello,
>>>>>>>>>>
>>>>>>>>>> We love the concept of OrientDB, however have been struggling
>>>>>>>>>> with uploading our graph data (with a massiveinsert operation).
>>>>>>>>>>
>>>>>>>>>> *Background*
>>>>>>>>>>
>>>>>>>>>> We would like to migrate OrientDB away from an RDBMS. In RDBMS,
>>>>>>>>>> we had 3 tables: Person, School, and Education. We successfully
>>>>>>>>>> imported
>>>>>>>>>> data from these three tables into OrientDB, however are struggling
>>>>>>>>>> with
>>>>>>>>>> linking them together by with creating (Person <-- [Education] -->
>>>>>>>>>> School)
>>>>>>>>>> edges in OrientDB.
>>>>>>>>>>
>>>>>>>>>> Here are details of the original RDBMS tables:
>>>>>>>>>>
>>>>>>>>>> *Person:*
>>>>>>>>>>
>>>>>>>>>> Fields: Id (int), Name (string)
>>>>>>>>>>
>>>>>>>>>> Record Count: 28M
>>>>>>>>>>
>>>>>>>>>> *School:*
>>>>>>>>>>
>>>>>>>>>> Fields: Id (int), Name (string)
>>>>>>>>>>
>>>>>>>>>> Record Count: 7M
>>>>>>>>>>
>>>>>>>>>> *Education:*
>>>>>>>>>>
>>>>>>>>>> Fields: Id (int), PersonId_FK, SchoolId_FK
>>>>>>>>>>
>>>>>>>>>> Record Count: 35M
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *OrientDB release?*
>>>>>>>>>>
>>>>>>>>>> orientdb-community-1.7-rc2-SNAPSHOT
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *What steps will reproduce the problem?*
>>>>>>>>>> 1. We followed the tutorial https://github.com/orientechno
>>>>>>>>>> logies/orientdb/wiki/Import-From-RDBMS
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> connect remote:localhost/db admin admin
>>>>>>>>>>
>>>>>>>>>> DECLARE INTENT massiveinsert
>>>>>>>>>>
>>>>>>>>>> DROP CLASS Person
>>>>>>>>>> CREATE CLASS Person
>>>>>>>>>>
>>>>>>>>>> DROP CLASS School
>>>>>>>>>> CREATE CLASS School
>>>>>>>>>>
>>>>>>>>>> DROP CLASS Education
>>>>>>>>>> CREATE CLASS Education
>>>>>>>>>>
>>>>>>>>>> INSERT INTO Person(Id, Name)
>>>>>>>>>> VALUES (1, 'John Doe')
>>>>>>>>>> ..
>>>>>>>>>> INSERT INTO School(Id, Name)
>>>>>>>>>> VALUES (1, 'State University')
>>>>>>>>>> ..
>>>>>>>>>> INSERT INTO Education(Id, PersonId, SchoolId)
>>>>>>>>>> VALUES (1, 1, 1)
>>>>>>>>>> ...
>>>>>>>>>> *>>Successfully imported all Person, School, and Education
>>>>>>>>>> records in respective OrientDB classes!*
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> 2. After successfully loading the raw data in OrientDB Classes,
>>>>>>>>>> we are unable to create Edge links in bulk.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> CREATE LINK schools TYPE linkset FROM Education.PersonId To
>>>>>>>>>> Person.id INVERSE
>>>>>>>>>>
>>>>>>>>>> *>> Created 0 link(s) in 342.528992 sec(s).*
>>>>>>>>>> CREATE LINK students TYPE linkset FROM Education.SchoolId To
>>>>>>>>>> School.id INVERSE
>>>>>>>>>>
>>>>>>>>>> *>> Created 0 link(s) in 348.332344 sec(s).*
>>>>>>>>>> NOTE: We are expecting to build the graph from our data, so that
>>>>>>>>>> we can use .in() and .out() calls on edges and vertices. We have
>>>>>>>>>> doubts
>>>>>>>>>> that CREATE LINK operation builds proper graph linkages, because
>>>>>>>>>> based on
>>>>>>>>>> the documentation that we read CREATE LINK does not create a
>>>>>>>>>> bidirectional
>>>>>>>>>> Edge link.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *If you're using custom settings please provide them below*
>>>>>>>>>>
>>>>>>>>>> We are not using any custom settings for the OrientDB server or
>>>>>>>>>> JVM
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *What is the expected output? What do you see instead?*
>>>>>>>>>>
>>>>>>>>>> Our expected output is a proper graph compiled from our data,
>>>>>>>>>> stored in OrientDB. Instead, we are unable to create 2-way Education
>>>>>>>>>> edges
>>>>>>>>>> between Person and School vertices. Just to reiterate, all three
>>>>>>>>>> classes
>>>>>>>>>> are successfully populated, but we are unable to establish edge
>>>>>>>>>> links.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *Additional notes:*
>>>>>>>>>>
>>>>>>>>>> After import, the current DB size is 20GB
>>>>>>>>>>
>>>>>>>>>> Indexes have not been created
>>>>>>>>>>
>>>>>>>>>> Currently, we are attempting this operation on a Mac with the
>>>>>>>>>> following specs
>>>>>>>>>>
>>>>>>>>>> 1.7 GHz Intel Core i7
>>>>>>>>>>
>>>>>>>>>> 8GB 1600 MHz DDR3 RAM
>>>>>>>>>>
>>>>>>>>>> 500GB SSD HD
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Please help,
>>>>>>>>>> Sandro
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>
>>>>>>>>> ---
>>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>>> Groups "OrientDB" group.
>>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>>> send an email to [email protected].
>>>>>>>>>
>>>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Best regards,
>>>>>>>> Andrey Lomakin.
>>>>>>>>
>>>>>>>> Orient Technologies
>>>>>>>> the Company behind OrientDB
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Best regards,
>>>>>>> Andrey Lomakin.
>>>>>>>
>>>>>>> Orient Technologies
>>>>>>> the Company behind OrientDB
>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>>> ---
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "OrientDB" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to [email protected].
>>>>>>>
>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>
>>>>>>
>>>>>>
>>>>> --
>>>>
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "OrientDB" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>>
>>> --
>>
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "OrientDB" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.