国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

neo4j學(xué)習(xí)筆記:使用neo4j-admin import命令批量處理CSV文件

這篇具有很好參考價值的文章主要介紹了neo4j學(xué)習(xí)筆記:使用neo4j-admin import命令批量處理CSV文件。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、neo4j-admin簡要介紹

neo4j-admin是管理neo4j DBMS的主要工具之一,是一種命令行工具。

neo4j admin命令需與當(dāng)前neo4j用戶一致。

(1)位置:以neo4j desktop為例,neo4j-admin在當(dāng)前project下活動的database的dbms文件夾下的bin文件夾中。

(2)啟動方式:

  • 打開當(dāng)前project的terminal;
  • 進(jìn)入bin文件夾:執(zhí)行cd bin,此時,輸入neo4j-admin XX(命令)即可。

(3)語法:neo4j-admin [-hv] [COMMAND],常用命令如下:

? ? ? ? 注意環(huán)境和neo4j-admin 版本!

  • neo4j-admin -h 或?neo4j-admin --help:顯示neo4j-admin幫助信息;
  • neo4j-admin -v 或?neo4j-admin --version:打印neo4j-admin版本信息;
  • neo4j-admin import:從一系列CSV文件中導(dǎo)入數(shù)據(jù),使用詳見下一節(jié)。

二、neo4j-admin import命令

(1)用途:可用于批量導(dǎo)入CSV數(shù)據(jù)。

(2)前提:使用者必須有權(quán)限對dbmis.directories.data 和dbms.directories.log進(jìn)行寫入操作。

(3)特點:僅可用于初始化未運行的空數(shù)據(jù)庫創(chuàng)建新的數(shù)據(jù)庫,即:即便一個已存在的存儲過數(shù)據(jù)的數(shù)據(jù)庫被清空也無法執(zhí)行import命令。

(4)vs LOAD CSV:

LOAD CSV

用于將中小型CSV文件數(shù)據(jù)導(dǎo)入已存在的數(shù)據(jù)庫

可按需執(zhí)行LOAD CSV命令多次

neo4j-admin import

用于批量導(dǎo)入格式化的CSV文件

僅可對空數(shù)據(jù)庫使用一次

注意:該命令為離線運行,即:執(zhí)行該命令前數(shù)據(jù)庫應(yīng)處于未運行狀態(tài)(關(guān)閉server),執(zhí)行后許重啟neo4j sever,詳見下文。

(5)import 命令的使用:

neo4j-admin import? [Options]

  • Options為可選項,如有多個,用空格隔開,支持以下選項:
  1. --expand -comannds
  2. --verbose
  3. --cache-on-heap[=true/false]
  4. --force[=true/false]默認(rèn)為false,如設(shè)置為true表示在導(dǎo)入數(shù)據(jù)前將存在的數(shù)據(jù)庫文件刪除,可用于需重新導(dǎo)入數(shù)據(jù)的場景,例如:在導(dǎo)入真實數(shù)據(jù)前,先導(dǎo)入了測試數(shù)據(jù),打算先看看導(dǎo)入后數(shù)據(jù)是什么樣子,那么可以設(shè)置--force=true,這樣可以對同一個數(shù)據(jù)庫進(jìn)行重新導(dǎo)入;
  5. --high-io[=true/false]:默認(rèn)為false,如設(shè)置為true
  6. --ignore-empty-strings[=true/false]:確定是否忽略數(shù)據(jù)空字段,默認(rèn)為false
  7. --trim-strings=[true/false]:確定是否在遇到空白行時認(rèn)為是null,默認(rèn)為false

三、CSV格式化文件

? ? ? ? neo4j-admin import命令處理的CSV文件需要滿足特定的格式,即CSV格式化文件,分為兩類:節(jié)點文件(node files)關(guān)系文件(relationship files)?;靖袷綖殒I值對,如下:

<name>:<field_type>

  • name:指節(jié)點屬性和節(jié)點ID,其他字段如LABEL等省略name;
  • field_type:指字段類型,例如:ID、LABEL等。

(1)其他要求

  • CSV文件的編碼格式需為UTF-8。

