fbpx

CL LAB

HOME > Blog > lee > Neo4j-大量データの読み込み 2015#neo4j

Neo4j-大量データの読み込み 2015#neo4j

 ★ 10

本記事は、「Neo4jの大量データインポート 2020 」にリニューアルしました。

Neo4jは、CSVファイルから大量データの読み込みを行います。CSVファイルの扱いは煩雑なイメージがあるかも知れませんが、そもそもNeo4jはスキーマレスのデータベースであるためにテーブルなどの事前準備が不用な上、ヘッダやデータタイプ設定、複数ファイルの扱いなどを考慮した専用ツールで簡単に大量データを扱うことができます。今回は、Neo4jのマニュアルで紹介されているCSVファイルを使って、LOAD CSVとneo4j-importの使用方法を解説します。

関連記事-CL-Lab
Neo4j-グラフデータベースとは
Cypher Query Language(QL)-構成要素編
Cypher Query Language(QL)-初級編
Neo4j-大量データの読み込み

関連記事-Qiita
WindowsでNeo4jを使ってみる
MacでNeo4jを使ってみる
SoftLayerでNeo4jを使ってみる
AWSでNeo4jを使ってみる
Neo4jウェブインターフェースを使い倒す

Neo4jの最適な利用方法について

他のデータベース及びデータストアとの連携

Neo4jは既存の様々なタイプのデータベースやデータストアからデータを抜き出して、速やかにサブジェクト毎のグラフデータベースを構築し、グラフ流の問題解決に臨むことを強く意識しています。とても複雑な関係性を含む問題、理想的な経路探し、ある種の異常パターンの検索、欠落した箇所の発見、ある種のパターンとパターン間の比較、レコメンデーションなどの問題は、Neo4jが卓越した能力を発揮できる領域です。このようなアプローチでは、対象の問題に関わるキー項目だけを抜き出して、グラフ構造のデータに集積して処理する方式が考えられます。

Bulk-data-etl

グラフデータベースのデータマート

Neo4jのグラフデータベースは一つのディレクトリの中に収まるようなとてもシンプルな構成になっています。そして、グラフデータベースの格納先を切り替えてNeo4jを再起動すれば、対象のグラフデータベースに接続できるようになっています。つまり、従来のデータマート的な使い方にぴったり当てはまります。Neo4jはデータパターンをメモリ上に展開するため、サイズが大きい多くの属性を持ったノードを広範囲にわたって集計するような処理に向いていません。しかし、広範囲であっても、分析に必要な少量のキー項目だけを持たせている場合は、おそらくグラフ問題以外の複雑な集計処理などにも応用できるでしょう。

Bulk-data-data-mart

2種類のインポート方式

CSVファイルを利用して大量データを読み込むには、「LOAD CSV」又は「neo4j-import」という2つの方式を利用します。

Neo4jでは、頻繁にJSON形式のデータを利用しています。主にアプリケーションがCypherクエリにパラメーターを引き渡す時や戻り値のコンテナーとして使っています。

LOAD CSV
LOAD CSVは、既存のデータベースに対してデータの取り込みを行います。LOAD CSVは、CSVファイルからデータを読み込んで、ノードや関係性の追加や削除、属性の追加、削除、更新などを行います。注意点としては、一時的にメモリを使うためにデータサイズがJavaのヒープメモリを超えてしまうとオーバーフローを起こし、処理途中のデータはすべてロールバックされてしまいます。但し、ヒープメモリのオーバーフローは回避策があります。非常にサイズが大きいCSVファイルを読み込むときは、「USING PERIODIC COMMIT number」のように、一度のトラザクションとして処理する行数を制限することができます。

Bulk-data-load-csv

