Data Flow from Databricks and Snowflake Ingestors to Semantica's Knowledge Graph: A Complete Guide
The data flow from Databricks/Snowflake ingestors to Semantica's knowledge graph follows five stages: Connect → Ingest → Normalise → Build KG → Store/Use, with ingestors converting raw database rows into structured documents before entity and relationship extraction.
Understanding how Semantica transforms warehouse data into actionable knowledge graphs is essential for building production-ready data pipelines. This guide traces the complete data flow from Databricks and Snowflake ingestors to Semantica's knowledge graph, using the actual source code from the semantica-agi/semantica repository.
Overview of the Ingestion Pipeline
The data flow architecture consists of five distinct stages:
| Stage | Component | Function |
|---|---|---|
| Connect | DatabricksConnector / SnowflakeConnector |
Establishes authenticated connections using PAT or OAuth M2M credentials |
| Ingest | DatabricksIngestor / SnowflakeIngestor |
Executes table scans, custom queries, or metadata calls; streams results into dataclasses |
| Normalise | export_as_documents() |
Converts raw rows into standardized document dictionaries with content, metadata, and id fields |
| Build KG | semantica.kg.KnowledgeGraph |
Extracts entities, relationships, and metadata through the built-in extraction pipeline |
| Store/Use | KnowledgeGraph instance |
Provides in-memory graph storage for persistence, visualization, or downstream querying |
Stage 1: Establishing Connections
Both ingestors support industry-standard authentication mechanisms. The Databricks connector in semantica/ingest/databricks_ingestor.py validates required parameters during initialization (lines 25-49):
from semantica.ingest import DatabricksIngestor
ingestor = DatabricksIngestor(
host="https://adb-123.azuredatabricks.net",
token="dapi-xxxxxxxx",
http_path="/sql/1.0/warehouses/abcd",
catalog="main",
schema="default",
)
Snowflake follows an identical pattern via SnowflakeIngestor in semantica/ingest/snowflake_ingestor.py. The connector layer handles connection pooling, credential validation, and warehouse-specific protocol adaptations.
Stage 2: Data Ingestion
The ingest_table() method streams rows efficiently with optional limits. In semantica/ingest/databricks_ingestor.py (lines 64-78):
data = ingestor.ingest_table("customers", limit=10_000)
This returns a DatabricksData dataclass containing:
data: List of row dictionariesrow_count: Total rows ingestedcolumns: Column names and typescatalog,schema,table_name: Source metadataingested_at: Timestamp
The Snowflake equivalent uses SnowflakeData with identical structure.
Stage 3: Document Normalization
The export_as_documents() method—implemented on both ingestors—transforms raw warehouse data into Semantica's canonical document format:
documents = ingestor.export_as_documents(data)
Each document follows this structure:
{
"content": json.dumps(row), # Serialized row data
"metadata": {
"source": f"{data.catalog}.{data.schema}.{data.table_name}",
"ingested_at": data.ingested_at.isoformat(),
"query": data.query if hasattr(data, "query") else None,
},
"id": optional_unique_identifier,
}
This normalization decouples warehouse-specific schemas from downstream processing, enabling unified handling regardless of source system.
Stage 4: Knowledge Graph Construction
The KnowledgeGraph class in semantica/kg/knowledge_graph.py (lines 2-24) serves as the canonical in-memory representation:
from semantica.kg import KnowledgeGraph
kg = KnowledgeGraph()
kg.add_documents(documents) # Triggers entity/relationship extraction
The KG builder performs three core operations:
- Entity extraction: Identifies and deduplicates named entities from document content
- Relationship inference: Maps connections between entities using the built-in NLP pipeline
- Metadata aggregation: Preserves provenance information for traceability
The resulting structure contains:
entities: Dictionary of extracted entities with attributesrelationships: List of(source, relation, target)triplesmetadata: Global ingestion parameters and statistics
Stage 5: Downstream Consumption
Knowledge graph instances integrate directly with visualization and retrieval components. The KGVisualizer in semantica/visualization/kg_visualizer.py (lines 132-166) accepts KnowledgeGraph objects:
from semantica.visualization import KGVisualizer
viz = KGVisualizer()
viz.visualize_network(kg, output="interactive")
The visualizer internally calls _convert_knowledge_graph() to transform the dataclass into rendering-appropriate formats.
Complete End-to-End Example
# Databricks pipeline (Snowflake uses identical structure)
from semantica.ingest import DatabricksIngestor
from semantica.kg import KnowledgeGraph
from semantica.visualization import KGVisualizer
# 1. Connect and ingest
ingestor = DatabricksIngestor(
host="https://adb-123.azuredatabricks.net",
token="dapi-xxxxxxxx",
http_path="/sql/1.0/warehouses/abcd",
catalog="sales",
schema="public",
)
raw_data = ingestor.ingest_table("orders", limit=5_000)
# 2. Normalize to documents
documents = ingestor.export_as_documents(raw_data)
# 3. Build knowledge graph
kg = KnowledgeGraph()
kg.add_documents(documents)
# 4. Visualize or integrate with retrieval systems
visualizer = KGVisualizer()
visualizer.visualize_network(kg, output="interactive")
The Snowflake variant requires only substituting SnowflakeIngestor and Snowflake-specific connection parameters.
Key Source Files and Architecture
| File | Purpose |
|---|---|
semantica/ingest/databricks_ingestor.py |
Databricks connector, ingestion logic, and DatabricksData dataclass |
semantica/ingest/snowflake_ingestor.py |
Snowflake connector and SnowflakeData dataclass |
semantica/kg/knowledge_graph.py |
Core KnowledgeGraph dataclass with entity/relationship storage |
semantica/visualization/kg_visualizer.py |
Network visualization with _convert_knowledge_graph() helper |
semantica/ingest/__init__.py |
Public API exports for DatabricksIngestor and SnowflakeIngestor |
Summary
- Connection abstraction: Both ingestors use native drivers with PAT/OAuth authentication, validated in
__init__methods - Streaming ingestion:
ingest_table()and custom query methods return rich dataclasses preserving source metadata - Document normalization:
export_as_documents()creates portable dictionaries decoupled from warehouse schemas - Unified KG building:
KnowledgeGraph.add_documents()extracts entities and relationships regardless of source system - Composable downstream: The in-memory graph format integrates with visualization, vector stores, and agent systems
Frequently Asked Questions
What authentication methods does Semantica support for Databricks and Snowflake?
Semantica supports personal access tokens (PAT) and OAuth M2M credentials for both platforms. The Databricks connector validates these in DatabricksConnector.__init__ (semantica/ingest/databricks_ingestor.py lines 25-49), while Snowflake uses equivalent parameter validation. OAuth flows are handled natively through the underlying Python connectors.
How does Semantica handle large table ingestion without memory issues?
The ingest_table() method accepts a limit parameter for bounded ingestion, and code analysis shows streaming row processing rather than full materialization. For production workloads, implement chunked ingestion using SQL LIMIT/OFFSET or partition-based scanning, then iteratively call KnowledgeGraph.add_documents() to build the graph incrementally.
Can I use custom SQL queries instead of full table scans?
Yes. The ingestor architecture supports custom queries—DatabricksData and SnowflakeData dataclasses include an optional query field in metadata that captures the source SQL. Call ingest_query() (implied by the query metadata handling in export_as_documents) or extend the base ingestor pattern to inject arbitrary SQL before document normalization.
What entity extraction model powers the KnowledgeGraph builder?
The source code in semantica/kg/knowledge_graph.py implements a built-in entity-extraction pipeline invoked during add_documents(). While the specific model architecture isn't detailed in the analyzed files, the extraction produces standardized entities and relationships structures suitable for downstream consumption by vector stores and visualization tools.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →