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

Программный интерфейс

Приложение Application

Объект с текущим контекстом выполнения скрипта.

Атрибуты:

  • storage: объект хранилища для чтения и записи данных (Storage);
  • model: описание модели, для которой выполняется приложение (Model);
  • vault: хранилище параметров модели (Vault);
  • run_mode: указывает на то, в каком режиме происходит запуск приложения и принимает следующие значения:
    • etl_dev_run - тестовый запуск из редактора ETL;
    • preview - получение данных предпросмотра в редакторе моделей;
    • full - полный режим (синхронизация данных моделей с внутренним хранилищем).
  • is_preview: (устаревший параметр, см. run_mode) принимает значение True, когда скрипт выполняется в preview-режиме (например, когда пользователь работает в редакторе модели).

Обратите внимание, что в случаях run_mode == 'etl_dev_run', run_mode == 'preview' или (устаревший способ) is_preview == True следует избегать трудоемких операций, т.к. он выполняется в синхронном с UI пользователя режиме.

Хранилище Storage

Storage обеспечивает интерфейс для сохранения и последующего чтения данных из внутреннего хранилища.

Атрибуты:

  • model: описание модели, для которой инициализировано хранилище (Model). Доступ к хранимым объектам других моделей запрещен;

Методы:

  • get_meta(name: str): возвращает метаданные StorageObjectMeta хранимого объекта с названием name. Если объекта с указанным названием в хранилище нет, то возвращается None;
  • save(self, name: str, data: Union[pyspark.sql.DataFrame, dict, list]): сохраняет данные в хранилище под именем name. Данные для сохранения должны быть представлены либо в виде JSON-объекта (типы данных Python: dict, list), либо в виде Spark-датафрейма. При указании в параметре data значений других типов выбрасывается исключение;
  • read(self, name: str) -> Union[pyspark.sql.DataFrame, dict, list]: читает данные из хранилища для имени name. Возвращается объект того же типа (JSON, Spark-датафрейм), который ранее был указан при сохранении объекта. При отсутствии в хранилище объекта с именем name выбрасывается исключение;
  • delete(self, name): удаляет хранимый объект с именем name. Если объекта с таким именем нет в хранилище, то функция успешно завершается без выбрасывания исключения.

Метаданные объекта из хранилища StorageObjectMeta

Атрибуты:

  • name: название объекта с данными (str);
  • type: тип сохраненных данных (str). json - для JSON-объекта, parquet - для Spark-датафрейма.
  • last_modified: дата и время последнего изменения объекта в хранилизе (в UTC без указания таймзоны).

Параметры модели Vault

Обеспечивает доступ к параметрам модели, указываемым в редакторе ETL. Обычно используется для хранения чувствительных параметров: API ключей к внешним сервисам, строк подключения к БД и т.п.

Методы:

  • get(name) -> str: возвращает значение параметра с названием name или None, если пользователь не задал параметр с таким именем. Значения всегда возвращаются в виде строки, и разработчику скрипта необходимо самостоятельно позаботиться о приведении типа к нужному для корректного использования.

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

import pymongo


def after_load_virtual(df, app, spark, *args, **kwargs):
    """ """
    mongo_url = app.vault.get('mongo_url')

    if not mongo_url:
        raise Exception('Не указана строка подключения к БД')

    mongo_client = pymongo.MongoClient(mongo_url)

    db = mongo_client['my_database']

    rows = []
    for doc in db.my_documents.find():
        ...

    return df

Spark-сессия SparkSession

Представляет тобой контекст выполняемого Spark-приложения. Используется для доступа к возможностям SQL-движка Spark.

df = spark.createDataFrame([
    {'code': '01', 'name': 'Название 1'}, 
    {'code': '02', 'name': 'Название 2'}
])

df.createOrReplaceTempView('my_table')

df1 = spark.sql("SELECT name FROM my_table WHERE code = '01'")
df1.show()

# +----------+
# |   name   |
# +----------+
# |Название 1|
# +----------+

Более подробная информация в официальной документации.

Spark-датафрейм DataFrame

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

Более подробная информация в официальной документации.

Модель Model

  • id - идентификатор модели (int);
  • objects - список объектов модели (List[ModelObject]);
  • fields - список вычисляемых полей модели (List[ModelCalcField]);
  • schedule - cron-выражение, задающее расписание синхронизации модели;

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

  • data_source: описание источника данных (DataSource);
  • sql_test: если

Источник данных DataSource

  • type: тип источника (postgres, oracle, xlsx, ...)
  • db / file: имя базы данных или путь к файлу (в зависимости от типа источника);

Поле объекта модели ModelObjectField

Вычисляемое поле модели ModelCalcField