Skip to content

Release 0.11 notes

Изменения data_type_rk

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

Data type name Old data_type_rk New data_type_rk
AMOUNT 1 1796623978
CURRENCY 2 419959694
SHARE 3 1681445414
STRING 4 1601148794
BIG_INT 5 1523509284
FLAG 6 1387904535
FLOAT 7 671674020
INT 8 890642190
SMALL_INT 9 315822524
BIG_STRING 10 1430130245
DATETIME 11 48934079
DATE 12 1157021114

Для всех остальных типов данных (в т.ч. новых) значение data_type_rk должно рассчитываться по следующему алгоритму:

import hashlib

data_type_name = 'new_data_type'
INT_MAX = 2**31 - 1
int(hashlib.sha256(data_type_name.encode()).hexdigest(), 16) % INT_MAX 

Справочники типов данных v100 и v2 должны изменяться синхронно и полностью соответствовать друг другу.

Перенос таблицы alembic version

Если таблица alembic_version хранится в схеме public, то перед установкой релиза 0.11 необходимо выполнить следующие запросы в metastore:

CREATE TABLE meta.alembic_version (
    version_num varchar(32) NOT NULL,
    CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
);

INSERT INTO meta.alembic_version SELECT version_num from public.alembic_version;

DROP TABLE public.alembic_version;

Обновление справочников

Если таблица meta.ref_type_default пустая, необходимо выполнить инициализацию справочников, вызвав POST v100/admin/ref_init. Иначе необходимо учесть новые типы данных в справочнике дефолтов:

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'postgresql', 'timestamp with time zone', 'DATETIME', '_root', current_timestamp, current_timestamp;

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'greenplum', 'timestamp with time zone', 'DATETIME', '_root', current_timestamp, current_timestamp;

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'postgresql', 'timestamp without time zone', 'DATETIME', '_root', current_timestamp, current_timestamp;

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'greenplum', 'timestamp without time zone', 'DATETIME', '_root', current_timestamp, current_timestamp;

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'postgresql', 'character varying', 'BIG_STRING', '_root', current_timestamp, current_timestamp;

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'greenplum', 'character varying', 'BIG_STRING', '_root', current_timestamp, current_timestamp;

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'postgresql', 'character', 'BIG_STRING', '_root', current_timestamp, current_timestamp;

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'greenplum', 'character', 'BIG_STRING', '_root', current_timestamp, current_timestamp;

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'postgresql', 'decimal', 'FLOAT', '_root', current_timestamp, current_timestamp;

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'greenplum', 'decimal', 'FLOAT', '_root', current_timestamp, current_timestamp;

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'postgresql', 'unknown', 'BIG_STRING', '_root', current_timestamp, current_timestamp;

insert into meta.ref_type_default (db_name, db_type, default_fs_type, author, created_dttm, updated_dttm)
select 'greenplum', 'unknown', 'BIG_STRING', '_root', current_timestamp, current_timestamp;

update meta.ref_type_default
set db_type = 'double precision' -- изменилось название
where db_type = 'double_precision' and db_name in ('postgresql', 'postgres');

Использование PVC в качестве хранилища кода DAG-ов

Настройка приложения axiom

  1. Cоздать pvc с типом RWM

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: axiom-dags
      namespace: axiom-dev
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: nfs
      volumeMode: Filesystem
    
  2. Примонтировать PVC в values.yaml приложения

    ...
      persistentVolumes:
        ...
        - name: axiom-dags
          mountPath: /var/dags
          existingVolumeClaim: true
        ...
    
  3. Указать значения переменных окружения в axiom:

    AF__DAGS_FILE_SYSTEM=pvc
    (если отличается от значения по умолчанию) AF__DAGS_PVC_MOUNT_PATH=/var/dags
    # PYTHONPATH в Airflow
    AF__VENV__PYTHONPATH=/opt/bitnami/airflow/dags/axiom/axiom_custom:/opt/bitnami/airflow/dags/axiom/axiom_custom/axiom
    # Путь до кода DAG-ов в Airflow
    AF__VENV__DAGS_PATH=/opt/bitnami/airflow/dags/axiom
    # Путь до кода tasks в Airflow
    AF__VENV__TASKS_PATH=/opt/bitnami/airflow/dags/axiom/axiom_custom/axiom/custom_tasks
    

