此示例描述了将CSV文件作为图形导入OrientDB的过程。为简单起见,仅考虑以下两个实体:

  • 贴吧(post)
  • 评论(Comment)
    同时考虑Post和Comment之间的关系为One-2-Many。一个帖子可以有多个评论。我们将代表它们出现在RDBMS中,但源代码可能是任何东西。

使用RDBMS Post和Comment将存储在2个单独的表中:

TABLE POST:
+----+----------------+
| id | title          |
+----+----------------+
| 10 | NoSQL movement |
| 20 | New OrientDB   |
+----+----------------+
TABLE COMMENT:
+----+--------+--------------+
| id | postId | text         |
+----+--------+--------------+
|  0 |   10   | First        |
|  1 |   10   | Second       |
| 21 |   10   | Another      |
| 41 |   20   | First again  |
| 82 |   20   | Second Again |
+----+--------+--------------+

使用RDBMS,一对多的引用从目标表(Comment)反转到源表(Post)。这是由于RDBMS无法处理值集合。

相比之下,使用OrientDB Graph模型,在设计应用程序时,可以按照您的想法建模关系:POSTs与COMMENTs有边缘。

所以,使用RDBMS,你有:

Table POST    <- (foreign key) Table COMMENT

使用OrientDB,Graph模型使用Edges来管理关系:

Class POST ->* (collection of edges) Class COMMENT

(1)导出为CSV
如果您使用的是RDBMS或任何其他来源,请以CSV格式导出数据。ETL模块还可以直接通过JDBC驱动程序从JSON和RDBMS中提取。但是,为了简单起见,在本例中我们将使用CSV作为源格式。

考虑使用2个CSV文件:

a.文件posts.csv
posts.csv文件,包含所有帖子

id,title
10,NoSQL movement
20,New OrientDB

b. 文件comments.csv
comments.csv文件,包含所有注释,以及与评论帖子的关系

id,postId,text
0,10,First
1,10,Second
21,10,Another
41,20,First again
82,20,Second Again
(2)ETL配置
OrientDB ETL工具只需要一个JSON文件来定义ETL过程作为Extractor,一个要在管道中执行的变换器列表,以及一个Loader,用于将图形元素加载到OrientDB数据库中。

以下是包含要分别导入帖子和评论的ETL的2个文件。

post.json ETL文件

{"source": { "file": { "path": "D:/software/orientdb/data/posts.csv" } },"extractor": { "csv": {} },"transformers": [{ "vertex": { "class": "Post" } }],"loader": {"orientdb": {"dbURL": "remote:localhost/demodb","serverUser": "root","serverPassword": "root","dbType": "graph","classes": [{"name": "Post", "extends": "V"},{"name": "Comment", "extends": "V"},{"name": "HasComments", "extends": "E"}], "indexes": [{"class":"Post", "fields":["id:integer"], "type":"UNIQUE" }]}}
}

Loader包含连接到OrientDB数据库的所有信息。我们使用了一个地理数据库,因为它更快。但是,如果您已启动并运行OrientDB服务器,请改用“remote:”。请注意Loader中声明的类和索引。一旦配置了Loader,就会创建类和索引(如果它们尚不存在)。我们在Post.id字段上创建了索引,以确保没有重复项,并且创建的边上的查找(见下文)将足够快。

comments.json ETL文件

{"source": { "file": { "path": "D:/software/orientdb/data/comments.csv" } },"extractor": { "csv": {} },"transformers": [{ "vertex": { "class": "Comment" } },{ "edge": { "class": "HasComments","joinFieldName": "postId","lookup": "Post.id","direction": "in"}}],"loader": {"orientdb": {"dbURL": "remote:localhost/demodb","serverUser": "root","serverPassword": "root","dbType": "graph","classes": [{"name": "Post", "extends": "V"},{"name": "Comment", "extends": "V"},{"name": "HasComments", "extends": "E"}], "indexes": [{"class":"Post", "fields":["id:integer"], "type":"UNIQUE" }]}}
}

此文件与前一个文件类似,但Edge转换器完成了这项工作。由于CSV中的链接方向相反(Comment-> Post),我们想直接建模(Post-> Comment),我们使用方向“in”(默认值始终为“out”)。

(3)运行ETL过程
现在允许ETL按顺序执行两个导入来运行。在OrientDB主目录下打开一个shell,然后执行以下步骤:

  1. linux
$ cd bin
$ ./oetl.sh post.json
$ ./oetl.sh comment.json
  1. windows,在orientdb_home目录打开cmd窗口执行:
oetl.bat comments.json
oetl.bat post.json

一旦两个脚本成功执行,您就可以将您的Blog作为图形导入OrientDB!

(4)检查数据库
在OrientDB控制台下打开数据库并执行以下命令以检查导入是否正常:

$ ./console.sh

OrientDB console v.2.0-SNAPSHOT (build 2565) www.orientechnologies.com
Type ‘help’ to display all the supported commands.
Installing extensions for GREMLIN language v.2.6.0

orientdb>CONNECT remote:localhost/demodb root root

Connecting to database [plocal:/temp/databases/blog] with user ‘admin’…OK

orientdb {db=blog}> select expand( out() ) from Post where id = 10
----+-----+-------+----+------+-------+--------------
#   |@RID |@CLASS |id  |postId|text   |in_HasComments
----+-----+-------+----+------+-------+--------------
0   |#12:0|Comment|0   |10    |First  |[size=1]
1   |#12:1|Comment|1   |10    |Second |[size=1]
2   |#12:2|Comment|21  |10    |Another|[size=1]
----+-----+-------+----+------+-------+--------------

