Sorry, create a new Edge's class: "Wrote":

create class Wrote extends E

And put "Wrote" in the Edge's configuration.

Lvc@
ᐧ


On 25 August 2014 16:40, 'Curtis Mosters' via OrientDB <
[email protected]> wrote:

> Thanks Luca, I tried it out. The Person import works. But the more complex
> vetrex and edge thing does not.
>
> And with...
>
>
> *{ "edge": { "class": "Person", " ...I get*
>
>
> *Exception in thread "main" java.lang.IllegalArgumentException: Type
> error. The class Person does not extend class 'E' and therefore cannot be
> considered an Edge *So I thought it was just a mistake. I changed it to a
> Class E called "hasPost". And now I get:
>
> Exception in thread "main" java.lang.IllegalArgumentException: Property
> value ca
> n not be null
>         at com.tinkerpop.blueprints.util.ExceptionFactory.
> propertyValueCanNotBeN
> ull(ExceptionFactory.java:60)
>         at com.tinkerpop.blueprints.impls.orient.OrientElement.
> validateProperty(
> OrientElement.java:423)
>         at com.tinkerpop.blueprints.impls.orient.OrientElement.setProperty
> (Orien
> tElement.java:139)
>         at com.orientechnologies.orient.etl.transformer.OEdgeTransformer.
> execute
> Transform(OEdgeTransformer.java:102)
>         at com.orientechnologies.orient.etl.transformer.
> OAbstractTransformer.tra
> nsform(OAbstractTransformer.java:37)
>         at com.orientechnologies.orient.etl.OETLPipeline.execute(
> OETLPipeline.ja
> va:97)
>         at com.orientechnologies.orient.etl.OETLProcessor.
> executeSequentially(OE
> TLProcessor.java:459)
>         at com.orientechnologies.orient.etl.OETLProcessor.execute(
> OETLProcessor.
> java:253)
>         at com.orientechnologies.orient.etl.OETLProcessor.main(
> OETLProcessor.jav
> a:221)
> + extracted 1 records (0 records/sec) - 1 records -> loaded 0 vertices (0
> vertic
> es/sec) Total time: 1000ms [0 warnings, 0 errors]
> + extracted 1 records (0 records/sec) - 1 records -> loaded 0 vertices (0
> vertic
> es/sec) Total time: 2s [0 warnings, 0 errors]
>
>
>
>
>
> Am Montag, 25. August 2014 16:11:32 UTC+2 schrieb Lvc@:
>>
>> Hi Curtis,
>>
>> getting your structure on MySQL:
>>
>>    - Person{id,name}
>>    - Post{person_id,title}
>>
>> You could configure 2 pipelines:
>>
>>    1. one with extraction of "select * from Person"
>>    2. one with extraction of "select * from Post"
>>
>>
>> *Example for (1)*
>>
>> {
>>   "config": {
>>     "verbose": true
>>   },
>>   "extractor" : {
>>     "jdbc": { "driver": "com.mysql.jdbc.Driver",
>>               "url": "jdbc:mysql://localhost/mysql",
>>               "userName": "root",
>>               "userPassword": "",
>>               "query": "select * from Person" }
>>   },
>>   "transformers" : [
>>    { "vertex": { "class": "Person"} }
>>   ],
>>   "loader" : {
>>     "orientdb": {
>>       "dbURL": "plocal:/temp/databases/orientdb",
>>       "dbAutoCreate": true
>>     }
>>   }
>> }
>>
>>
>> *And this for (2):*
>> {
>>   "config": {
>>     "verbose": true
>>   },
>>   "extractor" : {
>>     "jdbc": { "driver": "com.mysql.jdbc.Driver",
>>               "url": "jdbc:mysql://localhost/mysql",
>>               "userName": "root",
>>               "userPassword": "",
>>               "query": "select * from Post" }
>>   },
>>   "transformers" : [
>>    { "vertex": { "class": "Post"} },
>> *   { "edge": { "class": "Person", "direction" : "in", *
>>
>>
>> *            "joinFieldName": "person_id",
>> "lookup":"Person.id", "unresolvedLinkAction":"CREATE"} }*  ],
>>   "loader" : {
>>     "orientdb": {
>>       "dbURL": "plocal:/temp/databases/orientdb",
>>       "dbAutoCreate": true
>>     }
>>   }
>> }
>>
>>
>> Lvc@
>>
>> ᐧ
>>
>>
>> On 25 August 2014 15:23, 'Curtis Mosters' via OrientDB <
>> [email protected]> wrote:
>>
>>> Well there is an idea that might be easy to be implemented.
>>>
>>> So the idea is to *auto-create* an edge. Let's take an example:
>>>
>>> MySQL classes are:
>>>
>>>    - Person{id,name}
>>>    - Post{,person_id,title}
>>>
>>> Now we also create such classes in OrientDB. Now we tell OrientDB if
>>> there is INSERT INTO Person or Post -> create edge on "id" to "person_id".
>>> I don't but isn't that pretty simple for a database to do?
>>> Well I have to say all of that is possible easily done with Java API but
>>> I really want it with ETL because there is no real need for me to use the
>>> Java API.
>>>
>>> Am Montag, 25. August 2014 14:15:00 UTC+2 schrieb Curtis Mosters:
>>>
>>>> Could you maybe take some time to create such an example?
>>>>
>>>> The current "edge" is bit hard to understand:
>>>>
>>>> edge: {
>>>>         class: "hasPost",
>>>>         joinFieldName: "person_id",
>>>>         lookup: "person.id",
>>>>         unresolvedLinkAction: "CREATE",
>>>>         if: "person_id is not null"
>>>>       }
>>>>
>>>> How can I say here to Link from person on post? I just need a small
>>>> example and also the MySQL strcuture if possible. That would make
>>>> everything clear. Thanks Luca.
>>>>
>>>> Am Montag, 25. August 2014 13:23:55 UTC+2 schrieb Lvc@:
>>>>>
>>>>> Curtis,
>>>>> You could create 2 or more etl scripts, some that extract vertices and
>>>>> other that extract edges.
>>>>>
>>>>> Lvc@
>>>>>
>>>>> ᐧ
>>>>>
>>>>>
>>>>> On 25 August 2014 12:25, 'Curtis Mosters' via OrientDB <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi Luca, well your example is just reading one table from MySQL. One
>>>>>> table with creating edges on it's entries. But in the usual cases that's
>>>>>> not the way how to import from a MySQL. Or maybe I just didn't understood
>>>>>> that example completely. But so far as I have seen it, you used one table
>>>>>> from MySQL that contained {id,...,friend_id}. You created profiles on 
>>>>>> that
>>>>>> id and then created edge on that id's. Is that right?
>>>>>>
>>>>>> But just once again I have those data as usually stored in another
>>>>>> table. So that cannot work for me.
>>>>>>
>>>>>> Am Donnerstag, 21. August 2014 15:56:05 UTC+2 schrieb Lvc@:
>>>>>>>
>>>>>>> ᐧ
>>>>>>>  On 21 August 2014 14:45, 'Curtis Mosters' via OrientDB <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> This is a great example Luca, thanks first of all.
>>>>>>>>
>>>>>>>> But could you additionally add information about the MySQL schema
>>>>>>>> and do I understand it correctly that you get the classes 
>>>>>>>> Person,Friend and
>>>>>>>> an edge. But where comes the friend data?
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Friend in my case is an Edge class. (create class Friend extends E).
>>>>>>> It's useful to create ad-hoc edge classes instead that the generic "E":
>>>>>>>
>>>>>>> http://www.orientechnologies.com/docs/1.7.8/orientdb.wiki/Gr
>>>>>>> aph-Schema.html
>>>>>>>
>>>>>>> Lvc@
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Am Donnerstag, 21. August 2014 13:25:47 UTC+2 schrieb Lvc@:
>>>>>>>>>
>>>>>>>>> Hi Curtis,
>>>>>>>>> ETL is very powerful and we're improving it everyday with users'
>>>>>>>>> feedback. We want to let it to be final for 2.0, so we can bundle 
>>>>>>>>> with it.
>>>>>>>>> By the way Enterprise Edition
>>>>>>>>> <http://www.orientechnologies.com/orientdb-enterprise> will have
>>>>>>>>> a Web Interface to edit it, and in the future also to debug it.
>>>>>>>>>
>>>>>>>>> Unfortunately I don't understand in your example table1 & 2 with
>>>>>>>>> both name_id field. Look at this example about Friendship. I want to
>>>>>>>>> connect a social network like app.
>>>>>>>>>
>>>>>>>>> This is an example of ETL configuration. My comments begins with
>>>>>>>>> // but remove them from real config file:
>>>>>>>>>
>>>>>>>>> {
>>>>>>>>>   config: {
>>>>>>>>>     verbose: true
>>>>>>>>>   },
>>>>>>>>>   begin: [
>>>>>>>>>   ],
>>>>>>>>>   extractor: {
>>>>>>>>>     "jdbc": { "driver": "com.mysql.jdbc.Driver",
>>>>>>>>>     "url": "jdbc:mysql://localhost/mysocialnetwork",
>>>>>>>>>     "userName": "root",
>>>>>>>>>     "userPassword": "root",
>>>>>>>>>     "query": "select * from profile"
>>>>>>>>>    }
>>>>>>>>>   },
>>>>>>>>>   transformers : [
>>>>>>>>>     {
>>>>>>>>>       // THIS IS ONLY A LOG, USEFUL TO TRACE WHAT ARRIVES FROM
>>>>>>>>> MYSQL
>>>>>>>>>       log: {
>>>>>>>>>         prefix: "MySQL -> "
>>>>>>>>>       }
>>>>>>>>>     },
>>>>>>>>>     {
>>>>>>>>>       merge: {
>>>>>>>>>         // LOOKUP BY ID: IF ALREADY PRESENT MERGE THE FIELDS BY
>>>>>>>>> OVERWRITING THE DIFFERENT ONES
>>>>>>>>>         joinFieldName: "*id*",
>>>>>>>>>         lookup: "Profile.*id*"
>>>>>>>>>       }
>>>>>>>>>     },
>>>>>>>>>     {
>>>>>>>>>       vertex: {
>>>>>>>>>         // TRANSFORM IT IN A VERTEX
>>>>>>>>>         class: "Profile"
>>>>>>>>>       }
>>>>>>>>>     },
>>>>>>>>>     {
>>>>>>>>>       edge: {
>>>>>>>>>         // CONNECT THE FRIEND IN MYSQL COLUMN 'friend_id'
>>>>>>>>>         class: "Friend", // Friend is the edges' class
>>>>>>>>>         joinFieldName: "friend_id", //
>>>>>>>>>         lookup: "Profile.id",
>>>>>>>>>         unresolvedLinkAction: "CREATE", // IF DOESN'T EXIST YET,
>>>>>>>>> CREATE THE VERTEX EMPTY. WILL BE FURTHER UPDATED
>>>>>>>>>         if: "friend_id is not null"
>>>>>>>>>       }
>>>>>>>>>     },
>>>>>>>>>     {
>>>>>>>>>       log: {
>>>>>>>>>         prefix: "Vertex -> "
>>>>>>>>>       }
>>>>>>>>>     }
>>>>>>>>>   ],
>>>>>>>>>   loader : {
>>>>>>>>>     orientdb: {
>>>>>>>>>       dbURL: "remote:localhost/yourdb",
>>>>>>>>>       dbUser: "admin",
>>>>>>>>>       dbPassword: "admin",
>>>>>>>>>       dbAutoCreate: true,
>>>>>>>>>       tx: true,
>>>>>>>>>       batchCommit: 1000,
>>>>>>>>>       dbType: "graph",
>>>>>>>>>       classes: [
>>>>>>>>>       ],
>>>>>>>>>       indexes: [
>>>>>>>>>       ]
>>>>>>>>>     }
>>>>>>>>>   }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Lvc@
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 21 August 2014 13:05, 'Curtis Mosters' via OrientDB <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Hey so I have now some experiences with ETL. I think this is
>>>>>>>>>> great for import. That's why I want to improve the importing process 
>>>>>>>>>> now.
>>>>>>>>>>
>>>>>>>>>>    1. First of all is it possible to run several imports
>>>>>>>>>>    parallel(not with several consoles) or if one is done start 
>>>>>>>>>> another
>>>>>>>>>>    instantly?
>>>>>>>>>>    2. How do I create an edge (https://github.com/orientechn
>>>>>>>>>>    ologies/orientdb-etl/wiki/Transformer#edge
>>>>>>>>>>    
>>>>>>>>>> <https://github.com/orientechnologies/orientdb-etl/wiki/Transformer#edge>
>>>>>>>>>>    is not helpful for me)
>>>>>>>>>>
>>>>>>>>>> Let's say I have 2 tables in MySQL:
>>>>>>>>>>
>>>>>>>>>> table1 with {*name_id*,*name*} and table2 with {*name_id*,
>>>>>>>>>> *text_id*,*text*}
>>>>>>>>>>
>>>>>>>>>> Now I want to get them connected (name_id) in OrientDB.
>>>>>>>>>>
>>>>>>>>>> One way would now be to import both tables as Class. That's easy
>>>>>>>>>> and then create edges with the *name_id*. Everything is fine
>>>>>>>>>> with that, but it would be much easier to generate edges with ETL if 
>>>>>>>>>> that
>>>>>>>>>> is anyway possible. So I don't know what is more efficient. Someone 
>>>>>>>>>> else
>>>>>>>>>> also said that Sails (https://github.com/vjsrinath/sails-orientdb)
>>>>>>>>>> might be a good choice.
>>>>>>>>>>
>>>>>>>>>> If ETL allows that I could imagine about the following way:
>>>>>>>>>>
>>>>>>>>>>    - read line of table1 -> safe in memory
>>>>>>>>>>    - look in table2 if name_id exists
>>>>>>>>>>    - -> if yes, create vertex Tabel1 and Table2
>>>>>>>>>>       - -> if no, create vertex Tabel1 and Table2 and create an
>>>>>>>>>>       edge
>>>>>>>>>>       - and so on
>>>>>>>>>>
>>>>>>>>>> Of course this is very crazy if you imagine 30 tables or so. Was
>>>>>>>>>> just an idea, just to check if that is already possible somehow.
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>>
>>>>>>>>>> ---
>>>>>>>>>> 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/d/optout.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  --
>>>>>>>>
>>>>>>>> ---
>>>>>>>> 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/d/optout.
>>>>>>>>
>>>>>>>
>>>>>>>  --
>>>>>>
>>>>>> ---
>>>>>> 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/d/optout.
>>>>>>
>>>>>
>>>>>  --
>>>
>>> ---
>>> 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/d/optout.
>>>
>>
>>  --
>
> ---
> 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/d/optout.
>

-- 

--- 
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/d/optout.

Reply via email to