28.1.4.1 カンマ区切り値(CSV)

CSV形式はテキスト・ファイル形式で、頂点とエッジが別々のファイルに格納されます。ファイルの各行が頂点またはエッジを表します。頂点キーとラベル、エッジ・キー、出力、入力とラベル、およびアタッチされたプロパティが、ファイル・ヘッダー(最初の行)および構成で指定された順序で格納されます。

V個の頂点のそれぞれにN個の頂点プロパティとK個の近隣があり、E個のエッジにM個のエッジ・プロパティがあるグラフは、CSVでは次のように表されます。

vertices.csv

<V-1>,<VL-1>,<V-1, NP-1>,...,<V-1, NP-N>
<V-2>,<VL-2>,<V-2, NP-1>,...,<V-2, NP-N>
...
<V-V>,<VL-N>,<V-V, NP-1>,...,<V-V, NP-N>
edges.csv

<E-1>,<V-1>,<V-1, VG-1>,<EL-1>,<E-1, EP-1>,...,<E-1, EP-M>
...
<E-K>,<V-1>,<V-1, VG-K>,<EL-N>,<E-K, EP-1>,...,<E-K, EP-M>
<E-K+1>,<V-2>,<V-2, VG-1>,<EL-N+1>,<E-K+1, EP-1>,...,<E-K+1, EP-M>
...
<E-V*K>,<V-V>,<V-V, VG-K>,<EL-V*K>,<E-V*K, EP-1>,...,<E-V*K, EP-M>

例28-1 ヘッダー詳細を含むCSVファイルからのグラフのロード

次の例は、2つの頂点と2つのエッジを含むグラフをロードするためのグラフ構成ファイルを示しています。

vertices.csv

key,integer_prop,string_prop
1,33,"Alice"
2,42,"Bob"
edges.csv

source,dest,integer_prop,string_prop
1,2,0,"baz"
2,2,-12,"bat"

対応するグラフ構成ファイルは次のとおりです。

{
    "name": "simple graph",
    "vertex_providers": [
        {
            "format": "csv",
            "header": true,
            "name": "vertices",
            "key_type": "integer",
            "key_column": "key",
            "props": [
                {
                    "name": "integer_prop",
                    "type": "integer"
                },
                {
                    "name": "string_prop",
                    "type": "string"
                }
            ],
            "uris": ["vertices.csv"]
        }
    ],
    "edge_providers": [
        {
            "format": "csv",
            "name": "edges",
            "header": true,
            "source_vertex_provider": "vertices",
            "destination_vertex_provider": "vertices",
            "source_column": "source",
            "destination_column": "dest",
            "props": [
                {
                    "name": "integer_prop",
                    "type": "integer"
                },
                {
                    "name": "string_prop",
                    "type": "string"
                }
            ],
            "uris": ["edges.csv"]
        }
    ]
}

例28-2 ヘッダー詳細のないCSVファイルからのグラフのロード

次の例は、2つの頂点と2つのエッジを含むグラフをロードするためのグラフ構成ファイルを示しています。

vertices.csv

1,33,"Alice"
2,42,"Bob"
edges.csv

1,2,0,"baz"
2,2,-12,"bat"

対応するグラフ構成ファイルは次のとおりです。列索引が列名のかわりに指定されていることに注目してください。

{
    "name": "simple graph",
    "vertex_providers": [
        {
            "format": "csv",
            "name": "vertices",
            "key_type": "integer",
            "key_column": 1,
            "props": [
                {
                    "name": "integer_prop",
                    "type": "integer",
                    "column": 2
                },
                {
                    "name": "string_prop",
                    "type": "string",
                    "column": 3
                }
            ],
            "uris": ["vertices.csv"]
        }
    ],
    "edge_providers": [
        {
            "format": "csv",
            "name": "edges",
            "source_vertex_provider": "vertices",
            "destination_vertex_provider": "vertices",
            "source_column": 1,
            "destination_column": 2,
            "props": [
                {
                    "name": "integer_prop",
                    "type": "integer",
                    "column": 3
                },
                {
                    "name": "string_prop",
                    "type": "string",
                    "column": 4
                }
            ],
            "uris": ["edges.csv"]
        }
    ]
}
構成ファイルに列索引が設定されていない場合、列の順序は次のように想定されます。
  • 頂点ファイルの場合: - 頂点ID - 頂点ラベル(存在する場合) - 構成で宣言された順序の頂点プロパティ
  • エッジ・ファイルの場合: - エッジID (存在する場合) - エッジ出力 - エッジ入力 - エッジ・ラベル(存在する場合) - 構成で宣言された順序のエッジ・プロパティ

したがって、前の構成は次と同等です。

{
    "name": "simple graph",
    "vertex_providers": [
        {
            "format": "csv",
            "name": "vertices",
            "props": [
                {
                    "name": "integer_prop",
                    "type": "integer",
                    "column": 2
                },
                {
                    "name": "string_prop",
                    "type": "string",
                    "column": 3
                }
            ],
            "uris": ["vertices.csv"]
        }
    ],
    "edge_providers": [
        {
            "format": "csv",
            "name": "edges",
            "source_vertex_provider": "vertices",
            "destination_vertex_provider": "vertices",
            "props": [
                {
                    "name": "integer_prop",
                    "type": "integer",
                    "column": 3
                },
                {
                    "name": "string_prop",
                    "type": "string",
                    "column": 4
                }
            ],
            "uris": ["edges.csv"]
        }
    ]
}