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

Исходный код etl-блока

Введение

Исходный код блока размещается в файле block_code.py. В этом python-модуле обязательно наличие двух функций:

  • block_schema - вызывается для получения схемы данных блока. Возвращает описание столбцов и их типов, которые получаются после вызова блока, в виде объекта StructType;
  • block_data - вызывается для получения данных блока. Возвращает датафрейм Spark.

Минимальный код etl-блока

Пример кода блока, который не делает ничего. Схема и данные блока совпадают с первым вложенным в блок объектом.

block_code.py
def block_schema(schema):
    """ Возвращает схему данных блока """
    return schema

def block_data(df):
    """ Возвращает датафрейм с данными блока """
    return df

Обработчики действий

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

Например, для действия с кодом autofill_columns должна быть задана функция block_action_autofill_columns

def block_action_autofill_columns(...):
    """ """
    ...

Функция block_schema

Используется для получения схемы данных, которая появится после работы блока.

Внимание!

Функция block_schema вызывается при работе пользователя в интерфейсе редактора моделей AW. Её вызов не должен создавать долгих пауз в работе пользователя.

На практике это означает, что в теле функции необходимо избегать долгих и блокирующих операций (например, обращение к источникам, вызовы внешних сервисов и т.п.)

Аргументы функции

Аргумент Тип Описание
params dict[str, Any] Словарь c параметрами блока, указанными пользователем в редакторе модели
schemas или upstream_schemas dict[str, StructType] Словарь со схемами данных вложенных в блок объектов модели
schema или upstream_schema StructType Схема данных первого вложенного в блок объекта модели
dfs или upstream_dataframes dict Словарь с датафреймами вложенных в блок объектов модели
df или upstream_dataframe DataFrame Датафрейм первого вложенного в блок объекта модели
app EtlBlockApplication Объект с текущим контекстом выполенения etl-блока
model_object ModelObject Текущий объект модели c etl-блоком

При объявлении функции вы указываете только те аргументы, которые вам необходимы для создания схемы данных блока.

Внимание!

Не указывайте те аргументы функции block_schema, которые вы не используете в её работе. Серверные механизмы по указанным вами аргументам могут выполнять действия, которые могут существенно сказаться на времени построения схемы блока.

Например, если указаны аргументы df или dfs, при каждом вызове функции система будет обращаться в источник данных для построения нужного вам датафрейма. Это может существенно замедлить работу пользователя в редакторе моделей AW.

block_schema без параметров

from pyspark.sql.types import StructType, StructField, IntegerType, StringType


def block_schema():
    """ 
    Блок всегда возвращает одну и ту же схему.  
    """
    return StructType(fields=[
        StructField('id', IntegerType(), nullable=True),
        StructField('name', StringType(), nullable=True),
    ])

Возвращаемое значение

Функция block_schema возвращает объект StructType со схемой данных блока.

Примеры block_schema и типичные ситуации

Блок возвращает одну схему, независимо от вложенных объектов и настроек пользователя
from pyspark.sql.types import StructType, StructField, IntegerType, StringType


def block_schema():
    """ 
    Блок всегда возвращает одну и ту же схему.  
    """
    return StructType(fields=[
        StructField('id', IntegerType(), nullable=True),
        StructField('name', StringType(), nullable=True),
    ])
Блок добавляет поля к вложенному объекту
block_code.py
from pyspark.sql.types import StructType, StructField, IntegerType, StringType


def block_schema(schema):
    """ 
    Блок добавляет поля id и name к вложенному объекту
    """
    add_fields = [
        StructField('id', IntegerType(), nullable=True),
        StructField('name', StringType(), nullable=True),
    ]
    return StructType(fields=schema.fields + add_fields)
Блок удаляет поля из вложенного объекта
block_code.py
def block_schema(schema):
    """ 
    Блок удаляет поле id из вложенного объекта (точнее,
    возвращает все поля из вложенного объекта без поля id)
    """
    hold_fields = [f for f in schema.fields if f.name != 'id']
    return StructType(fields=hold_fields)

Больше примеров есть в отдельном разделе с полными исходными текстами рабочих блоков.

Функция block_data()

Отвечает за преобразование и обработку данных вложенных объектов и возвращает итоговые данные блока.

Аргументы функции

Название аргумена Псевдоним Описание
params dict[str, Any] Словарь c параметрами блока, указанными пользователем в редакторе модели
dfs или upstream_dataframes dict Словарь с датафреймами вложенных в блок объектов модели
df или upstream_dataframe DataFrame Датафрейм первого вложенного в блок объекта модели
app EtlBlockApplication Объект с текущим контекстом выполенения etl-блока
model_object ModelObject Текущий объект модели c etl-блоком

При объявлении функции вы указываете только те аргументы, которые вам необходимы для создания схемы данных блока.

Возвращаемое значение

Функция block_data возвращает датафрейм с данными etl-блока.

block_data
def block_data(df):
    """ """
    # ... здесь идут операции с датафреймом df ...

    df_result = df.select( ... ).filter( ... )

    # В итоге, получается датафрейм df_result
    return df_result

Примеры

С примерами можно отзнакомиться в отдельном разделе с полными исходными текстами рабочих блоков.

Функции block_action_*()

Отвечает за обработку действий, которые пользователь выполняет на форме

Аргументы функции

Аргумент Тип Описание
params dict[str, Any] Словарь c параметрами блока, указанными пользователем в редакторе модели
schemas или upstream_schemas dict[str, StructType] Словарь со схемами данных вложенных в блок объектов модели
schema или upstream_schema StructType Схема данных первого вложенного в блок объекта модели
dfs или upstream_dataframes dict Словарь с датафреймами вложенных в блок объектов модели
df или upstream_dataframe DataFrame Датафрейм первого вложенного в блок объекта модели
app EtlBlockApplication Объект с текущим контекстом выполенения etl-блока
model_object ModelObject Текущий объект модели c etl-блоком

Внимание!

Не указывайте те аргументы функции block_action_*, которые вы не используете в её работе. Серверные механизмы по указанным вами аргументам могут выполнять действия, которые могут существенно сказаться на времени выполнения обработчика действия.

Например, если указаны аргументы df или dfs, при каждом вызове функции система будет обращаться в источник данных для построения нужного вам датафрейма. Это может существенно замедлить работу пользователя в редакторе моделей AW.

Возвращаемое значение

Функция должна вернуть объект класса ETLBlockActionResult. В этом объекте описывается, какие значения необходимо проставить на форме настройки параметров блока.

Примеры

Пример действий и их обработчиков есть в исходных кода JSON-блока.