學(xué)習LOAD CSV??
???????在使用Neo4j進行大量數(shù)據(jù)導(dǎo)入的時候,發(fā)現(xiàn)如果用代碼自動一行一行的導(dǎo)入效率過低,因此明白了為什么需要用到批量導(dǎo)入功能,在Neo4j中允許批量導(dǎo)入CSV文件格式,剛開始從網(wǎng)上的中看了各種半殘的博客或者視頻,拼拼湊湊也實現(xiàn)了功能,然后想寫個博客記錄一下,一想直接把代碼沾上來講的也不是很全面,就打算按照官方文檔的思路講一下,然后給中間補充一些文檔中往往會省略的實踐細節(jié),故有了這篇博客,在對官方文檔的翻譯中加入自己對技術(shù)的理解會比機翻或者要求嚴格的文檔更好理解一些。本文只介紹前幾個常用的節(jié)點和關(guān)系的批量導(dǎo)入不然內(nèi)容太多了,后面不常用的就先不介紹了。
閱讀本文需要對Neo4j的基礎(chǔ)知識有一些了解,如果還沒有學(xué)習,可以閱讀本文章的前置文章。
Neo4j 新手教程 環(huán)境安裝 基礎(chǔ)增刪改查 python鏈接 常用操作 純新手向
首先給出Neo4j的官方文檔的地址:
https://neo4j.com/docs/cypher-manual/current/clauses/load-csv/