(2) 建議

  • 表頭單獨建文件,以便處理和編輯;
  • 用文本編輯器如notepad、vscode等編輯CSV文件,不建議直接用excel或wps編輯,容易導(dǎo)致亂碼等問題。

3.1?節(jié)點文件格式

? ? ? CSV節(jié)點文件的表頭格式如下:

<nodeId:ID>, <propertyName1>, <propertyName2>, ..., <:LABEL>

  • nodeId:ID自定義的節(jié)點編號,對于每個節(jié)點這個編號是唯一的,用于創(chuàng)建關(guān)系等后續(xù)import操作時索引到指定節(jié)點;
  • propertyNameX節(jié)點屬性,對于屬性,field_type指data_type,默認(rèn)為string,可定義的data_type如下表所示;
  • :LABEL注意前面有冒號,省略了name)非必選,用于指定節(jié)點的標(biāo)簽,1個節(jié)點可以有多個標(biāo)簽,賦值時多個標(biāo)簽之間用該CSV文件的分隔符隔開,默認(rèn)為“;”。
屬性可定義的data_type(field_type):
數(shù)值類 int, long, float, double
布爾值 boolean
字符類 byte, short, char, string
點類型 point
日期時間 date, localtime, time, localdatetime, datetime, duration

? ? 例1:movies.csv,文件內(nèi)容如下:

movieId:ID,title,year:int,:LABEL
tt0133093,"The Matrix",1999,Movie
tt0234215,"The Matrix Reloaded",2003,Movie;Sequel
tt0242653,"The Matrix Revolutions",2003,Movie;Sequel

? ? ? ? movies.csv 定義了3個(電影)節(jié)點:

  • 節(jié)點1:ID為tt0133093,名字為The Matrix,年份為1999(整數(shù)類型),標(biāo)簽為Movie;
  • 節(jié)點2:ID為tt0234215,名稱為The Matrix Reloaded,年份為2003(整數(shù)類型),標(biāo)簽為Movie和Sequel;
  • 節(jié)點3:ID為tt0242653,名字為The Matrix Revolutions,年份為2003(整數(shù)類型),標(biāo)簽為Movie和Sequel。

? ? 例2:actors_header.csv及actors.csv,文件內(nèi)容如下:

actors_header.csv:
personId:ID,name,:LABEL
actors.csv:
keanu,"Keanu Reeves",Actor
laurence,"Laurence Fishburne",Actor
carrieanne,"Carrie-Anne Moss",Actor

? ? ? ? ?actors_header.csv和actors.csv定義了3個(演員)節(jié)點:

  • 節(jié)點1:ID為keanu,名字為Keanu Reeves,標(biāo)簽為Actor;
  • 節(jié)點2:ID為laurence,名字為Laurence Fishburne,標(biāo)簽為Actor;
  • 節(jié)點3:ID為carrieanne,名字為Carrie-Anne Moss,標(biāo)簽為Actor。

3.2?關(guān)系文件格式

CSV關(guān)系文件基本的表頭格式為:

<:START_ID>, <:TYPE>, <:END_ID>, <RelationshipPropertiesName1>,...<RelationshipPropertiesName2>

  • :START_ID關(guān)系的起始節(jié)點編號(The ID of the start node for this relationship)必須有;
  • :TYPE關(guān)系的類別(relationship types),例如:WORKS_FOR, CONTAINS...,必須有;
  • :END_ID關(guān)系的結(jié)束節(jié)點編號(The ID of the end node for this relationship),必須有;
  • RelationshipPropertiesNameX:關(guān)系的屬性,非必須。
  • <:START_ID>和<:END_ID>不需要定義name,如果定義了<name>:<START_ID>或<name>:<END_ID>,則自動忽略<name>。

? ? 例3:(基于例1、例2)roles_header.csv和roles.csv內(nèi)容如下:

roles_header.csv:
:START_ID,role,:END_ID,:TYPE
roles.csv:
keanu,"Neo",tt0133093,ACTED_IN
keanu,"Neo",tt0234215,ACTED_IN
keanu,"Neo",tt0242653,ACTED_IN
laurence,"Morpheus",tt0133093,ACTED_IN
laurence,"Morpheus",tt0234215,ACTED_IN
laurence,"Morpheus",tt0242653,ACTED_IN
carrieanne,"Trinity",tt0133093,ACTED_IN
carrieanne,"Trinity",tt0234215,ACTED_IN
carrieanne,"Trinity",tt0242653,ACTED_IN