Настройка Airflow

  1. Удалить секцию service.git
  2. Примонтировать PVC в values.yaml Airflow

    ...
      extraVolumes:
        ...
        - name: dags
          persistentVolumeClaim:
            claimName: axiom-dags
        ...
        extraVolumeMounts:
        ...
        - name: dags
          mountPath: /opt/bitnami/airflow/dags
          readOnly: false
        ...
    
  3. Указать значение переменной окружения

    PYTHONPATH=/opt/bitnami/airflow/dags**
    AIRFLOW_CONFIG_LOCATION=/opt/bitnami/airflow/dags/axiom/airflow_config.ini
    

Настройка пула для дагов в Airflow

Для настройки пула в Airflow под даги приложения необходимо:

  1. Создать пул с именем в Airflow (Airflow UI: Admin -> Pools -> +)

  2. Указать имя созданного пула в переменную окружения в чарте Airflow: AXIOM_DAGS_POOL

Airflow Environment Variables (NEW)

SSL_VERIFICATION = false    # Требуется ли ssl верификация для приложения. По умолчанию False. 
                                # Возможные значения: True/False/cert_path
AXIOM_DAGS_POOL = "default_pool"    # Имя пула для тасок axiom в Airflow

API Environment Variables (CHANGES)

Унифицированы имена всех переменных окружения, в частности переменные сгруппированы по секциям: Metastore, Datastore, Engine, S3, Airflow, Log, Sentry, Keycloak, Git, Rosbank (см. таблицу ниже) Все переменные типа bool и int в values файле больше нет необходимости обрамлять в кавычки. Переменные типа json должны обрамляться одинарными кавычками, например: LOG_FIELDS_REDEFINE='{"traceback": "aboba"}'.

Важно! Старые переменные, отвечающие за размер/таймаут пула - сгруппированы в DB__CONN_OPTIONS. Расширенная инструкция по конфигурации доступна в руководстве Connecting Datastore

NEW

AXIOM__CONFIG_PREFIX = ''  # устанавливает префикс для всех переменных окружения
                           # по-умолчанию - не установлен

S3__SSL_VERIFICATION = true             # Требуется ли ssl верификация. По умолчанию True
                                        # Возможные значения: True/False/cert_path

AF__SSL_VERIFICATION = true             # Требуется ли ssl верификация. По умолчанию True
                                        # Возможные значения: True/False/cert_path

KEYCLOAK__SSL_VERIFICATION = true       # Требуется ли ssl верификация. По умолчанию True
                                        # Возможные значения: True/False/cert_path

RB__DATASOURCE_SSL_VERIFICATION = true  # Требуется ли ssl верификация. По умолчанию True
                                        # Возможные значения: True/False/cert_path

LOG_FIELDS_REDEFINE = '{}'  # Переопределение имен полей в json-логе. 
             # Например: '{"traceback": "aboba"}' переопределит дефолтное поле traceback как aboba 

AF__URL = ""                  # URL до Airflow (без логина и пароля)
AF__USER = "user"             # user для Airflow
AF__PASSWORD = "password"     # пароль для Airflow
AF__DAGS_FILE_SYSTEM = "git"  # Тип хранилища для кода DAG-ов Airflow (git/pvc)
AF__DAGS_PVC_MOUNT_PATH = "/var/dags"  # Путь до директории к примонтированному pvc

ENGINE__DROP_OBJECTS_BATCH_SIZE = 100  # Размер батча для метода drop_objects() при datastore reset

Metastore

Old name NEW name Comment
META_DB_URL META__URL ...
- META__CONN_OPTIONS new!
META_POOL_SIZE (removed) moved to META__CONN_OPTIONS
META_MAX_OVERFLOW (removed) moved to META__CONN_OPTIONS
META_POOL_TIMEOUT (removed) moved to META__CONN_OPTIONS
META_SCHEMA_NM META__SCHEMA ...
- META__WORK_SCHEMA теперь отдельная переменная для meta
ROLLBACK_PASS META__ROLLBACK_PASS ...
DB_ROLLBACK_INITIAL_CSV_PATH_META META__ROLLBACK_CSV_PATH ...