3 item(s) found. Query executed in 0.002 sec(s).

orientdb {db=blog}> select expand( out() ) from Post where id = 20
----+-----+-------+----+------+------------+--------------
#   |@RID |@CLASS |id  |postId|text        |in_HasComments
----+-----+-------+----+------+------------+--------------
0   |#12:3|Comment|41  |20    |First again |[size=1]
1   |#12:4|Comment|82  |20    |Second Again|[size=1]
----+-----+-------+----+------+------------+--------------

2 item(s) found. Query executed in 0.001 sec(s).

orientDB导入CSV数据相关推荐

  1. python csv库,Python 中导入csv数据的三种方法

    Python 中导入csv数据的三种方法,具体内容如下所示: 1.通过标准的Python库导入CSV文件: Python提供了一个标准的类库CSV文件.这个类库中的reader()函数用来导入CSV文 ...

  2. datagrip导入csv数据配合ajax+mysql+Flask实验

    1.先让datagrip连接mysql数据库ajax_data 2.先连上数据库 2.导入csv数据,勾上First row is_header 重命名为company_info #--------- ...

  3. Neo4j 导入CSV数据

    Neo4j 导入CSV数据 要求 必须有一个或多个 CSV 文件来表示将在图中创建的节点和关系. 必须有一个已启动的现有 Neo4j DBMS. Neo4j 中存储为属性的数据类型 String:字符 ...

  4. MySQL导入csv数据

    MySQL导入csv数据 前言 一.导入步骤 1.MySQL workbench 操作语句 2.用CMD命令窗口导入数据 3.用cmd时犯的一个错误 总结 前言 下载了一个数据组,数据格式是CSV,再 ...

  5. python多进程写入mysql_Python实现 多进程导入CSV数据到 MySQL

    前段时间帮同事处理了一个把 CSV 数据导入到 MySQL 的需求.两个很大的 CSV 文件, 分别有 3GB.2100 万条记录和 7GB.3500 万条记录.对于这个量级的数据,用简单的单进程/单 ...

  6. neo4j导入csv数据

    neo4j 导入数据 文章目录 neo4j 导入数据 1. 数据准备 2.关闭服务 3.数据导入 4.开启服务 5.一些遇到的问题 倒错了想要删库怎么办 导入出现错误怎么办 错误一及解决办法 错误二及 ...

  7. Linux如何通过csv导入neo4j,neo4j-import导入CSV 数据

    neo4j-import 1.使用条件 必须先关闭neo4j 无法在原有数据库添加,只能重新生成一个数据库 导入文件格式为csv 2.参数 –into:数据库名称 –bad-tolerance:能容忍 ...

  8. mysql 导入CSV数据 [转]

    转自: http://blog.chinaunix.net/uid-23284114-id-3196638.html MYSQL   LOAD DATA INFILE命令可以把csv平面文件中的数据导 ...

  9. tp5导入csv数据到mysql_tp5 Excel表格导入_tp5导出Excel

    #### thinkphp5使用PHPExcel导入Excel.csv表格,thinkphp5表格导入导出 ##### tp5使用PHPExcel导入Excel表格文件: ```php PS:将PHP ...

最新文章

  1. 数据库基础笔记(MySQL)2 —— 基础查询
  2. Java生成pdf设置两行页脚_Itextpdf 5 html生成pdf 页眉页脚
  3. nginx限制某个IP同一时间段的访问次数
  4. Android Studio设置字体
  5. JavaScript实现sieveOfEratosthenes埃拉托色尼筛选法算法(附完整源码)
  6. /proc/net/sockstat 里的信息是什么意思?
  7. 手机1像素线粗_关于移动端开发 1px 线的一些理解和解决办法
  8. php数组添加省会城市,【JSON数据】中国各省份省会城市经纬度 JSON
  9. Windows 11 任务管理器重磅升级!界面迎来全新设计,十年来首次大改!
  10. 面试进阶之字符串常量池
  11. 物理学与计算机相关参考文献,物理学专业论文参考文献
  12. 票据的生命周期与人的灵魂
  13. Android桌面组件开发之实时文件夹(Live_Folders)
  14. 用粉红噪声煲机_白噪音|煲机白噪音粉红噪音mp3下载 - 121下载站
  15. MIRACL大数运算库使用手册
  16. Rqnoj341星门跳跃
  17. 先锋女性与Lazada:面包与玫瑰的东南亚之旅
  18. 静态变量和静态方法编程训练—信用卡消费记录
  19. 短说 3.7.1正式版更新【新增悬赏问答、打赏、付费看帖、IP属地】
  20. 大话卫星导航中的信号处理系列文章——GPS信号L1频点的中频数据生成与验证

热门文章

  1. Hadoop的十大应用场景
  2. 是否需要提高代码阅读能力?这有技巧
  3. 新浪IaskSpider
  4. 教您自制波段式风扇调速器
  5. 计算机中的contex理解
  6. おとまりせっくす中文在线(软件对日项目)
  7. route config component for path:cannot be a string id. Use an actual component instead
  8. Windows Store apps开发[72]Windows 8 开发31日-第15日-虚拟键盘
  9. 基于Spark技术的银行客户数据分析
  10. 软件测试英语和数学,儿童英语软件测评,怎么学习英语