Environment Configuration
Starlake uses environment files to manage configuration across DEV, STAGING, and PROD deployments.
Environment File Hierarchy
metadata/
├── env.sl.yml # Base variables (all environments)
├── env.DEV.sl.yml # Dev-specific overrides
├── env.STAGING.sl.yml # Staging-specific overrides
└── env.PROD.sl.yml # Production-specific overrides
Base Configuration
# metadata/env.sl.yml
env:
SL_ROOT: "/path/to/project"
SL_ENV: "DEV"
SL_INCOMING: "{{SL_ROOT}}/datasets/incoming"
SL_PENDING: "{{SL_ROOT}}/datasets/pending"
SL_ACCEPTED: "{{SL_ROOT}}/datasets/accepted"
SL_REJECTED: "{{SL_ROOT}}/datasets/rejected"
SL_BUSINESS: "{{SL_ROOT}}/datasets/business"
SL_DATABASE: "analytics"
SL_WAREHOUSE: "COMPUTE_WH"
Environment Overrides
# metadata/env.DEV.sl.yml
env:
SL_ENV: "DEV"
SL_INCOMING: "/tmp/starlake/incoming"
SL_DATABASE: "analytics_dev"
# metadata/env.STAGING.sl.yml
env:
SL_ENV: "STAGING"
SL_INCOMING: "gs://staging-bucket/incoming"
SL_DATABASE: "analytics_staging"
# metadata/env.PROD.sl.yml
env:
SL_ENV: "PROD"
SL_INCOMING: "gs://prod-bucket/incoming"
SL_DATABASE: "analytics"
SL_WAREHOUSE: "PROD_WH_XL"
Using Environment Variables
Reference variables in any YAML configuration with {{VARIABLE}} syntax:
transform:
name: revenue_summary
database: "{{SL_DATABASE}}"
sink:
connectionRef: "{{SL_CONNECTION}}"
Selecting an Environment
Set the SL_ENV environment variable before running Starlake commands:
# Run in dev
export SL_ENV=DEV
starlake load --domain customers
# Run in production
export SL_ENV=PROD
starlake load --domain customers
Or pass it directly:
starlake load --domain customers --env PROD