Как обрабатывать имена TZ в Sybase IQ 16
В контексте файлового процесса ETL (простая оболочка + BCP во временную таблицу + хранимая процедура импорта в конечную таблицу) возникла новая сложность с импортом данных из удаленной базы данных Oracle в базу данных Sybase IQ 16.
Импортируемые данные имеют отметку времени (
YYYY-MM-DD HH:MI:SS
) без часового пояса и дополнительного поля с названием ТЗ (например,
Europe/Zurich
). Вся информация должна храниться в формате UTC+0.
Oracle имеет специальную функцию TimeZone
TO_TIMESTAMP_TZ
которому нет совпадений в базе данных IQ. Более простое решение, которое я вижу, состояло бы в том, чтобы источник отправлял временную метку с часовым поясом. А затем используйте
SWITCHOFFSET
функция. Но у меня ограниченное влияние на изменение формата исходной системы.
Пример Sybase IQ изменения смещения временной метки с часовым поясом:
SELECT CAST ( '2022-02-18 14:45:12.123+01:00' AS datetimeoffset ) AS dt_originalTZ, SWITCHOFFSET( dt_originalTZ,'+00:00' ) AS dt_destinationTZ;
--dt_originalTZ,dt_destinationTZ
--'2022-02-18 14:45:12.123+01:00','2022-02-18 13:45:12.123+00:00
Время/бюджет ограничены, я не думаю, что на стороне базы данных IQ было бы целесообразно создать новую пользовательскую функцию для сопоставления всех возможных имен TZ со смещениями. Эта альтернативная основная сложность будет связана с переходом на летнее время.
Я также не хочу создавать взломанное решение, зависящее, скажем, от оболочки на Linux-сервере, преобразующей входной файл, поскольку это создаст более частные случаи с большим количеством возможных точек сбоя и большим количеством зависимостей для управления.
Я пропустил какой-либо более простой подход, который мог бы спасти положение?