프로젝트 소개

GraFlo는 파일, SQL 데이터베이스, RDF, REST API 또는 Kafka 토픽의 레코드를 레이블 지정 속성 그래프로 변환하는 Python 라이브러리입니다. 매니페스트라고 하는 YAML 파일에 그래프를 한 번 기술하면, GraFlo가 스키마를 생성하고 선택한 그래프 데이터베이스나 디스크의 디렉터리에 정점과 간선을 기록합니다. 여러 소스에서 그래프를 구축하는 엔지니어로서, 로드 스크립트 전반에 흩어지는 대신 검토 가능한 하나의 파일에 그래프 설명을 두고자 하는 사람을 위한 도구입니다. ## 할 수 있는 일 - **그래프를 한 번 기술하고 데이터를 로드합니다.** 매니페스트는 정점과 간선 유형의 이름을 지정하고, 어떤 속성이 정점을 식별하는지 밝히며, 각 종류의 레코드가 어떻게 정점과 간선이 되는지 설명합니다. 동일한 매니페스트로 ArangoDB, Neo4j, TigerGraph, FalkorDB, Memgraph, NebulaGraph, PostgreSQL 또는 파일 백엔드에 로드할 수 있으며, 동일한 아이덴티티를 가진 레코드는 하나의 정점이 됩니다. GraFlo는 기존 그래프를 Neo4j, ArangoDB 또는 PostgreSQL에서 다른 데이터베이스로 복사할 수도 있습니다(`GraphEngine.migrate_graph`). - **기록된 이력과 함께 시간에 따라 설명을 변경합니다.** 유형 이름 변경, 두 유형 결합 또는 속성 유형 변경은 타입이 지정된 작업입니다. 작업은 커밋(`graflo commit`, `log`, `checkout`, `verify`, `revert`)으로 기록되어 재생, 확인할 수 있고 대부분의 작업은 되돌릴 수 있습니다. 하나의 매니페스트에 대한 두 브랜치의 변경은 삼방향 병합(`graflo merge3`)으로 조정되고, 서로 다른 팀이 작성한 두 매니페스트는 유니온(`graflo merge`)으로 하나로 결합됩니다. - **설명을 확인하고 추론합니다.** GraFlo는 PostgreSQL 데이터베이스나 OWL 온톨로지에서 매니페스트를 추론하고, 샘플 데이터에서 레코드를 식별하는 속성을 제안하며, 적합성 프로파일(`graflo check`)에 대해 매니페스트를 검사합니다. 적합성 프로파일은 "모든 정점 유형은 자신의 아이덴티티를 선언한다"와 같은 모델링 규칙의 집합입니다. ## 맛보기 매니페스트에는 세 개의 블록이 있습니다. `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/): 두 개의 CSV 파일을 그래프로 만드는 단계별 안내 - [매니페스트 만들기](https://growgraph.github.io/graflo/getting_started/creating_manifest/): 매니페스트의 세 블록 - [예제](https://growgraph.github.io/graflo/examples/): 각각 하나의 질문을 다루는 실행 가능한 예제와 [`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/)를 참조하세요. 기여자는 첫 풀 리퀘스트에 댓글을 달아 [기여자 라이선스 계약](https://github.com/growgraph/graflo/blob/main/CLA.md)에 한 번 동의합니다.