g2glab / pg

PG Tools
MIT License
6 stars 1 forks source link

プロパティ値として配列を扱えるようにするかどうか #13

Closed ryotayamanaka closed 3 years ago

ryotayamanaka commented 5 years ago

現在は配列は扱えない。扱えるようにする場合、PG Flat および JSON-PG のフォーマットをどうするか。

ryotayamanaka commented 5 years ago
Bob    :person    nickname:Bobby    nickname:Bobbie
ryotayamanaka commented 5 years ago

ラベルのほうは

Bob    :person    :musician
ryotayamanaka commented 5 years ago

https://g2gml.readthedocs.io/en/latest/contents/pg-format.html

matsusho070 commented 5 years ago

案を一つ

100  :person nickname:Allie                             # -> nickname: Allie
101  :person nickname:[Allie]                           # -> nickname: [Allie]
102  :person nickname:Allie  nickname:Ellie   # -> nickname: [Allie, Ellie]
103  :person nickname:[Allie, Ellie]                  # -> nickname: [Allie, Ellie]
ryotayamanaka commented 5 years ago

配列か配列でないかを表現できるようにする 場合、上のようなシンタックスが必要となり、アプリケーション開発者にとっても直感的であると考えられる。

しかしながら、そもそも PG 形式はプロパティの型を定義していない = スキーマ定義していないため、あるプロパティ(nickname)が配列でない場合と配列である場合の混在は許されることとなり、これはアプリケーションでも扱いにくい。そこで、 配列であるかどうかをデータ上では表現しない こととして、単純に複数の値を許すために JSON では常に配列を用いることとする。

100  :person  nickname:Allie                             # -> nickname: [Allie]
101  :person  nickname:Allie  nickname:Ellie            # -> nickname: [Allie, Ellie]

また、Flat PG 上で配列のシンタックスを導入するかどうかはおいおい検討することとする。

102  :person  nickname:[Allie, Ellie]                    # -> nickname: [Allie, Ellie]
ryotayamanaka commented 5 years ago

Implementation of array datatype in each database.

Neo4j:

https://neo4j.com/docs/cypher-manual/current/syntax/values/

Homogeneous lists of simple types can also be stored as properties, although lists in general (see Composite types) cannot be stored.

Loading

https://neo4j.com/docs/operations-manual/3.5/tools/import/file-header-format/

To define an array type, append [] to the type. By default, array values are separated by ;. A different delimiter can be specified with --array-delimiter.

AWS:

https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-format-gremlin.html

Edge properties can only have a single value and will cause an error if an array type is specified or a second value is specified.

PGX:

https://docs.oracle.com/cd/E56133_01/latest/reference/loader/file-system/plain-text-formats.html

Vector properties with vector components of type integer, long, float and double can be loaded from these formats. In order to specify that a vertex or edge property is a vector property, the dimension field of the graph property configuration must be set to the dimension of the vector and be a strictly positive integer value.

ryotayamanaka commented 3 years ago

The syntax for the lists of property values has been already supported both in PG and JSON-PG (following the discussion above). https://pg-format.readthedocs.io/en/0.3/contents/pg-format.html

We need to consider the diffs in loading to databases.