neo4j-import
neo4j-importは、CSVファイルからデータを取り込み、新規のデータベースを構築します。この方式では、登録するノードに対し、データベース全体で一意的なIDを付与する必要があります。そしてノード間の関連性の設定においても、始点ノードIDと終点ノードIDを指定する必要があります。この方式の用途としては、既存の関係型データベースや他のデータストアから抽出したデータをグラフデータベースへ移行することが考えられます。neo4j-importは、読み込んだデータから最低限の整合性のチェックなどを行いますが、グラフデータストアへダイレクトに流していくためにJavaのヒープメモリの問題は発生しません。そして、データの取り込みが終わった際には、「conf/neo4j-server.properties」の「org.neo4j.server.database.location=database-directory」のグラフデータベースの格納先ディレクトリを変更し、Neo4jを起動することで、新しいグラフデータベースに接続できます。

Bulk-data-neo4j-import

LOAD CSVの使用方法

以下では、Neo4jマニュアルのサンプルを使って、LOAD CSVの事例を数パターン説明します。

Load CSV(http://neo4j.com/docs/milestone/query-load-csv.htm)

CSVファイルのフォーマット

LOAD CSV で規定しているCSVファイルのフォーマットは、次のとおりです。

  • UTF-8
  • 改行は\n(Linux)/\r\n(windows)
  • デフォルトのデリミタ―はコンマ(,)です
  • 任意のデリミタ―も利用可能です。例えば、「IELDTERMINATOR ';'」のように定義できます
  • 文字列はダブルクォテーション("string")で囲むのが原則です。例えば、数字を文字として扱う場合や文字列に引用符がついている場合などです。特にデータタイプを意識しなくても良い場合は、省略しても問題ありません。
  • 引用符付きの文字列が使用可能です。読み込むときに、引用符は自動的に外されます。「The "Symbol"」のような結果を期待するデータの読み込みは「"The ""Symbol"""」のように設定します。
  • エスケープ文字は「\」を使います。上記の属性値の場合は、「"The \"Symbol\""」ように表現できます
  • CSVファイルの中にヘッダ(フィールド名)を指定する場合は、1行目に指定する必要があります。CSVファイルの中にヘッダを指定せず、ヘッダだけを別ファイルに指定することや、構文のなかで属性名を定義し、CSVファイルのなかの属性値とマッピングさせることも可能です。

LOAD CSVの実行方法

Neo4jウェブインターフェースの利用
コマンドラインのプロンプトに1構文ずつ入力して実行します。

neo4j-shellの利用
neo4j-shellの場合は、コマンドラインのプロンプトに入力する方法と、シェルスクリプトを書く方法があります。
次は、コマンドラインのプロンプトに入力する方法です。

$ neo4j-shell
neo4j-sh (?)$ LOAD CSV WITH HEADERS FROM "http://neo4j.com/docs/2.2.0-M04/csv/query-tuning/movies.csv" AS line
> MERGE (m:Movie { title:line.title })
> ON CREATE SET m.released = toInt(line.released), m.tagline = line.tagline;

次は、シェルでラッピングする方法です。

#!/bin/bash

neo4j-shell << EOF
LOAD CSV WITH HEADERS FROM "http://neo4j.com/docs/2.2.0-M04/csv/query-tuning/movies.csv" AS line
MERGE (m:Movie { title:line.title })
ON CREATE SET m.released = toInt(line.released), m.tagline = line.tagline;

LOAD CSV WITH HEADERS FROM "http://neo4j.com/docs/2.2.0-M04/csv/query-tuning/actors.csv" AS line
MATCH (m:Movie { title:line.title })
MERGE (p:Person { name:line.name })
ON CREATE SET p.born = toInt(line.born)
MERGE (p)-

Author

データベースが大好きなサーバサイドのエンジニア。現代的なデータ基盤のソリューションアーキテクトとして活動しています。

[著書]
グラフデータベースNeo4jの他
https://www.amazon.co.jp/李昌桓/e/B004LWEKOU

leeの記事一覧

CL LAB Mail Magazine

CL LABの情報を逃さずチェックしよう!

メールアドレスを登録すると記事が投稿されるとメールで通知します。

メールアドレス: 登録

※登録後メールに記載しているリンクをクリックして認証してください。

Related post

[無料ウェビナー] GitLab_CI/CDハンズオン_2023111