? ? ? ? roles_header.csv和roles.csv定義了一類關(guān)系,創(chuàng)建了9條關(guān)系:

  • 關(guān)系1:ID為keanu的Actor?? ACTED_IN? ID為tt0133093的Movie,扮演的role為Neo;
  • 關(guān)系2:ID為keanu的Actor?? ACTED_IN? ID為tt0234215的Movie,扮演的role為Neo;
  • 關(guān)系3:ID為keanu的Actor?? ACTED_IN? ID為tt0242653的Movie,扮演的role為Neo;
  • 關(guān)系4:ID為laurence的Actor?? ACTED_IN? ID為tt0133093的Movie,扮演的role為Morpheus;
  • 關(guān)系5:ID為laurence的Actor?? ACTED_IN? ID為tt0234215的Movie,扮演的role為Morpheus;
  • 關(guān)系6:ID為laurence的Actor?? ACTED_IN? ID為tt0242653的Movie,扮演的role為Morpheus;
  • 關(guān)系7:ID為carrieanne的Actor?? ACTED_IN? ID為tt0133093的Movie,扮演的role為Trinity;
  • 關(guān)系8:ID為carrieanne的Actor?? ACTED_IN? ID為tt0234215的Movie,扮演的role為Trinity;
  • 關(guān)系9:ID為carrieanne的Actor?? ACTED_IN? ID為tt0242653的Movie,扮演的role為Trinity。

3.3 補(bǔ)充說明

(1)除name:ID、:LABEL、:START_ID、:END_ID、:TYPE外的列都被認(rèn)為是屬性

  • 如果“:”前名稱省略,則該列數(shù)據(jù)讀取;
  • 如果為“name:”或者為“:IGNORE”,則該列數(shù)據(jù)不讀取。

(2)name:ID:該鍵值對的設(shè)置是為了設(shè)置全局ID用于后續(xù)查詢節(jié)點時使用:

  • 如果跨實體有重復(fù)的ID編號,則需要按照“name:ID(group)”形式設(shè)置該鍵值對;
  • 如果定義的ID編號是全局唯一的,不需要定義group。

3.4 常見坑

(1)表頭問題:表頭與數(shù)據(jù)不一致,例如:缺失列、多列、表頭分隔符與數(shù)據(jù)分隔符不一致等。在導(dǎo)入CSV文件時,提前確認(rèn)表頭沒有這些問題將節(jié)省大量時間。

(2)引號問題:文件正文內(nèi)容中引號,需要考慮轉(zhuǎn)義問題。

3.5 常用數(shù)據(jù)清洗工具

(1)CSVKit:python提供一系列數(shù)據(jù)清洗和格式化工具,如csvstat、csvgrep等。

(2)CSVLint:一種線上處理CSV文件的網(wǎng)站,CSV Lint | Check your CSV files with CSVLint

(3) papa parse:Javascript庫用于處理CSV文件。

四、使用neo4j-admin import命令批量處理CSV文件

舉例說明批量處理方法:

import文件夾下現(xiàn)有以下CSV文件:

(1)cutomers.csv

customers.csv:
customerId:ID(Customer), name
23, Delicatessen Inc
42, Delicious Bakery

(2)products.csv

products.csv:
productId:ID(Product), name, price, :LABEL
11,Chocolate,10,Product;Food

(3)orders_header.csv

orders_header.csv:
orderId:ID(Order),date,total,customerId:IGNORE

(4)customer_orders_header.csv

customer_orders_header.csv:
:END_ID(Order),date:IGNORE,total:IGNORE,:START_ID(Customer)

(5)orders1.csv

orders1.csv:
1041,2020-05-10,130,23

(6)orders2.csv

orders2.csv:
1042,2020-05-12,20,42

(7)order_details.csv

order_details.csv:
:START_ID(Order),amount,price,:END_ID(Product)
1041,13,130,11
1042,2,20,11

?執(zhí)行如下neo4j-admin命令:

