このプロジェクトについて

GraFloは、ファイル、SQLデータベース、RDF、REST API、Kafkaトピックからのレコードをラベル付きプロパティグラフに変換するPythonライブラリです。マニフェストと呼ばれるYAMLファイルでグラフを一度記述すると、GraFloがスキーマを作成し、選択したグラフデータベースまたはディスク上のディレクトリに頂点とエッジを書き込みます。 複数のソースからグラフを構築し、その記述をロードスクリプトに分散させるのではなく、レビュー可能な1つのファイルにまとめたいエンジニア向けです。 ## できること - **グラフを一度記述し、データをロードする。** マニフェストは頂点タイプとエッジタイプを指定し、どのプロパティが頂点を識別するかを示し、各種レコードがどのように頂点とエッジになるかを定義します。同じマニフェストでArangoDB、Neo4j、TigerGraph、FalkorDB、Memgraph、NebulaGraph、PostgreSQL、またはファイルバックエンドにロードでき、同じ識別子を持つレコードは1つの頂点になります。GraFloは既存のグラフをNeo4j、ArangoDB、PostgreSQLから別のデータベースにコピーすることもできます(`GraphEngine.migrate_graph`)。 - **履歴を記録しながら記述を変更する。** タイプの名前変更、2つのタイプの統合、プロパティタイプの変更は型付き操作です。操作はコミットとして記録され(`graflo commit`、`log`、`checkout`、`verify`、`revert`)、再生、確認、そしてほとんどの操作では取り消しが可能です。1つのマニフェストに対する2つの変更ブランチは三方マージで統合され(`graflo merge3`)、異なるチームが作成した2つのマニフェストはユニオンで1つに結合されます(`graflo merge`)。 - **記述の確認と推論。** GraFloはPostgreSQLデータベースまたはOWLオントロジーからマニフェストを推論し、サンプルデータからレコードを識別するプロパティを提案し、「すべての頂点タイプが識別子を宣言している」などのモデリングルールの集合である適合プロファイルに対してマニフェストをチェックします(`graflo check`)。 ## 概要 マニフェストには3つのブロックがあります。`schema`はグラフの構造を示し、`ingestion_model`はレコードがグラフにどのようにマッピングされるかを示し、`bindings`はレコードの取得元を示します。以下は`person_id`、`person`、`department`の列を持つCSVファイルを読み込む例です。 ```yaml schema: metadata: {name: hr} graph: vertex_config: vertices: - {name: person, properties: [id, name], identity: [id]} - {name: department, properties: [name], identity: [name]} edge_config: edges: [{source: person, target: department}] ingestion_model: resources: - name: departments pipeline: - {vertex: person, from: {id: person_id, name: person}} - {vertex: department, from: {name: department}} bindings: connectors: - {regex: "^dep.*\\.csv$", sub_path: data, resource_name: departments} ``` これはArangoDBにロードします。 ```python from graflo import GraphEngine, GraphManifest from graflo.connections import ArangoConfig manifest = GraphManifest.from_yaml("manifest.yaml") manifest.finish_init() engine = GraphEngine() engine.define_and_ingest(manifest=manifest, target_db_config=ArangoConfig.from_env()) ``` `ArangoConfig.from_env()`は`ARANGO_URI`、`ARANGO_USERNAME`、`ARANGO_PASSWORD`、`ARANGO_DATABASE`を読み取ります。すべてのデータベースにこのようなクラスがあります。[データベース接続](https://growgraph.github.io/graflo/guides/database_connections/)を参照してください。 ## ドキュメント 完全なドキュメント: [growgraph.github.io/graflo](https://growgraph.github.io/graflo) - [クイックスタート](https://growgraph.github.io/graflo/getting_started/quickstart/): 2つのCSVファイルからグラフへ、ステップバイステップ - [マニフェストの作成](https://growgraph.github.io/graflo/getting_started/creating_manifest/): マニフェストの3つのブロック - [例](https://growgraph.github.io/graflo/examples/): 実行可能な例、各1つの質問、データは[`examples/`](https://github.com/growgraph/graflo/tree/main/examples)にあります - [コンセプト](https://growgraph.github.io/graflo/concepts/): スキーマ、識別子、インジェスト、コネクタ、進化とバージョン管理 - [ガイド](https://growgraph.github.io/graflo/guides/): データベース接続、グラフ移行、スキーマ推論、API配線、バルクロード - [GraFloオントロジー](https://growgraph.github.io/graflo/concepts/schema/ontology/): RDFとしてのマニフェスト(`graflo manifest-to-rdf`、`graflo rdf-to-manifest`) ## インストール GraFloにはPython 3.11以降が必要です。データベースクライアント、RDF、Kafkaサポートはデフォルトインストールに含まれています。 ```bash pip install graflo ``` オプションの追加機能([インストール](https://growgraph.github.io/graflo/getting_started/installation/)ガイドを参照): - `dev`: pytestとそのプラグイン、hypothesis、ty、pre-commit - `docs`: ProperDocsとそのプラグイン、ドキュメントサイトのビルド用 - `plot`: `graflo plot-manifest`および`graflo merge`と`graflo merge3`の`--plot`図用の`pygraphviz` ```bash pip install "graflo[dev,docs,plot]" ``` ## 開発 クローンからインストールするには: ```shell git clone [email protected]:growgraph/graflo.git && cd graflo uv sync --extra dev ``` 完全なワークフローについては[コントリビューションガイド](https://growgraph.github.io/graflo/contributing/)を参照してください。 ### テスト データベーステストにはデータベースコンテナが必要です。クローンから[docker/](https://github.com/growgraph/graflo/tree/main/docker)のスクリプトで起動します。 ```shell cd docker ./start-all.sh # すべてのサービスを起動 ./stop-all.sh # すべてのサービスを停止 ./cleanup-all.sh # コンテナとボリュームを削除 ``` エンジンごとのcomposeファイルとポートは[docker README](https://github.com/growgraph/graflo/blob/main/docker/README.md)に記載されています。 テストを実行するには: ```shell uv run pytest test ``` TigerGraph、NebulaGraph、Kafkaのテストは、`--run-tigergraph`、`--run-nebula`、`--run-kafka`を渡さない限りスキップされます。 データベースを必要としないスイートはコンテナなしで実行され、CIはすべてのプルリクエストでそれらを実行します。 ```shell uv run pytest test --ignore=test/db --ignore=test/data_source --ignore=test/object_storage ``` ## ライセンス [Apache License 2.0](https://github.com/growgraph/graflo/blob/main/LICENSE)の下でオープンソースです。著作権および商標の通知は[NOTICE](https://github.com/growgraph/graflo/blob/main/NOTICE)にあります。ライセンスは**GraFlo**および**GrowGraph**のマークに関する権利を付与しません。再ライセンス前のリリースはBusiness Source License 1.1の下で提供され、その条件が維持されます。[変更履歴](https://github.com/growgraph/graflo/blob/main/CHANGELOG.md)を参照してください。 ## コントリビューション コントリビューションを歓迎します。[コントリビューションガイド](https://growgraph.github.io/graflo/contributing/)を参照してください。コントリビューターは最初のプルリクエストにコメントすることで、[Contributor License Agreement](https://github.com/growgraph/graflo/blob/main/CLA.md)に一度同意します。