Преобразование данных (ETL)
Содержание раздела
Система позволяет преобразовывать данные с помощью ETL, выбирая их из одних сущностей и вставляя их в преобразованном виде в другие сущности.
Поддерживаемые сущности
Преобразование данных возможно с выборкой данных из сущностей, поддерживающих SELECT-запросы, и их вставкой в следующие сущности:
Далее в этом разделе описано перемещение преобразованных данных между логическими сущностями. О перемещении данных между standalone-таблицами и логическими сущностями см. разделах Импорт данных из СУБД (из standalone-таблицы) и Экспорт данных в СУБД (в standalone-таблицу).
Как вставить преобразованные данные
Чтобы вставить в логическую или прокси-таблицу данные, выбранные из других логических сущностей, в преобразованном виде:
- Если необходимо включить изменения данных логической таблицы в дельту и в логической БД нет открытой дельты, откройте новую дельту.
- Выполните запрос INSERT SELECT:
- чтобы выполнить запрос в синхронном режиме, используйте любой из способов:
- чтобы выполнить запрос в асинхронном режиме, отправьте его по HTTP с помощью POST-метода query с параметром async, имеющим значение
true
.
- Если изменения были выполнены в дельте и они должны быть последними в дельте, закройте дельту.
При вставке данных в прокси-таблицы учитывайте ограничения таблиц целевой СУБД.
Примеры
-- выбор логической базы данных 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-таблицу изменения не отменяются автоматически, — их нужно отменять вручную в соответствующем датасорсе. Если ошибка связана с ограничениями целевой СУБД, для устранения такой ошибки следуйте рекомендациям, доступным в документации этой СУБД.