Datastore

Old name NEW name Comment
DB_URL DB__URL ...
- DB__CONN_OPTIONS new!
STORE_POOL_SIZE (removed) moved to DB__CONN_OPTIONS
STORE_MAX_OVERFLOW (removed) moved to DB__CONN_OPTIONS
STORE_POOL_TIMEOUT (removed) moved to DB__CONN_OPTIONS
STAGE_SCHEMA_NM DB__STAGE_SCHEMA ...
STORE_SCHEMA_NM DB__STORE_SCHEMA ...
DATASET_SCHEMA_NM DB__DATASET_SCHEMA ...
WORK_SCHEMA_NM DB__WORK_SCHEMA ...
SANDBOX_SCHEMA_NM (removed) legacy
PLUS_INFINITY DB__PLUS_INFINITY ...
MINUS_INFINITY DB__MINUS_INFINITY ...
DB_OBJECT_NAME_LENGTH_LIMIT DB__MAX_NAME_LENGTH ...
...
DB_ROLLBACK_INITIAL_SQL_PATH DB__ROLLBACK_STAGE_DDL_PATH legacy
DB_ROLLBACK_INITIAL_CSV_PATH_STAGE DB__ROLLBACK_STAGE_CSV_PATH legacy

FS Engine

Old name NEW name Comment
FS_ALCHEMY_TEMP_OBJECTS_AS ENGINE__TEMP_OBJECTS_AS ...
FS_ALCHEMY_ASYNC_FACTOR ENGINE__ASYNC_FACTOR ...
AXIOM_AUTO_ANALYZE ENGINE__AUTO_ANALYZE ...
AXIOM_AUTO_INDEX ENGINE__AUTO_INDEX ...
AXIOM_DISTRIBUTED_BY_OVERRIDE ENGINE__DEFAULT_STORAGE_KEY ...
AXIOM_SKIP_FEATURES_STATS ENGINE__SKIP_FEATURES_STATS ...
AXIOM_SKIP_STAT_ENTITY_COUNT ENGINE__SKIP_STAT_ENTITY_COUNT ...
...
GREENPLUM_SESSION_OPTS ENGINE__GREENPLUM_SESSION_OPTS legacy, не работает, moved to ref_execution_profile
POSTGRES_SESSION_OPTS ENGINE__POSTGRES_SESSION_OPTS legacy, не работает, moved to ref_execution_profile

S3 Storage

Old name NEW name Comment
S3_ENABLED S3__ENABLED ...
S3_URL S3__URL ...
S3_BUCKET S3__BUCKET ...
S3_ACCESS_KEY S3__ACCESS_KEY ...
S3_SECRET_ACCESS_KEY S3__SECRET_ACCESS_KEY ...
dataset_sql_path S3__DATASET_SQL_PATH ...
dataset_csv_path S3__DATASET_CSV_PATH ...
dataset_file_limit_size_mb S3__MAX_FILE_SIZE_MB ...
dataset_buff_limit_size_mb S3__BUFFER_SIZE_MB ...
dataset_describe_timeout S3__BUFFER_MALLOC_TIMEOUT ...
dataframe_paralel_processing_count (removed) never used
s3_url_expire_interval S3__URL_EXPIRE_INTERVAL ...

Airflow

