2016-03-23 8 views
1

私は概念証明をしており、少しガイダンスが必要です。 ID、名前、電子メール、性別、市区町村、都道府県、郵便番号、電話番号、AltPhone、SSN(すべての偽のデータ)の属性を含むフラットファイルがあります。neo4jモデル作成からフラットCSV

それぞれの人物はノードであり、各アドレスはノードであり、各ssnはノードであり、各電話機/ altphoneはノードであるとする。これは、不正行為の検出の例の多くを模倣することです。これらの関係を作成して、このCSVファイルをロードするにはどうすればよいですか?アドレスと電話番号が重複しますが、重複が存在する場合は1つのノードしか存在しません。

標準のLOAD CSVを使用してこれを行う方法はありますか、またはneoj4の外で関係なく、すべてのデータを分割する必要がありますか?

答えて

4

これは、MERGE Cypherコマンドを使用して実行できます。 MERGEは、パターンを探して存在しない場合は作成しますが、重複データは作成しません。

まず、データモデルに基づいて一意制約を定義します。

LOAD CSV WITH HEADERS FROM "file:///flat_file.csv" AS row 
MERGE (p:Person {personID: row.ID}) 
SET p.name = row.Name, 
    p.email = row.Email, 
    p.gender = row.Gender 
MERGE (phone:PhoneNumber {number: row.Phone}) 
MERGE (altPhone:PhoneNumber {number: row.AltPhone}) 
MERGE (ssn:SSN {number: row.SSN}) 
MERGE (address:StreetAddress {address: row.StreetAddress}) 
MERGE (city:City {name: row.City}) 
MERGE (state:State {name: row.State}) 
MERGE (p)-[:HAS_SSN]->(ssn) 
MERGE (p)-[:HAS_PHONE]->(phone) 
MERGE (p)-[:HAS_ALT_PHONE]->(altPhone) 
MERGE (p)-[:HAS_ADDRESS]->(address) 
MERGE (address)-[:IS_IN]->(city) 
MERGE (city)-[:IS_IN]->(state) 
+0

(これに近い)Tに続き、完璧に機能しました。どうもありがとうございます。今私は正しい方法でデータを照会するために調べる必要があります。私はいくつかのエントリーをセットアップして電話番号と住所を共有してくれました。小さなリングを作るべきです。 – Wes

2
:(必要なデータモデルによって異なります)、このようになります LOAD CSVMERGEを使用して、その後

CREATE CONSTRAINT ON (p:Person) ASSERT p.personID IS UNIQUE; 
CREATE CONSTRAINT ON (phone:Phone) ASSERT phone.number IS UNIQUE; 
... 

:あなたは、MERGE文で使用される任意のラベルプロパティの一意性制約を定義する必要があります

cypherステートメントをLOAD CSVに分割し、必要なものをステップごとに実行することをお勧めします。 1つのLOAD CSVステートメントですべてを行うわけではありません。

また、重複している可能性のある行については、インデックスの作成と参照先のMERGEを参照することをお勧めします。

ここにLOAD CSVを使用する際に考慮すべき点についてはgood articleです。

マークの投稿loading dataに投稿してください。マークにはすばらしい記事がたくさんあるので、彼のブログの周りを突き進めることをお勧めします。

最後にのcheck out the doc's

+0

しましょう。私はgraphDB(新しく2日间)のように新しくなっていますので、これはとても興味深いものです。 – Wes

関連する問題