Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ caster.ingest(

```python
from graflo.db.postgres import PostgresConnection
from graflo.db.postgres.heuristics import infer_schema_from_postgres
from graflo.db.inferencer import infer_schema_from_postgres
from graflo.db.connection.onto import PostgresConfig
from graflo import Caster
from graflo.onto import DBFlavor
Expand Down
12 changes: 7 additions & 5 deletions docs/examples/example-5.md
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,8 @@ Automatically generate a graflo Schema from your PostgreSQL database. This is th
5. **Creates Resources**: Resource definitions are generated for each table with appropriate actors (VertexActor for vertex tables, EdgeActor for edge tables). Foreign keys are mapped to vertex matching keys.

```python
from graflo.db.postgres import infer_schema_from_postgres

from graflo.db.inferencer import infer_schema_from_postgres
from graflo.onto import DBFlavor
from graflo.db.connection.onto import ArangoConfig, Neo4jConfig, TigergraphConfig, FalkordbConfig
from graflo.db import DBType
Expand All @@ -283,7 +284,7 @@ db_flavor = (
schema = infer_schema_from_postgres(
postgres_conn,
schema_name="public", # PostgreSQL schema name
db_flavor=db_flavor # Target graph database flavor
db_flavor=db_flavor # Target graph database flavor
)
```

Expand Down Expand Up @@ -327,7 +328,8 @@ logger.info(f"Inferred schema saved to {schema_output_file}")
Create `Patterns` that map PostgreSQL tables to resources:

```python
from graflo.db.postgres import create_patterns_from_postgres

from graflo.db.inferencer import create_patterns_from_postgres

# Create patterns from PostgreSQL tables
patterns = create_patterns_from_postgres(
Expand Down Expand Up @@ -402,9 +404,8 @@ from graflo.onto import DBFlavor
from graflo.db import DBType
from graflo.db.postgres import (
PostgresConnection,
create_patterns_from_postgres,
infer_schema_from_postgres,
)
from graflo.db.inferencer import infer_schema_from_postgres, create_patterns_from_postgres
from graflo.db.connection.onto import ArangoConfig, PostgresConfig

logger = logging.getLogger(__name__)
Expand All @@ -419,6 +420,7 @@ postgres_conn = PostgresConnection(postgres_conf)
# Step 3: Connect to target graph database
# You can try different databases by uncommenting the desired config:
from graflo.db.connection.onto import ArangoConfig, Neo4jConfig, TigergraphConfig, FalkordbConfig

target_config = ArangoConfig.from_docker_env() # or Neo4jConfig, TigergraphConfig, FalkordbConfig

# Step 4: Infer Schema from PostgreSQL database structure
Expand Down
3 changes: 2 additions & 1 deletion docs/getting_started/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ The `ingest()` method takes:
You can ingest data directly from PostgreSQL tables. First, infer the schema from your PostgreSQL database:

```python
from graflo.db.postgres import PostgresConnection, infer_schema_from_postgres, create_patterns_from_postgres
from graflo.db.postgres import PostgresConnection
from graflo.db.inferencer import infer_schema_from_postgres, create_patterns_from_postgres
from graflo.db.connection.onto import PostgresConfig

# Connect to PostgreSQL
Expand Down
99 changes: 50 additions & 49 deletions examples/5-ingest-postgres/generated-schema.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,53 @@
edge_config:
edges:
- relation: follows
source: users
target: users
weights:
direct:
- name: created_at
type: DATETIME
- relation: purchases
source: users
target: products
weights:
direct:
- name: purchase_date
type: DATETIME
- name: quantity
type: INT
- name: total_amount
type: FLOAT
general:
name: public
name: accounting
resources:
- apply:
- vertex: products
resource_name: products
- apply:
- vertex: users
resource_name: users
- apply:
- map:
follower_id: id
target_vertex: users
- map:
followed_id: id
target_vertex: users
resource_name: follows
- apply:
- map:
user_id: id
target_vertex: users
- map:
product_id: id
target_vertex: products
resource_name: purchases
transforms: {}
vertex_config:
db_flavor: tigergraph
vertices:
- name: products
- dbname: products
fields:
- name: id
type: INT
Expand All @@ -17,8 +62,8 @@ vertex_config:
indexes:
- fields:
- id
dbname: products
- name: users
name: products
- dbname: users
fields:
- name: id
type: INT
Expand All @@ -31,48 +76,4 @@ vertex_config:
indexes:
- fields:
- id
dbname: users
edge_config:
edges:
- source: users
target: users
weights:
direct:
- name: created_at
type: DATETIME
relation: follows
- source: users
target: products
weights:
direct:
- name: purchase_date
type: DATETIME
- name: quantity
type: INT
- name: total_amount
type: FLOAT
relation: purchases
resources:
- resource_name: products
apply:
- vertex: products
- resource_name: users
apply:
- vertex: users
- resource_name: follows
apply:
- target_vertex: users
map:
follower_id: id
- target_vertex: users
map:
followed_id: id
- resource_name: purchases
apply:
- target_vertex: users
map:
user_id: id
- target_vertex: products
map:
product_id: id
transforms: {}
name: users
14 changes: 7 additions & 7 deletions examples/5-ingest-postgres/ingest.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,17 @@

import logging
from pathlib import Path
import yaml
from suthing import FileHandle

from graflo.onto import DBFlavor
from graflo.db import DBType
from graflo import Caster
from graflo.db.postgres import (
PostgresConnection,
create_patterns_from_postgres,
)
from graflo.db.inferencer import (
infer_schema_from_postgres,
create_patterns_from_postgres,
)
from graflo.db.postgres.util import load_schema_from_sql_file
from graflo.db.connection.onto import PostgresConfig, TigergraphConfig
Expand Down Expand Up @@ -103,15 +105,13 @@
postgres_conn, schema_name="public", db_flavor=db_flavor
)


schema.general.name = "accounting"
# Step 3.5: Dump inferred schema to YAML file
schema_output_file = Path(__file__).parent / "generated-schema.yaml"

# Convert schema to dict (enums are automatically converted to strings by BaseDataclass.to_dict())
schema_dict = schema.to_dict()

# Write to YAML file
with open(schema_output_file, "w") as f:
yaml.safe_dump(schema_dict, f, default_flow_style=False, sort_keys=False)
FileHandle.dump(schema.to_dict(), schema_output_file)

logger.info(f"Inferred schema saved to {schema_output_file}")

Expand Down
4 changes: 4 additions & 0 deletions graflo/db/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,16 @@
from .neo4j.conn import Neo4jConnection
from .postgres.conn import PostgresConnection
from .tigergraph.conn import TigerGraphConnection
from .inferencer import infer_schema_from_postgres, create_patterns_from_postgres


__all__ = [
"Connection",
"ConnectionType",
"create_patterns_from_postgres",
"DBType",
"DBConfig",
"infer_schema_from_postgres",
"ConnectionManager",
"ArangoConnection",
"FalkordbConnection",
Expand Down
Loading