Lightweight metadata extraction probes — 191 probes across 47 data sources
Project description
metapod
Lightweight metadata extraction probes. 185 probes across 42 data sources in 9 categories — metadata, governance, quality, profiling, operations, compliance, cost, schema history, and lineage.
Runs inside your network. Extracts only metadata — no raw data leaves the perimeter.
Install
pip install metapod-probes # Core (file scanners, BI tools)
pip install 'metapod-probes[oracle]' # + Oracle
pip install 'metapod-probes[snowflake]' # + Snowflake
pip install 'metapod-probes[azure]' # + Azure (ADLS, Blob, ADF)
pip install 'metapod-probes[all]' # Everything
Quick start
metapod init # Generate config.yaml
metapod list-probes # Show all 155 probes
metapod run "oracle.*" --schema RISK_MGMT # Extract Oracle metadata
metapod push --target https://your-platform.com --project myproject # Send results
metapod serve --port 9090 # Pull-mode daemon
Supported sources (40)
Databases (15)
| Source | Probes | Driver |
|---|---|---|
| Oracle | 18 | oracledb |
| PostgreSQL | 10 | psycopg2 |
| Snowflake | 5 | snowflake-connector |
| BigQuery | 5 | google-cloud-bigquery |
| SQL Server / Azure SQL | 5 | pyodbc |
| MySQL | 4 | pymysql |
| IBM DB2 | 4 | ibm_db |
| MariaDB | 2 | pymysql |
| SAP HANA | 2 | hdbcli |
| Teradata | 2 | teradatasql |
| DuckDB | 3 | duckdb |
| Trino | 3 | trino |
| SQLite | 2 | stdlib |
| MongoDB | 1 | pymongo |
| Elasticsearch | 1 | elasticsearch |
Cloud platforms (7)
| Source | Probes | API |
|---|---|---|
| Databricks Unity Catalog | 6 | REST API |
| Azure Data Factory | 5 | Azure Management API |
| ADLS Gen2 | 4 | azure-storage-file-datalake |
| Azure Blob Storage | 3 | azure-storage-blob |
| Azure File Share | 3 | azure-storage-file-share |
| AWS S3 | 3 | boto3 |
| Oracle Cloud (OCI) | 3 | oci-python-sdk |
BI tools (4)
| Source | Probes | Method |
|---|---|---|
| Power BI | 6 | .pbit/.pbix ZIP parsing |
| Excel | 6 | .xlsx OOXML (table detector + formula lineage) |
| Tableau | 5 | .twb/.twbx XML parsing |
| Qlik Sense/View | 3 | .qvf SQLite / .qvw binary |
ETL / Orchestration (6)
| Source | Probes | Method |
|---|---|---|
| Informatica PowerCenter | 5 | Repository XML export |
| Informatica Cloud (IICS) | 4 | REST API v2/v3 |
| Oracle Data Integrator | 3 | Smart Export XML |
| Airflow | 3 | REST API |
| Alteryx | 2 | .yxmd XML parsing |
| dbt | 3 | manifest.json parsing |
Governance platforms (4)
| Source | Probes | Direction |
|---|---|---|
| Collibra | 3 | Bidirectional |
| Microsoft Purview | 3 | Bidirectional |
| Blindata | 3 | Bidirectional |
| Witboost | 2 | Bidirectional |
Files / Other (4)
| Source | Probes | Method |
|---|---|---|
| File Scanner | 5 | Local filesystem (auto-dispatch + CSV/JSON/Parquet schema) |
| SharePoint / OneDrive | 3 | Local sync / REST / Graph API |
| Python Transforms | 1 | AST-based pandas/PySpark detection |
| Avro | 1 | Header-only schema reading |
Architecture
Customer network (VPN / Azure / on-prem)
┌─────────────────────────────────────────────┐
│ metapod │
│ ├── 155 probes across 40 sources │
│ ├── Push mode: metapod push --target URL │
│ ├── Pull mode: metapod serve --port 9090 │
│ └── File mode: metapod run → ./output/ │
└──────────────────┬──────────────────────────┘
│ outbound HTTPS only
▼
Any metadata consumer
- Zero inbound access — only outbound HTTPS
- No raw data — only metadata (schema, statistics, descriptions)
- Local-first — results written to
./output/before push - Config-driven — YAML with
${ENV_VAR}substitution
Commands
metapod run "oracle.*" # Extract
metapod push --target URL --project ID # Push to platform
metapod serve --port 9090 # Pull-mode daemon
metapod list-probes # Show all probes
metapod diff # Compare extractions
metapod schedule "oracle.*" --cron "0 6 * * *" # Cron schedule
metapod init # Generate config
Adding a probe
from core.base_probe import BaseProbe
from core.registry import register
@register
class MyProbe(BaseProbe):
@staticmethod
def probe_name() -> str:
return "mydb.metadata.tables"
@staticmethod
def description() -> str:
return "Extract table metadata"
def execute(self, connection, schema: str, **kwargs) -> list[dict]:
# Your extraction logic here
return [{"table_name": "example"}]
License
Apache 2.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file metapod_probes-0.4.0.tar.gz.
File metadata
- Download URL: metapod_probes-0.4.0.tar.gz
- Upload date:
- Size: 144.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef0c3f7e0dc18cd30da61998a408f68f29c87da4be2e667a98ebf9a44b35f113
|
|
| MD5 |
3ce878dd620ae5381a1ff1ec88a18e28
|
|
| BLAKE2b-256 |
14785b2a1ee6b5e3bbd93fe2ea96a0d6bf3d5db3a53da67a3e2def08c776b922
|
Provenance
The following attestation bundles were made for metapod_probes-0.4.0.tar.gz:
Publisher:
publish.yml on mario-ambrosino/metapod
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
metapod_probes-0.4.0.tar.gz -
Subject digest:
ef0c3f7e0dc18cd30da61998a408f68f29c87da4be2e667a98ebf9a44b35f113 - Sigstore transparency entry: 1202872726
- Sigstore integration time:
-
Permalink:
mario-ambrosino/metapod@337eecea5b37901ed477af216d56de855fbadc83 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/mario-ambrosino
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@337eecea5b37901ed477af216d56de855fbadc83 -
Trigger Event:
push
-
Statement type:
File details
Details for the file metapod_probes-0.4.0-py3-none-any.whl.
File metadata
- Download URL: metapod_probes-0.4.0-py3-none-any.whl
- Upload date:
- Size: 268.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da6694df9825d181edd81f4d8e434a3663f169a3f8877a15b11183ffd21f3f51
|
|
| MD5 |
b354a81a90e20ce561ec45e1529ba842
|
|
| BLAKE2b-256 |
ffa4b6eda74c2b1552888633dcc3c8da887e4f84bfae7710e097f7deaa26ea0e
|
Provenance
The following attestation bundles were made for metapod_probes-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on mario-ambrosino/metapod
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
metapod_probes-0.4.0-py3-none-any.whl -
Subject digest:
da6694df9825d181edd81f4d8e434a3663f169a3f8877a15b11183ffd21f3f51 - Sigstore transparency entry: 1202872732
- Sigstore integration time:
-
Permalink:
mario-ambrosino/metapod@337eecea5b37901ed477af216d56de855fbadc83 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/mario-ambrosino
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@337eecea5b37901ed477af216d56de855fbadc83 -
Trigger Event:
push
-
Statement type: