Skip to content

Configuration in 0.15.0

ETLantic 0.15.0 configures execution with a Profile object or a JSON profile document. It does not load etlantic.toml.

Profile fields

Profile has these shipped fields:

Field Default Purpose
name required Profile identity
orchestrator "local" Orchestrator selection
dataframe_engine "local" Dataframe engine, or None
sql_engine None SQL engine selection
spark_engine None Spark engine selection
allow_trusted_sql False Permit explicitly trusted SQL
spark_udf_policy "warn" Spark UDF policy
spark_streaming False Require Spark streaming capabilities
bindings {} Logical binding names to provider or descriptor names
implementation_overrides {} Transformation implementation overrides
secret_providers {} Logical secret-provider bindings
resources {} Logical resource bindings
secrets {} SecretRef values, never resolved secret values
security_domain "default" Security domain; production enables fail-closed trust
validation_policy "default" Validation policy name
concurrency None Optional concurrency limit
timeout_seconds None Optional timeout
retry_max_attempts None Optional retry limit
schedule {} Portable schedule intent
execution {} Portable execution settings
required_sql_capabilities () Required SQL capabilities
required_spark_capabilities () Required Spark capabilities
required_orchestrator_capabilities () Required orchestrator capabilities
plugin_allowlist {} Plugin names and optional version specifiers
portable_transform_policy "prefer" "require", "prefer", or "native"
metadata {} User metadata

JSON profiles

Use write_profile and load_profile for the shipped JSON format:

from etlantic import Profile, load_profile, write_profile

path = write_profile(
    Profile(
        name="pilot",
        dataframe_engine="polars",
        bindings={"customer_source": "json", "customer_sink": "json"},
    ),
    "profiles/pilot.json",
)
profile = load_profile(path)

write_profile creates parent directories and writes deterministic, human-readable JSON. load_profile requires a JSON object and applies current field defaults for omitted values.

The CLI --profile option accepts either a built-in name or an existing .json path:

etlantic validate package.pipeline:CustomerPipeline --profile development
etlantic plan package.pipeline:CustomerPipeline \
  --profile profiles/pilot.json --format json

Built-in names are development/dev, local, test, and production/prod. Any other bare name creates a default Profile with that name. A .json string is loaded as a file only when that file exists.

Environment variables shipped today

Variable Scope Behavior
ETLANTIC_SQL_URL etlantic-sql SQLAlchemy URL; defaults to in-memory SQLite in the reference plugin
ETLANTIC_SPARK_BACKEND etlantic-pyspark Selects the sparkless compatibility backend when set to sparkless
SPARKLESS_TEST_MODE PySpark test/shim paths Non-pyspark values select sparkless behavior; primarily a test switch

The built-in EnvSecretProvider also reads environment variables, but there is no automatic ETLantic-wide prefix. A SecretRef named database_password is read from DATABASE_PASSWORD; a non-default key such as token is read from DATABASE_PASSWORD_TOKEN. Applications may instantiate EnvSecretProvider(prefix="ETLANTIC_SECRET_") themselves and register it on a runtime, but ETLANTIC_SECRET_* is not an ambient core convention.

ETLantic 0.15.0 does not auto-read ETLANTIC_PROFILE, ETLANTIC_CONFIG, ETLANTIC_PROJECT, logging overrides, or output-format overrides. Names on Environment Variables are proposed unless this page lists them as shipped.

No etlantic.toml

Do not create etlantic.toml expecting 0.14.0 to load it. The Configuration Reference describes a future design, not the published runtime. Use explicit Python profiles or JSON profile files today.

See also Production Profiles and Runtime Configuration.