2017-02-08 5 views
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 

マイ所望の出力:私がやりたい何

Desired graph output

: などは以下の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)) 

答えて

0

私の簡単な賭けは予期せぬCは2番目の作成からです。最初の作成制約の終わりに。

+0

はいこれまでに試したことがあります。次のエラーメッセージが表示されたら、「クエリ内に複数のステートメントを含めることはできません」 – Serene

+0

まず最初に、制約をn回作成するようです。 appendCypherメソッドは何をしていますか? –

+0

appendcypherは各データ行のtimesecondsなどの必要なデータを取得し、その間にipnodes/constraints/relationshipを作成しようとしています。それが私が理解していることです。私の理解が間違っていれば私を修正してください。ありがとうございました。 – Serene

関連する問題