Исходный код 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-блока.