Usage

Commands

metapod init                         # Generate config.yaml template
metapod list-probes                  # Show all 197 probes
metapod run "oracle.*"               # Extract metadata -> ./output/
metapod run "oracle.*" --delta       # Only changed records
metapod run "adls_gen2.*" --since 2026-03-29  # Only recent files
metapod run "azure_*.*" --parallel -w 8       # Parallel (8 workers)
metapod diff                         # Compare two extractions
metapod serve --port 9090            # Daemon mode (pull via HTTP)
metapod schedule "oracle.*" --cron "0 6 * * *"
metapod push --target URL            # Optional: send to catalog platform
metapod provision azure              # Auto-create Azure test resources
metapod new-probe mydb.metadata.foo  # Scaffold a new probe

Basic workflow

1. Configure — create config.yaml with your source credentials:

metapod init   # generates a template

Edit to match your source:

# config.yaml
source:
  type: oracle
  host: prod-db.example.com
  port: 1521
  service_name: ORCLPDB1
  username: reader
  password: "${ORACLE_PASSWORD}"
  schema_name: RISK_MGMT

2. Extract — run probes against your source:

metapod run "oracle.metadata.*" --config config.yaml

# Output:
# ./output/oracle/metadata/tables.json
# ./output/oracle/metadata/columns.json
# ./output/oracle/metadata/views.json
# ...

3. Use — the JSON files are yours:

# Read locally
cat output/oracle/metadata/tables.json | python3 -m json.tool

# Or push to a catalog platform (optional)
metapod push --target https://dataflix.example.com --project my-project

Glob patterns

metapod run "oracle.metadata.*"       # All Oracle metadata probes
metapod run "oracle.quality.*"        # All Oracle quality probes
metapod run "*.metadata.tables"       # Tables probe for every source
metapod run "azure_*.*"              # All Azure probes
metapod run "postgres.metadata.tables" # One specific probe

Environment variables

Credentials in config.yaml support ${ENV_VAR} substitution:

source:
  password: "${ORACLE_PASSWORD}"

metapod also loads .env files automatically (python-dotenv).

Common config examples

PostgreSQL:

source:
  type: postgres
  host: pg-host.example.com
  port: 5432
  service_name: mydb
  username: reader
  password: "${PG_PASSWORD}"
  schema_name: public

Azure SQL:

source:
  type: azure_sql
  host: myserver.database.windows.net
  service_name: mydb
  username: admin
  password: "${SQL_PASSWORD}"

SQLite (local, no credentials):

source:
  type: sqlite
  host: /path/to/database.db

File Scanner (local directory):

source:
  type: file_scanner
  host: /path/to/data/files

See azure-walkthrough for Azure-specific configuration (ADLS, Blob, ADF, Purview).