0
グラフデータベースが初めてです。私のプロジェクトはRstudio経由でneo4j 3.2.0にアクセスしています。私のデータ入力のサイファークエリ内の制約、ノード、およびリレーションシップの作成
スナップショット:
ヘッド(cleandata)
TimeSeconds ipLayerProtocol firstSeenSrcIp firstSeenSrcPort firstSeenDestIp firstSeenDestPort
1 1365582756 17 172.20.2.3 29961 239.255.255.250 1900
2 1365582756 17 172.20.2.18 29986 239.255.255.250 1900
3 1365582756 17 172.20.2.17 29985 239.255.255.250 1900
マイ所望の出力:私がやりたい何
: などは以下の5000
のバッチで一度に複数のCYPHERステートメントを含むクエリをコミットするコードです:遭遇
query = "
CREATE CONSTRAINT ON (ipcluster:IPCluster) ASSERT ipcluster.ip IS UNIQUE
CREATE CONSTRAINT ON (origin:IPNode) ASSERT origin.ipport IS UNIQUE
CREATE CONSTRAINT ON (dest:IPNode) ASSERT dest.ipport IS UNIQUE
MERGE (ipcluster:IPCluster {ip: {SrcIP} })
CREATE (flow:Flow {timestamp: {TimeSeconds},protocol:{TransportProto} })
SET flow.timestamp = TOINT({TimeSeconds})
MERGE (origin:IPNode {ip: {SrcIP}, port: {SrcPort}, ipport:{SrcIP+':'+SrcPort} })
MERGE (dest:IPNode {ip: {DstIP}, port: {DstPort},ipport:{DstIP+':'+DstPort} })
MERGE (ipcluster)-[has:HAS]->(origin)
CREATE (flow)-[o:ORIGIN]->(origin)
CREATE (flow)-[d:DESTINATION]->(dest)
"
t1 <- Sys.time()
tx = newTransaction(graph)
for(i in 1:nrow(cleandata)) {
row = cleandata[i, ]
appendCypher(tx, query,
SrcIP=row$firstSeenSrcIp,
SrcPort=row$firstSeenSrcPort,
TimeSeconds=row$TimeSeconds,
TransportProto=row$ipLayerProtocol,
DstIP=row$firstSeenDestIp,
DstPort=row$firstSeenDestPort)
}
commit(tx)
t2 <- Sys.time()
t2 - t1
summary(graph)
エラー:
Error in appendCypher.transaction(tx, query, SrcIP = row$firstSeenSrcIp, :
Neo.ClientError.Statement.SyntaxError
Invalid input 'C': expected whitespace, comment, ';' or end of input (line 2, column 74 (offset: 76))
はいこれまでに試したことがあります。次のエラーメッセージが表示されたら、「クエリ内に複数のステートメントを含めることはできません」 – Serene
まず最初に、制約をn回作成するようです。 appendCypherメソッドは何をしていますか? –
appendcypherは各データ行のtimesecondsなどの必要なデータを取得し、その間にipnodes/constraints/relationshipを作成しようとしています。それが私が理解していることです。私の理解が間違っていれば私を修正してください。ありがとうございました。 – Serene