1.LOAD CSV 簡介
LOAD CSV 是用來將CSV文件導(dǎo)入到Neo4j數(shù)據(jù)集當中的。
LOAD CSV FROM 'https://data.neo4j.com/bands/artists.csv'
AS row
MERGE (:Artist {name: row[1], year: toInteger(row[2])})
-
FROM
后面接一個文件所在路徑的字符串 - 命令是一行一行處理文件的,每次處理的時候,用AS將這一行的數(shù)據(jù)臨時存儲在一個變量里(在這個例子中這個變量是row)
- 用MERGE訪問row變量然后存入到數(shù)據(jù)集中
LOAD CSV 支持本地和遠程的URL,本地路徑關(guān)聯(lián)在Neo4j的數(shù)據(jù)庫的文件夾中。
URL Uniform Resource Locator
雅稱:統(tǒng)一資源定位符
俗稱:文件路徑(新手可以直接這嗎理解,雖然嚴格意義不準確)
2. Import CSV data into Neo4j 把CSV導(dǎo)入Neo4j 極簡版(重要)
???????可以將CSV文件保存在本地數(shù)據(jù)集的文件夾import下面,然后使用一個file:///
前綴名字。下面是官方給的一個例子,接下來我們具體實際操作一下
???????首先是保存這個csv文件,首先我們直接來一個簡單的txt直接過去,之后再做用excel轉(zhuǎn)的,直接新建一個txt然后粘進去。
1,ABBA,1992
2,Roxette,1986
3,Europe,1979
4,The Cardigans,1992
???????然后點右上角的文件選擇另存為,然后進入到Neo4j的import文件夾的目錄下
???????之后把文件后綴的txt直接改為csv,然后確認一下文件編碼為UTF-8
???????然后打開該目錄你會看到一個csv文件
???????用excel打開看一眼,嗯!
???????然后打開Neo4j的控制臺。在上方的命令框輸入命令
LOAD CSV FROM 'file:///artists.csv' AS row
MERGE (a:Artist {name: row[1], year: toInteger(row[2])})
RETURN
a.name,
a.year
如果不知道如何打開請移步愚作:Neo4j 新手教程 環(huán)境安裝 基礎(chǔ)增刪改查 python鏈接 常用操作 純新手向
???????按下Ctrl+Enter或者右上側(cè)的藍色小三角運行命令,運行結(jié)果如下,導(dǎo)入成功。
???????如果不想保存到數(shù)據(jù)庫文件的import文件夾下,直接換成本地路徑直接導(dǎo)入,例如直接把文件復(fù)制到E盤,然后把路徑直接換成E:/artists.csv
結(jié)果是不行。
???????為了解決這個問題需要求改Neo4j數(shù)據(jù)庫的配置文件,首先在數(shù)據(jù)庫的conf文件下下找到neo4j.conf
文件然后用記事本打開。
找到這個serve.directories.import=import
給它前面加一個#號注釋掉
注釋之后變成這樣
???????然后Ctrl+S保存一下,或者關(guān)閉的時候點一下也行,然后把E:/artists.csv
改成'file:///E:/artists.csv'
然后再運行,成功!
file:///
必須加,不加報錯- 在配置文件中注釋了
server.directories.import=import
之后,把路徑設(shè)置回file:///artists.csv
,也依舊可以從Import文件下下導(dǎo)入文件
LOAD CSV FROM 'file:///E:/artists.csv' AS row
MERGE (a:Artist {name: row[1], year: toInteger(row[2])})
RETURN
a.name,
a.year
3.Import compressed CSV files 導(dǎo)入壓縮的csv文件
???????LOAD CSV
也可以上傳壓縮成ZIP的CSV文件,不管套了幾個文件,最后這個ZIP文件里只能有一個CSV文件,文檔里寫的太官方,我這里嘗試重新描述一下,然后再給它分幾種情況測一測,挖一挖它這個功能。
好現(xiàn)在import文件下直接右鍵CSV
壓縮一層得到一個zip壓縮包
然后再Neo4j控制臺導(dǎo)入OK成功
LOAD CSV FROM 'file:///artists.zip' AS row
MERGE (a:Artist {name: row[1], year: toInteger(row[2])})
RETURN
a.name,
a.year
然后將壓縮文件從import目錄移動到E盤,然后運行OK
LOAD CSV FROM 'file:///E:/artists.zip' AS row
MERGE (a:Artist {name: row[1], year: toInteger(row[2])})
RETURN
a.name,
a.year
然后開始套娃
首先套了兩層文件
然后將套娃文件打包成zip
然后運行ok可行
接下來套娃的時候把套娃的文件夾名字修改一下,先修改一下套娃中間文件夾的名字,給它改成a再打包再運行
OK可行
然后把套娃最外層的文件夾的名字改了,改成和CSV文件的名字不一致,然后打包成zip
這個不可行
然后把最外層的文件夾名字改成和CSV一致,然后在artist.csv在路徑下加一些奇奇怪怪的文件,然后再打包成zip然后運行
可行
然后在路徑下加個其他的csv文件,然后再打包成csv然后運行OK可行
結(jié)論:和文檔中的描述基本一致,就說最外層文件夾的名字得和要導(dǎo)入的csv文件一致,最外層文件夾名字是哪個就讀哪個CSV
桀桀桀!感受到中國算法工程師的執(zhí)著了嗎Neo4j的官方人員(笑)。
4.Import data from relational databases 導(dǎo)入關(guān)聯(lián)數(shù)據(jù)(重要)
???????在官方文檔中給了這樣一個例子,一個數(shù)據(jù)和其作者的數(shù)據(jù)集,那這里不但包含著作者和書籍的節(jié)點node,還包含著A作者寫了B書的一個關(guān)系relationship
???????接下來老操作,直接復(fù)制到txt文件然后給它轉(zhuǎn)存成UTF-8編碼的csv,文件名字是books,要是忘了咋操作或者跳讀到這的話,翻回到上面的這里。
Import CSV data into Neo4j 把CSV導(dǎo)入Neo4j 極簡版
id,title,author,publication_year,genre,rating,still_in_print,last_purchased
19515,The Heights,Anne Conrad,2012,Comedy,5,true,2023/4/12 8:17:00
39913,Starship Ghost,Michael Tyler,1985,Science Fiction|Horror,4.2,false,2022/01/16 17:15:56
60980,The Death Proxy,Tim Brown,2002,Horror,2.1,true,2023/11/26 8:34:26
18793,Chocolate Timeline,Mary R. Robb,1924,Romance,3.5,false,2022/9/17 14:23:45
67162,Stories of Three,Eleanor Link,2022,Romance|Comedy,2,true,2023/03/12 16:01:23
25987,Route Down Below,Tim Brown,2006,Horror,4.1,true,2023/09/24 15:34:18
ok好的看一下,然后右側(cè)的這個時間是縮略了,展開就能看見了不用害怕。
// Create `Book` nodes 導(dǎo)入節(jié)點
LOAD CSV WITH HEADERS FROM 'file:///books.csv' AS row
MERGE (b:Book {id: row.id, title: row.title})
MERGE (a:Author {name: row.author});
// Create `WROTE` relationships 導(dǎo)入關(guān)系
LOAD CSV WITH HEADERS FROM 'file:///books.csv' AS row
MATCH (a:Author{name: row.author})
MATCH (b:Book{id: row.id})
MERGE (a)-[:WROTE]->(b);
這段代碼使用了Cypher查詢語言來處理兩個主要任務(wù):
首先,它從一個CSV文件中導(dǎo)入數(shù)據(jù)來創(chuàng)建Book和Author節(jié)點;
其次,它基于相同的CSV文件創(chuàng)建這些Book和Author節(jié)點之間的WROTE關(guān)系。下面是對這兩個過程的詳細解釋:
第一部分:創(chuàng)建Book和Author節(jié)點
LOAD CSV WITH HEADERS FROM 'file:///books.csv' AS row
MERGE (b:Book {id: row.id, title: row.title})
MERGE (a:Author {name: row.author});
-
LOAD CSV WITH HEADERS FROM 'file:///books.csv' AS row
這條命令告訴Neo4j從給定的路徑file:///books.csv'
加載一個CSV文件,該文件具有標題行(即每列的第一行包含列名)。AS row表示每一行數(shù)據(jù)都會被賦予變量名row,之后可以通過這個變量訪問行中的數(shù)據(jù)。 -
MERGE (b:Book {id: row.id, title: row.title})
:MERGE命令用于創(chuàng)建一個新的Book節(jié)點,或者如果具有相同id和title屬性的節(jié)點已經(jīng)存在,則匹配(不重復(fù)創(chuàng)建)該節(jié)點。這里,row.id和row.title是從CSV文件中讀取的每一行的對應(yīng)列數(shù)據(jù)。 -
MERGE (a:Author {name: row.author})
:類似地,這條命令用于創(chuàng)建或匹配一個Author節(jié)點,其name屬性由當前行的author列提供。
第二部分:創(chuàng)建WROTE關(guān)系
LOAD CSV WITH HEADERS FROM 'file:///books.csv' AS row
MATCH (a:Author{name: row.author})
MATCH (b:Book{id: row.id})
MERGE (a)-[:WROTE]->(b);
- 加載數(shù)據(jù)部分一樣
-
MATCH (a:Author{name: row.author})和MATCH (b:Book{id: row.id})
:這兩個MATCH命令分別用于查找當前行中提到的Author和Book節(jié)點。它們通過比較name和id屬性與文件中的相應(yīng)列來定位節(jié)點。 -
MERGE (a)-[:WROTE]->(b)
:最后,MERGE命令用來創(chuàng)建一個新的WROTE關(guān)系,從找到的Author節(jié)點指向Book節(jié)點。如果這樣的關(guān)系已經(jīng)存在,則不會創(chuàng)建重復(fù)的關(guān)系。
然后運行上訴代碼這里我把URL改成本地了,而文檔中用的是網(wǎng)絡(luò)URL,這里還是先了解怎么在本地導(dǎo)入節(jié)點和關(guān)系網(wǎng)絡(luò)導(dǎo)入暫時不需要
然后點一下這個WROTE,ok完美文章來源:http://www.zghlxwxcb.cn/news/detail-840641.html
結(jié)束
???????然后文檔的后面還有一些增加屬性以及處理數(shù)據(jù)例如去除Null值等諸如此類的工作,不是重點暫時就先不介紹了。然后有個小麻煩的地方,在導(dǎo)入不同類別的數(shù)據(jù)的時候需要分批導(dǎo)入,類別參數(shù)不能直接用CSV中的導(dǎo)入值,我自己有個數(shù)據(jù)集有50類關(guān)系,我手動輸入了50次命令,我簡單了解了一下之后應(yīng)該可以用Foreach命令解決,這個問題會納入到后續(xù)的更新規(guī)劃當中。文章來源地址http://www.zghlxwxcb.cn/news/detail-840641.html
到了這里,關(guān)于Neo4j 批量導(dǎo)入數(shù)據(jù) 從官方文檔學(xué)習LOAD CSV 命令 小白可食用版的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!