Исходный код etl-блока¶
Введение¶
Исходный код блока размещается в файле block_code.py. В этом python-модуле обязательно наличие двух функций:
block_schema- вызывается для получения схемы данных блока. Возвращает описание столбцов и их типов, которые получаются после вызова блока, в виде объекта StructType;block_data- вызывается для получения данных блока. Возвращает датафрейм Spark.
Минимальный код etl-блока
Пример кода блока, который не делает ничего. Схема и данные блока совпадают с первым вложенным в блок объектом.
Обработчики действий
Если в метаданных блока заданы действия, то в модуле блока должны присутствовать функции-обработчики.
Например, для действия с кодом autofill_columns должна быть задана функция 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 без параметров
Возвращаемое значение¶
Функция block_schema возвращает объект StructType со схемой данных блока.
Примеры block_schema и типичные ситуации¶
Блок возвращает одну схему, независимо от вложенных объектов и настроек пользователя
Блок добавляет поля к вложенному объекту
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_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-блока.
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-блока.