如何使用ETL将CSV中的边导入OrientDB图形?

如何使用ETL将CSV中的边导入OrientDB图形?,orientdb,orientdb2.2,orientdb-etl,Orientdb,Orientdb2.2,Orientdb Etl,我正在尝试将CSV文件中的边导入OrientDB。顶点存储在单独的文件中,并已通过ETL导入OrientDB。 因此,我的情况与和类似 更新 Friend.csv "id","client_id","first_name","last_name" "0","0","John-0","Doe" "1","1","John-1","Doe" "2","2","John-2","Doe" ... 好友导入程序会删除“id”字段,但会存储“client\u id”。其思想是生成一个已知的客户端id,

我正在尝试将CSV文件中的边导入OrientDB。顶点存储在单独的文件中,并已通过ETL导入OrientDB。 因此,我的情况与和类似


更新

Friend.csv

"id","client_id","first_name","last_name"
"0","0","John-0","Doe"
"1","1","John-1","Doe"
"2","2","John-2","Doe"
...
好友导入程序会删除
“id”
字段,但会存储
“client\u id”
。其思想是生成一个已知的客户端id,用于搜索等

北京友谊网

"friendship_id","client_id","from","to"
"0","0-1","1","0"
"2","0-15","15","0"
"3","0-16","16","0"
...
“友谊id”
“客户id”
应作为
“PendingFriendly”
边缘的属性导入
“from”
是朋友的
“客户id”
“to”
是另一个朋友的
“客户id”
。 对于
“客户id”
朋友
待处理友谊
上都存在唯一索引


我的ETL配置如下所示

...
"extractor": {
  "csv": {
  }
},
"transformers": [
  {
    "command": {
      "command": "CREATE EDGE PendingFriendship FROM (SELECT FROM Friend WHERE client_id = '${input.from}') TO (SELECT FROM Friend WHERE client_id = '${input.to}') SET client_id = '${input.client_id}'",
      "output": "edge"
    }
  },
  {
    "field": {
      "fieldName": "from",
      "expression": "remove"
    }
  },
  {
    "field": {
      "fieldName": "to",
      "operation": "remove"
    }
  },
  {
    "field": {
      "fieldName": "friendship_id",
      "expression": "remove"
    }
  },
  {
    "field": {
      "fieldName": "client_id",
      "operation": "remove"
    }
  },
  {
    "field": {
      "fieldName": "@class",
      "value": "PendingFriendship"
    }
  }
],
... 
此配置的问题在于它会创建两个边缘条目。一个是预期的“悬而未决的友谊”边缘。第二个是空的“PendingFriendly”边,我删除的所有字段都是带有空值的属性。 导入第二行/文档失败,因为无法插入另一个空的“PendingFriendly”,因为它违反了唯一性约束。 我怎样才能避免创造不必要的空洞的“悬而未决的友谊”。 将边导入OrientDB的最佳方法是什么?文档中的所有示例都使用CSV文件,其中顶点和边位于一个文件中,但我不是这样

我还查看了,但它返回的是顶点而不是边


过了一段时间,我找到了将上述数据导入OrientDB的方法(解决方法)。我编写了简单的ruby脚本,使用端点调用OrientDB的HTTP API,而不是使用

步骤:

  • 导入好友
  • 使用响应创建
    客户端ID
    @rids
    的映射
  • 解析
    peindingFriendly.csv
    并生成
    批处理
    请求
  • 每个友谊都是由它自己的命令建立的
  • 从2开始的映射。用于从4将
    @rids
    插入命令
  • 以1000个命令为单位发送批处理请求
  • 批处理请求正文示例:

    {
      "transaction" : true,
      "operations" : [
        {
          "type" : "cmd",
          "language" : "sql",
          "command" : "create edge PendingFriendship from #27:178 to #27:179 set client_id='4711'"
        }
      ]
    }
    

    这并不是我所问问题的答案,但对我来说,它解决了将数据导入OrientDB的更高目标。因此,我将此问题留给社区来标记是否已解决。

    过了一段时间,我找到了将上述数据导入OrientDB的方法(解决方法)。我编写了简单的ruby脚本,使用端点调用OrientDB的HTTP API,而不是使用

    步骤:

  • 导入好友
  • 使用响应创建
    客户端ID
    @rids
    的映射
  • 解析
    peindingFriendly.csv
    并生成
    批处理
    请求
  • 每个友谊都是由它自己的命令建立的
  • 从2开始的映射。用于从4将
    @rids
    插入命令
  • 以1000个命令为单位发送批处理请求
  • 批处理请求正文示例:

    {
      "transaction" : true,
      "operations" : [
        {
          "type" : "cmd",
          "language" : "sql",
          "command" : "create edge PendingFriendship from #27:178 to #27:179 set client_id='4711'"
        }
      ]
    }
    

    这并不是我所问问题的答案,但对我来说,它解决了将数据导入OrientDB的更高目标。因此,我让社区将此问题标记为已解决或未解决。

    您好,您使用的是什么版本?我在Docker内部运行OrientDB。我使用的是来自的2.2.24版本。我对版本2.2.22也有同样的行为。@MichelaBonizzi您知道如何修复导入吗?如上所述,使用的版本为2.2.24。Thx.Cna您是否提供csv文件?Thxok,谢谢你让我看看我是否理解得很好,Friend.csv已经导入,你必须导入PeindingFriendly.csv,但是你有问题,对吗?嗨,你使用的是什么版本?我在Docker内部运行OrientDB。我使用的是来自的2.2.24版本。我对版本2.2.22也有同样的行为。@MichelaBonizzi您知道如何修复导入吗?如上所述,使用的版本为2.2.24。Thx.Cna您是否提供csv文件?Thxok,谢谢你让我看看我是否理解得很好,Friend.csv已经导入,你必须导入PeindingFriendly.csv,但是你有问题,对吗?