../bin/neo4j-admin import --database=orders
     --nodes=Customer=import/customers.csv
     --nodes=import/products.csv
     --nodes=Order="import/orders_header.csv,import/orders1.csv,import/orders2.csv"
     --relationships=CONTAINS=import/order_details.csv
     --relationships=ORDERED="import/customer_orders_header.csv,import/orders1.csv,orders2.csv"
     --trim-strings=true

?(注:此處為了便于閱讀使用分行顯示,實際操作時不分行,用空格隔開)

執(zhí)行后:

  1. 創(chuàng)建了名為orders的新數(shù)據(jù)庫(--database=orders);
  2. 創(chuàng)建了LABEL為Customer的節(jié)點,節(jié)點文件為customers.csv:節(jié)點1:ID(編號)為23,name(屬性名稱)為Delicatessen Inc;節(jié)點2:ID(編號)為42,name(屬性名稱)為Delicious Bakery;這里表頭customerId:ID(Customer)的Customer定義了該節(jié)點的group為Customer,目的是防止在跨實體查詢節(jié)點編號時有重復(fù)的ID編號。
  3. 創(chuàng)建了LABEL為Product和Food的節(jié)點(LABEL定義來自products.csv的表頭),節(jié)點文件為products.csv,節(jié)點1:ID(編號)為11,name(屬性:名稱)為Chocolate,price(屬性:價格)為10。
  4. 創(chuàng)建了LABEL為Order的節(jié)點,節(jié)點文件為orders_header.csv、orders1.csv、orders2.csv,節(jié)點1:ID(編號)為1041,date(屬性:日期)為2020-05-10,total(屬性:總數(shù))為130;節(jié)點2:ID(編號)為1042,date(屬性:日期)為2020-05-12,total(屬性:總數(shù))為20。:IGNORE列表示省略(該列設(shè)置的目的是為了對應(yīng)orders1.csv和orders2.csv的數(shù)據(jù)列,這兩個文件被重復(fù)使用)
  5. 創(chuàng)建了關(guān)系類型Type為CONTAINS的關(guān)系,關(guān)系文件為orders_details.csv,關(guān)系1:START_ID(起始節(jié)點編號)為group為Order的1041,END_ID(結(jié)束節(jié)點編號)為group為Product的11,amount(屬性:數(shù)量)為13,price(屬性:價格)為130;關(guān)系2:START_ID(起始節(jié)點編號)為group為Order的1042,END_ID(結(jié)束節(jié)點編號)為group為Product的11,amount(屬性:數(shù)量)為2,price(屬性:價格)為20。
  6. 創(chuàng)建了關(guān)系類型Type為ORDERED的關(guān)系,關(guān)系文件為customer_orders_header.csv、orders1.csv、orders2.csv,關(guān)系1:START_ID(起始節(jié)點編號)為group為Customer的23,END_ID(結(jié)束節(jié)點編號)為group為Order的1041,關(guān)系無屬性;關(guān)系2:START_ID(起始節(jié)點編號)為group為Customer的42,END_ID(結(jié)束節(jié)點編號)為group為Order的1042,無其他關(guān)系屬性。
  7. 設(shè)置trim-strings=true表示:如字符串值為空白行,則認(rèn)為該值為null。

五、導(dǎo)入后在neo4j browser/desktop查詢數(shù)據(jù)

  1. 使用neo4j-admin import前關(guān)閉server;
  2. 執(zhí)行neo4j-admin import命令,database=dbName,確認(rèn)導(dǎo)入成功;
  3. 打開neo4j browser/desktop server;
  4. 創(chuàng)建與database名稱相同的數(shù)據(jù)庫(即執(zhí)行:create database?dbName),切換到該數(shù)據(jù)庫(dbName)后即可使用查詢語句。

參考:Re: Neo4j-admin import successful but no data show... - Neo4j - 13384neo4j import顯示成功但是查詢沒有數(shù)據(jù)_mydoubts的博客-CSDN博客_neo4j導(dǎo)入csv文件成功但查不到數(shù)據(jù)

本文參考neo4j官方文檔:

Import - Operations Manual

Importing CSV Data into Neo4j - Developer Guides文章來源地址http://www.zghlxwxcb.cn/news/detail-789966.html

到了這里,關(guān)于neo4j學(xué)習(xí)筆記:使用neo4j-admin import命令批量處理CSV文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包