Old name NEW name Comment
AIRFLOW_URL AF__URL ...
AIRFLOW_DB_CONN (removed) unused
pipeline_id (removed) unused
constructor_id (removed) unused
dataset_csv_id (removed) unused
dataset_split_id (removed) unused
dags_factory_id (removed) unused
loader_id AF__LOADER_ID ...
dataset_delete_id AF__DATASET_DELETE_ID ...
dag_executor_id AF__DAG_EXECUTOR_ID ...
AIRFLOW_EXECUTION_MODE AF__EXECUTION_MODE ...
AXIOM_DAGS_PATH AF__DAG_SRC_PATH ...
DAG_TEMPLATE_LOCATION AF__DAG_TEMPLATE_PATH ...
DAG_POST_TIMEOUT AF__DAG_POST_TIMEOUT ...
DAG_TRIGGER_TIMEOUT AF__DAG_TRIGGER_TIMEOUT ...
DAG_TRIGGER_RETRIES AF__DAG_TRIGGER_RETRIES ...
CUSTOM_VENV_LOCATION AF__VENV__PATH ...
CUSTOM_PYTHONPATH AF__VENV__PYTHONPATH ...
SCRIPT_LOCATION AF__VENV__DAGS_PATH ...
CUSTOM_SCRIPT_LOCATION AF__VENV__TASKS_PATH ...
CUSTOM_K8S_PYTHONPATH AF__K8S__PYTHONPATH ...
K8S_TASKS_IMAGE AF__K8S__IMAGE ...
K8S_TASKS_PATH AF__K8S__TASKS_PATH ...
K8S_NAMESPACE AF__K8S__NAMESPACE ...
K8S_REGCRED AF__K8S__REGCRED ...
K8S_CONFIGMAP AF__K8S__CONFIGMAP ...
K8S_SECRET AF__K8S__SECRET ...
TASK_REQUEST_MEMORY_MB AF__K8S__REQUEST_MEM ...
TASK_LIMIT_MEMORY_MB AF__K8S__LIMIT_MEM ...
TASK_REQUEST_CPU_mCore AF__K8S__REQUEST_CPU ...
TASK_LIMIT_CPU_mCore AF__K8S__LIMIT_CPU ...
AXIOM_DAGS_PATH (removed) unused

LOG

Old name NEW name Comment
log_prefix LOG__PREFIX ...
log_type LOG__FORMAT ...
log_level LOG__LEVEL ...
log_sleep (removed) legacy
MAX_LOG_LEN LOG__MAX_LINE_LENGTH ...
LOG_FIELDS_REDEFINE LOG__KEYS_REDEFINE ...
LOG_PATH LOG__FILE_NAME ...

Sentry

Old name NEW name Comment
SENTRY_ENABLED SENTRY__ENABLED ...
SENTRY_DSN SENTRY__DSN ...

Keycloak

Old name NEW name Comment
KEYCLOAK_URL KEYCLOAK__URL ...
OPENID_POSTFIX KEYCLOAK__OPENID_POSTFIX ...
USERINFO_POSTFIX KEYCLOAK__USERINFO_POSTFIX ...
KEYCLOAK_ACCESS_ROLE KEYCLOAK__ACCESS_ROLE ...
CLIENT_ID KEYCLOAK__CLIENT_ID ...
VERIFY_TOKEN KEYCLOAK__VERIFY_TOKEN ...

Git

Old name NEW name Comment
GIT_ENABLED GIT__ENABLED ...
GIT_TYPE GIT__AUTH_TYPE ...
GIT_URL GIT__URL ...
GIT_USERNAME GIT__USER_NAME ...
GIT_USER_EMAIL GIT__USER_EMAIL ...
GIT_REPO_ID GIT__REPO_ID ...
GIT_BRANCH GIT__BRANCH ...
GIT_LOGIN GIT__LOGIN ...
GIT_PASSWORD GIT__PASSWORD ...
GIT_SSH_KEY_PATH GIT__SSH_KEY_PATH ...
GIT_SSH_KEY_PATH_INIT GIT__SSH_KEY_PATH_INIT ...
GIT_SSH_KEY_PATH_DAG GIT__SSH_KEY_PATH_DAG ...
GIT_SSH_KEY_NAME GIT__SSH_KEY_NAME ...
GIT_KEY_SECRET_NAME GIT__SSH_KEY_SECRET ...

Rosbank

Old name NEW name Comment
DATASOURCE_DAGS_ENABLED RB__DATASOURCE_DAGS_ENABLED ...
ROWNUM_ENABLED RB__ROWNUM_ENABLED ...
LOADER_ROWNUM_ENTITY_RK RB__ROWNUM_ENTITY_RK ...
CALCULATING_DENSE_DISTRIBUTION_PLOT RB__DENSE_PLOT_ENABLED ...
DISTRIBUTION_PLOT_RESULT_FILENAME RB__DENSE_PLOT_FILENAME ...
DIST_PLOT_CALCULATION_TIMEOUT (removed) unused