Преобразование данных (ETL)

Содержание раздела
  1. Поддерживаемые сущности
  2. Как вставить преобразованные данные
  3. Примеры
  4. Причины ошибок при вставке преобразованных данных
  5. Отмена неуспешной операции

Система позволяет преобразовывать данные с помощью ETL, выбирая их из одних сущностей и вставляя их в преобразованном виде в другие сущности.

Поддерживаемые сущности

Преобразование данных возможно с выборкой данных из сущностей, поддерживающих SELECT-запросы, и их вставкой в следующие сущности:

Далее в этом разделе описано перемещение преобразованных данных между логическими сущностями. О перемещении данных между standalone-таблицами и логическими сущностями см. разделах Импорт данных из СУБД (из standalone-таблицы) и Экспорт данных в СУБД (в standalone-таблицу).

Как вставить преобразованные данные

Чтобы вставить в логическую или прокси-таблицу данные, выбранные из других логических сущностей, в преобразованном виде:

  1. Если необходимо включить изменения данных логической таблицы в дельту и в логической БД нет открытой дельты, откройте новую дельту.
  2. Выполните запрос INSERT SELECT:
    • чтобы выполнить запрос в синхронном режиме, используйте любой из способов:
      • отправьте запрос по JDBC,
      • отправьте запрос по HTTP с помощью POST-метода query без параметра async или с параметром async, имеющим значение false;
    • чтобы выполнить запрос в асинхронном режиме, отправьте его по HTTP с помощью POST-метода query с параметром async, имеющим значение true.
  3. Если изменения были выполнены в дельте и они должны быть последними в дельте, закройте дельту.

При вставке данных в прокси-таблицы учитывайте ограничения таблиц целевой СУБД.

Примеры

-- выбор логической базы данных marketing в качестве базы данных по умолчанию
USE marketing;

-- вставка данных из таблицы sales в таблицу sales_july_2021 с фильтром записей, но без их преобразования
INSERT INTO sales_july_2021 
SELECT * FROM sales WHERE CAST(EXTRACT(MONTH FROM transaction_date) AS INT) = 7 AND 
  CAST(EXTRACT(YEAR FROM transaction_date) AS INT) = 2021 DATASOURCE_TYPE = 'adb';

--- вставка данных адресов из таблицы stores в те строки таблицы sales_with_address, где адрес не заполнен
INSERT INTO sales_with_address
SELECT s.id, s.transaction_date, s.product_code, s.product_units, s.store_id, s.description, 
st.region || ', ' || st.address as store_address
FROM stores AS st 
JOIN sales_with_address AS s ON s.store_id = st.id 
WHERE s.store_address IS NULL OR s.store_address = ''
DATASOURCE_TYPE = 'adb';

Причины ошибок при вставке преобразованных данных

Ошибки при вставке данных из других сущностей могут быть вызваны следующими основными причинами:

  • Несоответствие порядка, количества или типов столбцов между SELECT-подзапросом на выборку данных и таблицей-приемником данных.
  • Отсутствие в запросе значений обязательных столбцов таблицы-приемника данных.
  • Указание в запросе датасорсов тех типов, между которыми недоступно перемещение данных с помощью ETL.

Отмена неуспешной операции

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

При неуспешной вставке данных в standalone-таблицу изменения не отменяются автоматически, — их нужно отменять вручную в соответствующем датасорсе. Если ошибка связана с ограничениями целевой СУБД, для устранения такой ошибки следуйте рекомендациям, доступным в документации этой СУБД.