iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
1
自我挑戰組

圖形資料庫是什麼,可以吃嗎 - Neo4j系列 第 27

Neo4j 綜合應用 & 來讀個 CSV 吧

前情提要

還記得第 16 篇的時候提過下面這個

嗯... 看到標題就知道,沒東西寫了呢,反正剩三篇就讓我能騙就騙吧x

LOAD CSV

竟然有玩 CSV 首先我們就需要一個 CSV 檔案

就用我之前無聊去打 GTA 5 Online API 抓回來的載具種類資料吧

檔案在此

先依照欄位,規劃一下資料吧

Name Vehicle__Name Vehicle__Cost
Label & Property Property Property

再來直接來寫入資料庫吧

記得將檔案丟到資料庫的 import 資料夾中才讀的到喔

LOAD CSV FROM "file:///GTA.csv" AS map
CALL apoc.create.node([map[0],"Vehicle"], {Name:map[0],VehicleName:map[1],VehicleCost:map[2]}) YIELD node 
RETURN count(*)

首先第一行 LOAD CSV FROM "file:///GTA.csv" AS map

為 Cypher 原始的 Load CSV 的指令

再來就是 CREATE Node 了

由於計畫是直接將 CSV 的資料直接當 Label 用

所以直接將第 17 篇提過的 APOC Plugins 叫出來用會比較方便

至於那個 map[0] 我不知道為什麼寫 map.Name 等會抓不到資料

反正這樣寫會過那就這樣吧

到這邊 Load CSV 的部分就完成了

再來來變個魔術吧

WITH ["Boats","Commercial","Compacts","Coupes","Cycles","Emergency","Helicopters","Industrial","Military","Motorcycles","Muscle","OffRoad","OpenWheel","Planes","Sedans","Service","Sports","SportsClassics","Super","Suvs","Utility","Vans"] AS CName
CREATE (gta:GTA{Name:"GTA"})
FOREACH ( n IN CName | CREATE (gta)-[:Type]->(:VehicleType{Name:n}))
MATCH (v:Vehicle),(vt:VehicleType)
WHERE v.Name = vt.Name
CREATE (vt)-[:Have]->(v)

執行上面兩段語法,你就會獲得這樣的資料結構

GTA -> VehicleType -> Vehicle

全部抓出來看是不是看起來很酷呢


隨便亂玩了一下資料

稍微模擬了一下大一點的資料庫看起來的樣子

隨然複雜度沒有很高就是了

29 篇的時候再來偷偷放複雜度更高的資料庫吧

下篇 來講講 Cypher 的 Coding Style 吧

究竟鐵人賽能不能完賽呢,讓我們繼續看下去


排版好看的版本同步更新在我的 HackMD


上一篇
打打看 Neo4j Http Api 吧
下一篇
來講講 Cypher 的 Coding Style 吧
系列文
圖形資料庫是什麼,可以吃嗎 - Neo4j30

尚未有邦友留言

立即登入留言