Metadata Tagging
sigint classifies Impala columns against the SIGDG ontology and
writes those tags to Atlas. Ranger consumes the tags. Discoverability
and sensitivity labels come from that loop.
Architecture
How It Works
-
Tables created in Impala become visible in Atlas as entities with columns, types, and ownership metadata.
-
The tagging service watches Atlas for new or changed entities (tables, columns). When a new table appears, the service reads its name, column names, column types, and any existing metadata.
-
The classification model maps each name to the SIGDG ontology, assigning both a semantic category and a sensitivity quality. For example:
- Column
email→SIGDG:0025 ContactInformationwithSIGDG:1030 Confidential - Column
ssn→SIGDG:0011 GovernmentIdentifierwithSIGDG:1040 Restricted - Column
total_amount→SIGDG:0021 FinancialInformationwithSIGDG:1020 Internal - Table
transactions→SIGDG:0050 TransactionInformation
- Column
-
Classifications are written back to Atlas as tags on the entity, making them visible in the catalog UI and available for policy enforcement via Ranger.
The classification model uses a context engineering approach — each column is represented as a structured feature vector that can be measured and optimized using SAGE feature importance analysis. The pipeline outputs Dempster-Shafer belief intervals at every hierarchy level via the evidence fusion layer.
Atlas Integration
Atlas provides the metadata catalog that makes Impala-managed Kudu tables and columns visible as governed entities:
- Entity types:
rdbms_table,rdbms_column,rdbms_db,rdbms_instance— Atlas stock RDBMS model (2000-RDBMS), same family as Aegir (catalog bridge cut over from interimhive_*) - Classifications: Applied as Atlas tags using SIGDG CURIEs (e.g.,
SIGDG_0025_ContactInformation) - Lineage: Atlas tracks table-level lineage from INSERT…SELECT and CTAS operations
- AGE graph queries: Atlas metadata stored in PostgreSQL with AGE enables graph traversal of classification relationships, lineage paths, and impact analysis
Atlas + Ranger Policy Flow
Once entities are tagged in Atlas:
- Ranger policies reference SIGDG classifications (e.g., “mask all columns tagged
SIGDG:0022 PaymentInformation”) - Impala enforces Ranger policies at query time
- The result: automated column masking, row filtering, and access control driven by ontology-grounded metadata tags
Validated Pipeline
The end-to-end tagging pipeline has been implemented and validated with 8 BDD scenarios (6 meta-tagging + 2 pipeline tagging):
- Atlas catalog bridge — Python function registers Impala-managed Kudu tables in Atlas via REST API. Validated by 4 catalog sync scenarios.
- Tagger service —
Taggerclass (src/sigint/tagger.py) orchestrates sample → classify → tag:ImpalaSamplerreads column names, types, and sample values from ImpalaEmbeddingClassifierclassifies against the SIGDG taxonomy using sentence-transformer embeddingsAtlasClientwrites classifications back as SIGDG tags with confidence scores and evidence
- Air-gap isolation — Shared HF caches (
HF_HOME/HF_HUB_CACHE/SENTENCE_TRANSFORMERS_HOME, lab RAID),HF_HUB_OFFLINE=1, zero external network calls. See Air-Gap (Zarf). - HOCON config — Single source of truth (
config/base.conf) drives both application code and BDD test helpers. All connection parameters (Impala host/port, Atlas URL/credentials, model cache) flow from config.
Running the Pipeline
# Pre-cache model (once)
just cache-models
# Dry-run: classify without writing to Atlas
just tag-dry-run default.my_table
# Live: classify and write SIGDG tags to Atlas
just tag default.my_table
# Or via Python module
uv run python -m sigint --tables default.my_table --dry-run
Next Steps
- Event-driven tagging: Watch Atlas for new entities and trigger classification automatically (replace manual
just taginvocation) - Evidence fusion calibration: Calibrate DST discount factors and mass constants against held-out data; resolve source independence assumption (see Research Roadmap)
- OWL formalization: Publish SIGDG as OWL ontology with BFO imports, verify via RASE 5-gate pipeline
- Ranger tag-based policies: Column masking and access control driven by Atlas SIGDG classifications
- Feedback loop: Analyst corrections to classifications improve the model over time
- Data lifecycle integration: Preserve classifications across Kudu→Iceberg CTAS migrations