首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >etl与多到多关系

etl与多到多关系
EN

Stack Overflow用户
提问于 2016-04-12 10:26:57
回答 1查看 307关注 0票数 0

在csv的etl使用一个到多个特性的文档中,我想将它扩展到许多特性。所以我做了三次倾诉,一次是为了发帖,一次是为了评论,还有一次是为了关系。张贴和评论是可以的,但当我启动关系时,我有这个错误,我做错了什么?

代码语言:javascript
复制
    commentId,postId
    0,10
    1,10
    21,10
    41,20
    82,20    

    {
     "source": { "file": { "path": "/tmp/relation.csv" } },
     "extractor": { "csv": {} },
       "transformers": [
        { "edge":
            { "class": "HasComments", "joinFieldName": "postId", "lookup": "Post.id", "direction": "out"},
            { "class": "HasComments", "joinFieldName": "commentId", "lookup": "Comment.id", "direction": "in"}
        }
      ],
      "loader": {
        "orientdb": {
           "dbURL": "plocal:/tmp/test",
           "dbType": "graph",
           "classes": [
             {"name": "Post", "extends": "V"},
             {"name": "Comment", "extends": "V"},
             {"name": "HasComments", "extends": "E"}
           ],
           "indexes": [
             {"class":"Post", "fields":["id:integer"], "type":"UNIQUE" },
             {"class":"Comment", "fields":["id:integer"], "type":"UNIQUE" }
           ]
        }
      }
    }

    OrientDB etl v.2.1.9-SNAPSHOT (build 2.1.x@r; 2016-01-07 10:51:24+0000) www.orientdb.com
    BEGIN ETL PROCESSOR
    [file] INFO Reading from file /tmp/relation.csv with encoding UTF-8
    Error in Pipeline execution: com.orientechnologies.orient.etl.transformer.OTransformException: edge: input type 'com.orientechnologies.orient.core.record.impl.ODocument$1$1@72ade7e3' is not supported
    ETL process halted: com.orientechnologies.orient.etl.OETLProcessHaltedException: Halt
    Exception in thread "main" com.orientechnologies.orient.etl.OETLProcessHaltedException: Halt
    at com.orientechnologies.orient.etl.OETLPipeline.execute(OETLPipeline.java:149)
    at com.orientechnologies.orient.etl.OETLProcessor.executeSequentially(OETLProcessor.java:448)
    at com.orientechnologies.orient.etl.OETLProcessor.execute(OETLProcessor.java:255)
    at com.orientechnologies.orient.etl.OETLProcessor.main(OETLProcessor.java:109)
    Caused by: com.orientechnologies.orient.etl.transformer.OTransformException: edge: input type 'com.orientechnologies.orient.core.record.impl.ODocument$1$1@72ade7e3' is not supported
    at com.orientechnologies.orient.etl.transformer.OEdgeTransformer.executeTransform(OEdgeTransformer.java:107)
    at com.orientechnologies.orient.etl.transformer.OAbstractTransformer.transform(OAbstractTransformer.java:37)
    at com.orientechnologies.orient.etl.OETLPipeline.execute(OETLPipeline.java:115)
    ... 3 more
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 13:46:39

一个可能的解决方案可能是,在通过它们的json文件导入Post和注释类之后,您可以使用另一个json文件并导入类关系

代码语言:javascript
复制
{
    "source": { "file": { "path": "/tmp/relation.csv" } },
    "extractor": { "row": {} },
    "transformers": [
        { "csv": { "separator": ","} 
        },
        { "vertex": { "class": "Relation" } }
    ],
    "loader": {
        "orientdb": {
           "dbURL": "plocal:/tmp/test",
           "dbType": "graph",
            "classes": [
                {"name": "Post", "extends": "V"},
                {"name": "Comment", "extends": "V"},
                {"name": "Relation", "extends": "V"},
                {"name": "HasComments", "extends": "E"}
            ],
            "indexes": [
                {"class":"Post", "fields":["id:integer"], "type":"UNIQUE" },
                {"class":"Comment", "fields":["id:integer"], "type":"UNIQUE" }
            ]
        }
    }
}

你会得到这些记录的。

使用以下javascript函数

代码语言:javascript
复制
var g=orient.getGraphNoTx();
var relation = g.command("sql","select from Relation");
for(i=0;i<relation.length;i++){
var relationMM=g.command("sql","select postId , commentId from "+ relation[i].getId());
var idPost=relationMM[0].getProperty("postId");
var idComment=relationMM[0].getProperty("commentId");
var post=g.command("sql","select from Post where id = " + idPost);
var comment=g.command("sql","select from Comment where id = " + idComment);
g.command("sql","create edge HasComments from " + post[0].getId() + " to " + comment[0].getId());
}
g.command("sql","drop class Relation unsafe");

您将得到以下结构。

这将是你的图表。

更新

可以使用此代码检查边缘是否已存在。

代码语言:javascript
复制
var counter=g.command("sql","select count(*) from HasComments where out=" + post[0].getId() + " and in=" + comment[0].getId());
if(counter[0].getProperty("count")==0){
    g.command("sql","create edge HasComments from " + post[0].getId() + " to " + comment[0].getId());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36570525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档