Перейти к содержанию

API для etl-блоков

Объекты модели

ModelObject

Содержит данные об объекте модели

Атрибут Тип Описание
model_name str Название объекта модели
fields list[ModelObjectField] Список полей объекта ModelObjectField
childs list[ModelObject] Список вложенных (дочерних) объектов ModelObject

ModelObjectField

Содержит данные о поле объекта модели

Атрибут Тип Описание
model_name str Название поля в объекте модели
simple_type str Тип поля: string, number, float bool, date

EtlBlockApplication

Содержит контекст текущего выполняемого приложения по обработке etl-блоков.

Атрибут Тип Описание
spark SparkSession Сессия текущего выполняемого приложения Spark
model_module CompuledModule Скомпилированный модуль etl-скрипта модели
vault Vault Хранилище параметров модели. Может использоваться для хранения чувствительных параметров (пароли, ключи)
run_mode str Указывает на текущий режим выполнения etl-блока

CompiledModule

С помощью данного модуля можно получить доступ к функциям, определенным в etl-скрипте модели. Это бывает полезным, когда в скрипте текущей модели необходимо переопределить поведение etl-блока, добавленного в модель.

Методы объекта CompiledModule:

Метод Описание
__contains__ Позволяет проверить наличие какой-либо функции или атрибута в модуле etl-скрипта: if 'foo' in module_module: ...
__getattr__ Позволяет обратиться к какой-либо функции или атрибуту etl-скрипта через точку: model_module.foo()
__getitem__ Позволяет обратиться к какой-либо функции или атрибуту etl-скрипта через индексацию: model_module['foo']()

Методы __getattr__ и __getitem__ при отсутствии функции в модуле etl-скрипта выбрасывают исключение, поэтому перед вызовом рекомендуется проверять их наличие:

def block_data(app):
    """ """
    if 'some_function' in app.model_module:
        app.model_module.some_function()

Пример использования

Пусть у нас есть etl-блок с такой функцией получения данных.

# Код etl-блока block_code.py

def block_data(df, app):
    """ """
    value = 'значение по умолчанию'
    if 'override_value' in app.model_module:
        value = app.model_module.override_value()

    print(value)

    return df

При пустом etl-скрипте модели строка print(value) напечает "значение по умолчанию". А если открыть редактор etl-скрипта модели и указать там функцию override_value как указано ниже, то print(value) в коде блока напечатает "переопределенное значение".

# Код etl-скрипта модели

def override_value():
    """ 
    Эта функция переопределяет поведение etl-блока
    """
    return 'переопределенное значение'

Vault

Объект класса Vault предоставляет интерфейс доступа к хранилищу параметров модели.

Vault используется для хранения чувствительных параметров модели (пароли, API-ключи и т.п.). Данные параметры заполняются пользователем при создании модели и хранятся вне исходного кода.

Метод Параметры Описание
get name: str Возвращает значение параметра с названием name. Если такого параметра не существует, то возвращается None

Пример использования хранилища:

import requests


def block_code(dfs, app):
    """ 
    В текущем блоке используется API ключ для доступа к внешнему сервису.
    """
    api_key = app.vault.get('EXTERNAL_API_KEY')
    if api_key is None:
        raise Exception(
            'Не указан API ключ для доступа к внешнему сервису. '
            'Заполните параметр модели EXTERNAL_API_KEY'
        )
    r = requests.get('https://srv.example.com', headers={'api_key': api_key})
    ...

При создании модели с таким ETL-блоком пользователь должен будет зайти в etl-редактор скрипта модели и указать значение параметра EXTERNAL_API_KEY.

run_mode

В Analytic Workspace есть три режима выполнения кода etl-блока

Значение Описание Когда запускается Объем данных в dfs
full Синхронизация модели Пользователь нажал кнопку "Загрузить данные в хранилище" в редакторе модели или сработал триггер на загрузку данных модели по расписанию. Все данные
preview Предпросмотр данных модели Пользователь открыл модель на просмотр/редактирование, и запустился процесс получения данных для показа в нижней панели редактора модели Не более 10.000 строк из каждого источника
etl_dev_run Тестовый запуск etl-скрипта модели Пользователь нажал кнопку "Запуск на тестовых данных" в etl-редакторе Не более 1000 строк из каждого источника

Зная значения текущего режима запуска приложения, вы можете оптимально управлять данными из источников. Например, если в etl-блоке вы обращаетесь за данными к внешнему web-сервису, то вычитывать все строки оттуда имеет смысл только для режима full. В двух других режимах достаточно запросить только первую страницу из, скажем, 20-100 строк.

ETLBlockActionResult

Содержит информацию о результатах выполнения действия etl-блока.

Атрибут Тип Описание
params_patch dict[str, Any] Возвращает набор параметров, которые надо заменить на форме редактирования в результате выполнения действия