dlt 自定义配置简单说明

dlt 默认有一套自己的配置以及认证查找,有基于默认位置的,有基于环境变量的,如果我们希望将dlt 作为一个包来使用就需要自己扩展下

一些思路

  • 直接复用dlt 自己的默认玩法,添加自己的路径,直接参考SettingsTomlProvider 的子类实现就行
  • 直接自定义dlt.config.register_provider provider (当然也可以是secrets)好处是比较灵活强大,配置可以存储在任何地方

参考玩法

主要简单演示下实现SettingsTomlProvider的

  • SettingsTomlProvider 模式
from dlt.common.configuration.providers.toml import SettingsTomlProvider,SecretsTomlProvider,ConfigTomlProvider

class MyConfigTomlProvider(SettingsTomlProvider):
    def __init__(self, settings_dir: str, global_dir: str = None) -> None:
        super().__init__("my_config.toml", False, ".dlt/config.toml", [settings_dir, global_dir], global_dir)

    @property
    def is_writable(self) -> bool:
        return True

class MySecretsTomlProvider(SettingsTomlProvider):
    def __init__(self, settings_dir: str, global_dir: str = None) -> None:
        super().__init__("my_secrets.toml", True, ".dlt/secrets.toml", [settings_dir, global_dir], global_dir)

    @property
    def is_writable(self) -> bool:
        return True
# 自己扩展了路径,etl_path 可以在自己开发的pipeline 中暴露就行了
dlt.config.register_provider(MyConfigTomlProvider(settings_dir=etl_path))
dlt.secrets.register_provider(MySecretsTomlProvider(settings_dir=etl_path))
  • 官方一个简单示例
import dlt
from dlt.common import json
from dlt.common.configuration.providers import CustomLoaderDocProvider

# Create a function that loads a dictionary
def load_config():
    with open("config.json", "rb") as f:
        return json.load(f)

# Create the custom provider
provider = CustomLoaderDocProvider(
    "my_json_provider", 
    load_config, 
    supports_secrets=False
)

# Register the provider with dlt
dlt.config.register_provider(provider)

说明

自定义配置provider 的价值还是很大的,可以实现灵活的配置管理

参考资料

https://dlthub.com/docs/general-usage/credentials

https://dlthub.com/docs/general-usage/credentials/advanced

https://dlthub.com/docs/general-usage/credentials/setup#select-a-configuration-layout

posted on 2026-10-28 08:00  荣锋亮  阅读(9)  评论(0)    收藏  举报

导航