Getl Versions Save

A tool for developing and testing ETL and ELT processes for automating the capture, delivery and processing of information in data warehouses on the MicroFocus Vertica platform.

4.18.9

4 months ago

Groovy

  • Изменена версия Groovy на 3.0.19

Dsl фичи

  • script: в скриптовый язык, используемый в выражениях моделей маппинга и workflow добавлены функции isNumber, isLong, isBigInteger, isDouble, isFloat, asFloat, inStr, substr, findAll, upper, lower, trim, lTrim, rTrim.

  • main: для оператора "textFile" добавлено свойство "logOutput", при включении которого все записываемое в текстовый файл также выводится в консоль.

  • main: теперь в операторе "textFile" можно не задавать имя файла, будет организована запись в текстовый буфер, значение которого можно получить из свойства "bufferText".

  • main: при указании имени файла в операторе "textFile" можно задавать переменные date, time, datetime, environment и имена переменных, указанных при запуске в командной строке.

  • main: добавлены функции EvalMacroString (парсинг текста с переменными) и TransformFilePath (преобразования пути с учетом переменных ОС и служебных переменных Getl).

  • Dsl баги

  • main: методы textFile не работали в режиме синхронизации, что могло привести к ошибке при записи из разных потоков.

Getl фичи

  • getl.files.Manager: к основным функциям работы с файловой системой добавлена обработка ошибок с записью в dump файл детализации при возникновении ошибки.
  • getl.utils.ConvertUtils: теперь при конвертировании строки в список в функциях String2List и String2Map так же определяются элементы списка, имеющие булевый тип.
  • getl.utils.NumericUtils: добавлена функция isNumber.
  • getl.utils.StringUtils: добавлены функции InStr, Substr, FindAll.
  • getl.data.Dataset: добавлена функция "DetectChangeFields", которая сравнивает поля датасета с указанными полями и генерирует карту отличий полей датасета от переданных полей.
  • getl.files.HDFSManager: добавлены свойства "connectionTimeout" и "maxRetryOnError", с помощью которых можно задать таймаут ожидания соединения и количество попыток соединения.
  • getl.firebird.FirebirdDriver: добавлена поддержка опции "ifExists" для метода создания таблицы "createDataset", где таблица создается ключевым словом "RECREATE".
  • getl.firebird.FirebirdDriver: добавлена поддержка чтения и записи текстовых полей CLOB.
  • getl.jdbc.JDBCConnection: добавлена информация по серверу и jdbc драйверу в свойствах "serverMajorVersion", "serverMinorVersion", "serverProductName", "serverProductVersion", "jdbcDriverMajorVersion", "jdbcDriverMinorVersion", "jdbcDriverProductName" и "jdbcDriverProductVersion". Значения свойств устанавливаются после соединения с сервером.
  • getl.jdbc.JDBCDriver: при генерации имен объектов в SQL скриптах теперь при определении обрамления имен в скобки учитываются не только основные ключевые слова ANSI SQL, но и дополнительные ключевые слова сервера, которые он декларирует.
  • getl.jdbc.JDBCDriver: в метод executeCommand добавлены опции "ddlOperator" и "commit". Если у соединения выключен "autocommit", включена опция "ddlOperator" и сервер обрабатывает такие операторы в транзакциях или же включена опция "commit", то переданный скрипт будет выполнен в транзакции.
  • getl.jdbc.JDBCDriver: для методов, генерирующих DDL операторы, при включенной опции "ddlOnly" в генерируемый sql скрипт в конец будет добавлен COMMIT, если сервер обрабатывает такие операторы в транзакции.
  • getl.jdbc.JDBCDriver: для DML методов, генерирующих DML операторы, при включенной опции "ddlOnly" в генерируемый sql скрипт в конец будет добавлен COMMIT.
  • getl.jdbc.Sequence: для метода "restartWith" добавлен параметр "ddlOnly".
  • getl.jdbc.TableDataset: добавлен метод "renameTo", с помощью которого можно переименовать таблицу.
  • getl.jdbc.TableDataset: добавлена функция "synchronizeStructure", с помощью которой можно синхронизировать таблицу БД с описанной структурой текущей таблицы. Функция может вернуть сгенерированный скрипт синхронизации или же сразу выполнить его на сервере. При синхронизации проверяются новые и лишние поля, а также различие свойств полей: тип поля, nullable, значение по умолчанию и состав первичного ключа. При невозможности конвертировать тип поля, поддерживается режим пересоздания таблицы (кроме Firebird), где создается рядом новая таблица с необходимой структурой, в неё переливаются данные из существующей таблицы, которая затем удаляется, а созданная таблица переименовывается. Синхронизация первичного ключа на текущий момент поддерживается для Firebird, H2Database, MySql, PostgreSQL и Vertica.
  • getl.oracle.OracleDriver: при подключении к Oracle версии 23 включается поддержка опций "ifExists" и "ifNotExists" для методов создания и удаления таблиц, а также индексов.
  • getl.proc.Flow: в метод "copy" добавлена опция "bulkMap", в которой можно задать маппинг для пакетной загрузки записей из промежуточного сформированного CSV файла в таблицу БД.
  • getl.sqlite.SQLiteDriver: включена поддержка опций "ifExists" и "ifNotExists" для методов создания и удаления таблиц, а также индексов.
  • getl.utils.FileUtils: добавлена функция создания временной директории "CreateTempDirectory".
  • getl.utils.FileUtils: в функцию "TransformFilePath" добавлен параметр "sysVars", при включении которого при обработке пути учитываются переменные "date", "time", "datetime" и переменные, переданные в командной строке, если указан параметр "getl".
  • getl.jdbc.JDBCDriver: добавлена поддержка IF NOT EXISTS и IF EXISTS для создания и удаления VIEW.

Getl баги

  • getl.proc.FileCopier: могла возникнуть ситуация, когда при многопоточном копировании файлов по группам атрибутов один из потоков заканчивал работу и удалял временный директорий, в котором другие потоки работали, что приводило к ошибке директорий или файл не найден.
  • getl.utils.DateUtils: при вызове функции ParseSQLTime происходила ошибка, если в передаваемой строке были миллисекунды.
  • getl.excel.ExcelDriver: исправлена ошибка чтения записей методом eachRow из Excel файлов "xls" (формат 2003).
  • getl.firebird.FirebirdDriver: исправлена ошибка вызова чтения текущего времени, где использовалась функция 3 версии, которая не работает в 4 версии Firebird.
  • getl.models.MonitorRules: если в таблице состояния правил были записи неизвестных правил, то генерировалась ошибка вместо предупреждения.
  • getl.jdbc.JDBCTable: при вызове функций создания и удаления объектов с опцией ddlOnly происходило соединение с сервером.

Download GETL

4.18.8

8 months ago

Groovy баги

  • В ряде классов Getl стояла аннотация CompileStatic, что приводило к некорректной работе с публичными полями объектов класса из других объектов. Пока в Groovy пока идет активное исправление ошибок с этой аннотацией, решено убрать с классов данную аннотацию. Для тех мест, где требуется более высокая скорость выполнения кода, аннотация используется непосредственно для методов, содержащих такой код.

Getl баги

  • getl.jdbc.HistoryPointManager: в методе cloneHistoryPointManager передавался параметр connection, который не возможно склонировать под тем же именем в репозитории. Параметр connection убран из метода.

Download GETL

4.18.7

8 months ago

Dsl фичи

  • main: добавлена служебная макропеременная "#ENVIRONMENT", которая доступна при всех преобразованиях файловых путей и использовании переменных в значениях параметров скриптов.
  • script: в язык выражений и скриптов добавлены функции "validPath" и "validFilePath", которые проверяют существование пути к директорию или файлу и при отсутствии его создают.
  • main: в командной строке запуска теперь можно задавать переменные для конкретных скриптов, используемых в Workflow. Для этого используйте формат "$Script1.var1=Значение", где Script1 это simpleName класса Script1, а var1 передаваемая переменная. Переменная будет видна только при выволнении указанного скрипта в нём как внешняя переменная "scriptExtendedVars", а так же применятся для соединений и файловых серверов, вызываемых в этом скрипте.

Dsl баги

  • logins: в StorageLogins для соединений и файловых менеджеров не корректно сохранялся пароль, если он для логина задавался как null. Вместо null сохранялась строка "null".

Getl фичи

  • getl.jdbc.SQLScripter: расширен пул возвращаемых кодов при ошибках, для подробностей смотрите документацию на свойство exitCode.
  • getl.models.Workflows: теперь в случае ошибки в одном из скриптов шага можно продолжить выполнение следующих за этим шагом шагов, вернув в подшаге обработки ошибки в условии "true". Подчиненные шаги упавшего шага выполнятся не будут.
  • getl.proc.Executor: добавлено событие onProcessError, которое вызывается при возникновении ошибки в потоке при выключенном abortOnError и позволяет решить, нужно ли далее продолжать обрабатывать другие потоки или следует завершить работу Executor с ошибкой.
  • getl.utils.Messages: при загрузке файла ресурсов можно выключить проверку существования уже ранее загруженных сообщений и перегрузить с файла сообщения поверх.
  • getl.data.Connection: в свойстве "codePage" теперь можно использовать макропеременные, заданные при запуске workflow.
  • getl.data.WebServiceConnection: во всех соединениях, работающих с веб сервисами (JSON, XML, YAML) теперь в свойствах "webUrl", "login", "password" и "storedLogins" можно использовать макропеременные, заданные при запуске workflow. Если требуется задать пароль через переменную, чтобы он не кодировался, требуется его значение задавать как "${переменная}".
  • getl.files.FTPManager: теперь в свойствах "localDirectory", "server", "login", "password" и "storedLogins" можно использовать макропеременные, заданные при запуске workflow. Если требуется задать пароль через переменную, чтобы он не кодировался, требуется его значение задавать как "${переменная}".
  • getl.files.HDFSManager: теперь в свойствах "localDirectory", "server", "login", "password" и "storedLogins" можно использовать макропеременные, заданные при запуске workflow. Если требуется задать пароль через переменную, чтобы он не кодировался, требуется его значение задавать как "${переменная}".
  • getl.files.SFTPManager: теперь в свойствах "localDirectory", "server", "login", "password", "storedLogins", "knownHostsFile", "hostKey", "identityFile", "passphrase", "hostOS" и "codePage" можно использовать макропеременные, заданные при запуске workflow. Если требуется задать пароль через переменную, чтобы он не кодировался, требуется его значение задавать как "${переменная}".
  • getl.jdbc.JDBCConnection: теперь, для всех JDBC совместимых соединений, в свойствах "dbName", "schemaName", "connectHost", "connectDatabase", "connectURL", "login", "password" и "storedLogins" можно использовать макропеременные, заданные при запуске workflow. Если требуется задать пароль через переменную, чтобы он не кодировался, требуется его значение задавать как "${переменная}".

Getl баги

  • getl.vertica.ReverseEngineering: возникала ошибка при генерации DDL скриптов для UDF SQL функций при попытке получения их описания для Vertica от 12 версии и новее.

Download GETL

4.18.6

8 months ago

Getl фичи

  • getl.jdbc.SQLScripter: для оператора EXIT теперь можно указывать код завершения скрипта. Просмотреть код завершения можно в свойстве "exitCode". Если явно код не задан, то по умолчанию будет возвращен ноль.
  • getl.jdbc.SQLScripter: для оператора ERROR теперь заданный текст ошибки сохраняется в свойство "errorText", а в свойство "exitCode" устанавливается код завершения "-1".
  • getl.jdbc.SQLScripter: при возникновении ошибки выполнения скрипта в свойство "exitCode" устанавливается код завершения "-2".
  • getl.jdbc.SQLScripter: после вызова выполнения файла скрипта оператором "RUN_FILE" можно узнать код его завершения в переменной "sql_exit_code".
  • getl.jdbc.SQLScripter: для операторов RUN_FILE, SWITCH_LOGIN, EXIT и ERROR теперь можно в параметрах вызова использовать переменные скрипта.

Getl баги

  • getl.files.Manager: при обработке имен файлов и директориев могла не корректно работать функция "currentDir", если их имена содержали не латинские буквы.
  • getl.utils.Path: при компиляции маски могли не корректно формироваться регулярные выражения для поиска и сравнения имен файлов и директориев с маской, если их имена содержали не латинские буквы.
  • getl.utils.Lexer: функция scriptBuild возвращала ошибку, если параметр старта ключевого слова "start" был больше, чем общая длина списка слов.

Download GETL

4.18.5

9 months ago

4.18.4

1 year ago
  • Getl баги

  • getl.vertica.VerticaDriver.groovy: при создании таблицы возникала ошибка, если в опции создании segmentedBy был указан ALL NODES.
  • getl.utils.Lexer: не корректно обрабатывались одиночные комментарии в тексте, если внутри них содержались /* и */.
  • getl.jdbc.SQLScripter: если в скрипте перед оператором стоял одиночный комментарий, внутри которого был многострочный комментарий, то этот оператор не выполнялся.

Download GETL

4.18.3

1 year ago
  • Dsl фичи

  • main: добавлен оператор sql, в котором можно параметром задать имя соединения в репозитории. Ранее можно было только указать параметром объект соединения.

Getl фичи

  • getl.jdbc.SQLScripter: добавлено свойство defaultCodePage, в котором можно задать, в какой кодировке будут считываться файлы для выполнения через функции runFile и loadFile, а так же оператор RUN_FILE. Если это свойство не задано и при считывании файла функцией будет явно задана кодировка, она станет кодировкой по умолчанию и установиться в это свойство.
  • getl.jdbc.SQLScripter: если при чтении файла скрипта функциями runFile и loadFile или оператором RUN_FILE он не находится по указанному пути, если не указано расширение, производится поиск этого файла с расширением "sql". Если путь указан относительный, то поиск файла скрипта дополнительно производится в репозитории.
  • getl.utils.FileUtils: добавлена функция FindFileByDefault, которая ищет и возвращает файл по указанному пути, проводя поиск дополнительно с расширениями по умолчанию и в репозитории, если файл по указанному пути не нашелся.
  • getl.postgresql.PostgreSQLTable: в опции создания таблицы добавлено свойство "unlogged", при включении которого будет создана не логируемая таблица в БД (см. документацию PostgreSQL по unlogged tables).
  • getl.postgresql.PosgreSQLDriver: добавлена поддержка оператора unionDataset для объединения записей источника с приёмником с помощью MERGE.
  • getl.vertica.VerticaDriver: добавлена поддержка оператора unionDataset для объединения записей источника с приёмником с помощью MERGE.

Getl баги

  • getl.vertica.VerticaDriver: не корректно формировался оператор "CREATE TABLE" для создания таблицы, если в опциях создания была задана сегментация записей или для временных таблиц были указаны партиция или наследование прав.

Download GETL

4.18.2

1 year ago

Dsl фичи

  • main: в объект парсинга ParseObjectName добавлено свойство subGroups, которое возвращает массивом список групп из имени объекта, где нулевым элементом будет корневая группа.
  • script: в скриптовый язык добавлены функции isTable, isView и isQuery.

Dsl баги

  • fileman: если в copier была включена опция копирования только файлов, которые есть в истории загрузке, то при копировании таких файлов их имена снова вставлялись в историю, что приводило к ошибке дублирования уникального ключа.

Getl фичи

  • getl.proc.flow: в метод copy добавлен параметр saveSourceFieldsInErrorsDataset, который указывает, что файл ошибок нужно писать в структуре источника. По умолчанию файл ошибок пишется в структуре приёмника.
  • getl.vertica.VerticaTable: в опции createOpts добавлено свойство privileges, в котором можно задать с помощью констант includeSchemaPrivileges и excludeSchemaPrivileges, как создаваемая таблица должна наследовать права от схемы. Если опция не указана, то таблица при создании наследует права по правилам, указанным для схемы.
  • getl.*: проведен рефакторинг всех объектов Getl для корректной выдачи имени объекта при вызове toString.

Getl баги

  • getl.data.Dataset: в функции CheckTableFields возникала ошибка, если в датасете источнике не находилось поле, которое было в списке эталонных полей.
  • getl.proc.Job: при работе с экземпляром Job могла возникать ошибка, если он вызывался из-под класса, который использует log4j и в области видимости Groovy находится его объект logger.
  • getl.proc.Flow: при автоконвертации типов не было проверки переполнения числовых типов, что могло привести к некорректной записи данных из источника в приёмник, если в источнике тип данных был большей разрядности.
  • getl.jdbc.JDBCDriver: вызов fullNameDataset или nameDatset для датасета, который не TableDataset приводил к ошибке.
  • getl.jdbc.JDBCDriver: в методе unionDatasetMerge отсутствовала проверка, что источник является таблицей.
  • getl.jdbc.JDBCDriver: если в метод unionDatasetMerge в качестве источника указывался запрос, то это приводило к ошибке.
  • getl.vertica.VerticaDriver: при создании таблицы, если не была указана длина для blob и text полей, они создавались с длиной 65000 байт.
  • getl.jdbc.SQLScripter: если в ECHO в конце стоял комментарий "--", то следующий оператор воспринимался как часть комментария и не выполнялся.

Download GETL

4.18.1

1 year ago
  • Gradle

  • Версия Groovy переведена на 3.0.16

  • Dsl фичи

  • models: для табличных моделей добавлены функция historyPointSourceName, которая возвращает как имя таблицы будет хранить в таблице инкрементов, свойство modelHistoryPoint, которое возвращает ссылку на общий инкрементальный менеджер к модели без привязки к таблице и метод clearModelHistoryPoints, который сбрасывает все инкрементальные точки модели в таблице инкрементов.

  • models: для workflow в скрипте теперь можно обращаться к результатам выполнения скрипта с указанием имени объекта, для которого был зафиксирован результат, например "result('SCRIPT 1', 'group1:object1').count".

  • main: при запуске с командой строки класса Getl теперь можно включить тихий режим с помощью опции "getl_verbose_mode=true". В таком режиме не будут выводиться сведения о версии Getl и загружаемых параметрах репозитория.

  • test: юнит тесты теперь выполняются в тихом режиме.

  • Добавлен оператор runGetlFile, с помощью которого можно выполнить скрипт на языке Getl из файла, который находится локально, в ресурсах проекта или репозитории. В скрипте файла автоматически будет использован базовый класс Getl, подключен автоматический импорт аннотации @Field для описания параметров скрипта, аннотации @SaveToRepository для обозначения методов генерации объектов репозитория и классов функций getl.utils.*.

  • main: сделан рефакторинг работы с текстовыми файлами оператором textFile. Теперь вся запись в буфер идет не в память, а в кэшируемый файл, появилось свойство deleteOnEmpty, при включении которого по окончании файл будет удален, если буфер пустой.

  • repository: в функцию loadRepository для repositoryStorageManager добавлен параметр softLoad, с помощью которого можно включить кэширование загрузки репозитория. При включении этого параметра вместо загрузки объектов репозитория в память будут загружены их имена, которые будут доступны при работе со списком объектов репозитория или поиске объекта по имени. При любом обращении к объекту он будет автоматически загружен в память. Используйте эту опцию, если при работе требуется видеть полный список объектов репозитория, но не требуется тратить время на загрузку их всех сразу.

  • main: при старте процесса ему автоматически в scriptExtendedVars передаются переменные "#REPOSITORY" с абсолютным путем к репозиторию и "#TEMPDIR" с абсолютным путем к директории временных файлов, который использует JVM. Переменные можно использовать в параметрах скриптов запускаемого workflow.

  • scripts: в скриптовый язык добавлены функции parseSQLDate, parseSQLTime и parseSQLTimestamp.

Dsl баги

  • main: в базовом классе генератора объектов репозитория RepositorySave не корректно обрабатывалась последовательность сохранения созданных объектов, что могло привести к тому, что в репозитории сначала регистрировался объект, который ссылается на другой объект, который еще не был создан.

  • main: в базовом классе генератора объектов репозитория RepositorySave очищались все объекты указанного типа генерируемых объектов, даже если для их имен была задана маска. Теперь если маска указана, перед созданием будут очищаться только те объекты, которые входят в маску.

  • repository: можно было для объекта задать пустое имя группы, указав в имени групп две точки подряд.

  • threads: если внутри выполняемого потока вызывался оператор stopApp, то выполнение приложения завершалось, как будто произошла ошибка, а не штатное прерывание его работы.

  • repository: переработан механизм блокировки объектов репозитория при обращении к ним для ускорения загрузки объектов при загрузке репозитория или дозагрузки в ходе обращения к объектам.

  • Getl фичи

  • getl.utils.DateUtils: добавлены функции для форматирования java.sql типов даты и времени: FormatSQLDate, FormatSQLTime, FormatSQLTimestamp и FormatTimestampWithTz.

  • getl.jdbc.HistoryPointManager: добавлены функции lastValueLong и lastValueTimestamp для получения значения как числа или даты-времени.

  • getl.jdbc.VerticaDriver: добавлена поддержка создания local temporary view.

  • getl.proc.FileCleaner: добавлено свойство ignoreFileRemoveError, в котором можно включить игнорирование неудачных попыток удаления файлов.

  • getl.csv.CSVDriver: в CSVConnection и CSVDataset добавлено свойство blobPfefix, с помощью которого можно задать префикс перед HEX последовательностью байтов для блоб полей в файле, если выключен флаг blobAsPureHex. По умолчанию используется "0x".

  • getl.data.Field: добавлена функция IsCapacityType, с помощью которой можно сравнить совместимость значения поля приёмника к полю источника.

  • getl.jdbc.JDBCDriver: для функций создания и удаления схем, таблиц, представлений и счетчиков, а так же для функции копирования из таблицы в таблицу добавлена опция ddlOnly, при указании которой формируется SQL скрипт, но не выполняется сама операция. Скрипт сохраняется в свойстве lastSqlStatement у соединения, датасета или счетчика.

  • getl.jdbc.JDBCConnection: добавлены функции форматирования значений с типом даты и времени в текст с учетом поддерживаемого формата соединения.

  • getl.csv.CSVDriver: добавлена возможность читать файлы с нестандартным разделителем записей. Ранее такие файлы можно было только записывать.

  • getl.vertica.VerticaTable: в опции пакетной загрузки файлов bulkLoadOpts добавлено свойство escapeChar, в котором можно задать символов экранирования специальных символов в текстах.

  • getl.vertica.VerticaDriver: теперь в пакетной загрузке файлов можно загружать файлы штатным парсером без экранирования специальных символов с помощью символа экранирования. Если задать разделителями полей и записей служебные символы, которые нет в текстах, то возможно загружать значения текстовых полей с переводами строк без их потери. При формировании временных файлов для пакетной загрузки в Vertica теперь задается символ обрамления поля \u0005, разделитель записей \u0006 и разделитель полей \u0007. При указании reject файла, Vertica вернет записи в том же формате, однако он будет конвертирован в текстовый формат со штатными параметрами для анализа и читабельности.

  • getl.data.Dataset: при импорте полей с другого датасета добавлено два параметра:

    • "excludeTypes" позволяет перечислить список имен типов полей, который требуется исключить из импорта.
    • "rules" позволяет описать трансформацию импортируемых полей в виде Closure или текста скрипта, которому делегируется импортируемый Field и есть полный доступ из кода к его полям. Если при обработке поля принято решение его не импортировать, то скрипт должен вернуть значение "IGNORE".
  • getl.salesforce.SalesForceDriver: в методы rows, eachRow, bulkUnload был добавлен параметр bulkJobId, используя который, можно забрать данные с уже завершенной Bulk Job.

Getl баги

  • getl.jdbc.JDBCDriver: при работе с timestamp полями могли не учитываться особенности некоторых РСУБД, которые не поддерживают наносекунды и работают только с миллисекундами.
  • getl.jdbc.SQLScripter: при форматировании timestamp переменных у времени терялись наносекунды. Так же не учитывался формат преобразования timestamp полей с наносекундами, которые поддерживает используемые при выполнении РСУБД.
  • getl.csv.CSVDriver: добавлена проверка, что при вызове метода записи в CSV в него приходит map, а не null или empty.
  • getl.utils.FileUtils: в функции SizeBytes возникала ошибка, если вместо количества байт приходил null. Теперь в таком случае функция возвращает null.
  • getl.utils.StringUtils: в функции WithGroupSeparator возникала ошибка, если вместо числа приходил null. Теперь в таком случае функция возвращает null.
  • getl.jdbc.TableDataset: в bulkLoadOpts возникала ошибка, если в sourceDataset или storyDataset устанавливался null.
  • getl.proc.sub.FileListProcessing: при завершении работы не происходило отсоединение от источника, что могло привести к зависанию задачи при завершении её работы, если драйвер менеджера продолжал удерживать коннект.
  • getl.csv.CSVDriver: не корректно обрабатывались свойства fieldDelimiter, rowDelimiter, quoteStr и nullAsValue, если в их значении использовались escaped последовательности. Теперь можно использовать escaped последовательности в этих свойствах (если символ не является escaped, то нужно перед ним удвоить символ "").
  • getl.data.Dataset: в функции FieldSoftType тип Numeric считался совместимым с Double, что могло привестик некорректной конвертации типов полей при импорте полей с источника в приёмник.
  • getl.vertica.VerticaDriver: при пакетной загрузке файла с blob полями не корректно загружалась последовательность байт. Теперь для файлов требуется, чтобы бинарные поля были кодированы как "0xбайты" и в COPY для таких полей добавляется опция с указанием формата "hex".
  • getl.data.FileDataset: у всех файловых датасетов не корректно работала функция fileNameWithExtension, если у соединения было включено свойство isGzFile.
  • getl.jdbc.TableDataset: в функции CopyTableTo при копировании из таблицы в другую не учитывался параметр forUpdate. Теперь если он задан при вызове функции или указан в readOpts таблицы, он будет добавлен в SELECT при выполнении запроса копирования.
  • getl.vertica.VerticaTable: при выполнении импорта полей с другой таблицы с помощью функции importFields для Number полей Oracle частично не корректно определялись типы для Vertica.
  • getl.salesforce.SalesForceDriver: исправлена ошибка в методе bulkUnload, из-за которой батч, содержащий несколько результатов, обрабатывался неправильно, только последний результат попадал в обработку.
  • getl.salesforce.SalesForceDriver: исправлена ошибка в методе eachRow, когда неверно обрабатывались поля в prepareCode.
  • getl.utils.DateUtils: при указании формата даты без дней в функции BuildDateFormatter происходила ошибка.
  • getl.utils.Lexer: при разборе текста возникала ошибка, если после открывающей скобки сразу стояла запятая.
  • getl.utils.Logs: возникала ошибка, если из юнит теста шло прямое обращение к логу без явного вызова его инициализации.

Download GETL

4.18.0

1 year ago

Кратко о версии

В мажорной версии были существенные доработки работы с timestamp полями для поддержки наносекунд до 9 знаков, работе с blob полями JDBC источников и изменена архитектура работы моделей с менеджерами инкрементальных точек для облегчения описания правил инкрементального захвата для групп таблиц модели.

Dsl важные изменения!

  • models: в табличных моделях у таблиц было убрано свойство "historyPointName". Теперь вместо инкрементального менеджера в свойствах модели "incrementDatasetName" задается датасет, где будет храниться история инкрементальных точек. Для каждой таблицы модели, имеющей заполненное поле инкремента, автоматически создается локальный инкрементальный менеджер. Значение инкремента таблицы созданный менеджер хранит в "source" поле таблицы инкремента по маске "имя модели@имя таблицы модели". Если у Вас уже существуют сохраненные в таблице истории инкремента сохраненные значения под именами ранее заданных инкрементальных менеджеров репозитория, их требуется переименовать в таблице в формат указанной маски.

Dsl фичи

  • main: при запуске скрипта теперь в значениях его параметров можно использовать макропеременные "environment" (текущая среда работы) и "unittest" (текущий режим тестирования).
  • models: для работы с моделями добавлен метод "clearStoryDataset", который очищает датасет хранения истории работы с моделью.
  • models: для работы с табличными моделями добавлено свойство "incrementDatasetName", в котором можно задать датасет хранения истории инкрементальных точек при работе с моделями, метод "clearIncrementDataset" для очистки датасета истории инкрементальных точек и функция historyPointTable, с помощью которой можно получить ссылку на инкрементальный менеджер, обслуживающий таблицу модели.
  • models: в модель "MapTables" добавлена функция "findMapTable", которое позволяет найти нужную таблицу модели по её имени.
  • models: в модель "ReferenceFiles" добавлена функция "findReferenceFile", которое позволяет найти нужный файл модели по его имени.
  • models: в модель "ReferenceVerticaTables" добавлена функция "findReferenceTable", которое позволяет найти нужную таблицу модели по её имени.
  • models: в модель "SetOfTables" добавлена функция "findTable", которое позволяет найти нужную таблицу модели по её имени.
  • scripts: в скриптовый язык добавлена функция decode, которая позволяет эмулировать оператор CASE. Синтаксис функции: decode(value, условие1, значение1, условие2, значение2, ...).

Dsl баги

  • models: при поиске объекта в модели с помощью функции findModelObject не учитывалось, что имя могло передаваться не в нижнем регистре и ничего не находилось. Теперь эта функция проверяет и конвертит имя в правильный формат именования объектов репозитория и только потом ищет в модели указанный объект.

Getl важные изменения!

  • getl.jdbc.HistoryPointManager: размер поля "source" таблицы хранения значений инкрементов увеличен до 256 знаков. Требуется изменить размер этого поля в таблицах БД, чтобы не возникло ошибки проверки полей или переполнения поля при записи.

Getl фичи

  • getl.csv.CSVDriver: в соединения и датасет CSV добавлено свойство "blobAsPureHex", которое регулирует формат записи blob полей в файлы. По умолчанию свойство выключено и бинарные данные пишутся в формате "0xБайты". Если свойство включить, то запись будет идти как "Байты". Ранее все писалось как "Байты", что мешало пакетной загрузке в некоторые СУБД.
  • getl.csv.CSVDriver: теперь можно считывать и записывать в файлы значения timestamp полей в формате до 9 знаков наносекунд. Ранее поддерживалась работа только с миллисекундами до 3 знаков.
  • getl.data.Field: добавлено свойство "charOctetLength", в котором указан размер хранения поля в байтах. Для JDBC таблиц это свойство определяется автоматически при считывании списка полей с БД, для других источников свойство не используется.
  • getl.jdbc.JDBCDataset: добавлены свойства "codePage" для указания кодировки БД сервера и флага charLengthAsBytes, который указывает, как сервер по умолчанию интерпретирует длину текстовых полей при создании таблицы, как размер в символах или байтах.
  • getl.jdbc.JDBCDriver: теперь метод importFields при импорте полей из датасета другого JDBC источника при расчете длины текстовых полей учитывает кодировки источника и приёмника и размер хранения одного символа в байтах в полях, что позволяет увеличить размер текстовых полей в приёмнике, если размер в байтах поля источника превысит размеры заданной длины текстового поля в символах.
  • getl.jdbc.SQLScripter: теперь ри работе с timestamp переменными используется формат работы с ними до 6 знаков наносекунд. Ранее использовался формат миллисекунд до 3 знаков.
  • getl.utils.DateUtils: переработаны функции работы с Timestamp переменными, теперь они все поддерживают наносекунды до 9 знаков. По умолчанию функции продолжают работать с форматом, в котором выводятся миллисекунды до 3 знаков.

Getl баги

  • getl.mssql.MSSQLDriver: при работе в SQL с константами, которые содержат символы "" и перевод строки, возникали ошибки. Теперь эти символы передаются корректно при выполнении SQL скриптов на сервер.
  • getl.mssql.MSSQLDriver: при создании и удалении таблиц с указанием "IF NOT EXISTS" и "IF EXISTS" возникала ошибка, так как MSSQL не поддерживает такой синтаксис при работе со схемами.
  • getl.oracle.OracleDriver: при чтении BLOB значений полей могла возникнуть ошибка, что класс "oracle.jdbc.OracleBlob" не найден. Теперь, если Oracle возвращает бинарные данные в таком формате, все читается корректно.
  • getl.excel.ExcelDriver: при попытке чтения файлов, у которых расширение было в верхнем регистре, возникала ошибка, что файл не поддерживается, хотя он был нужного формата. Теперь при определении формата файла игнорируется регистр расширения и файл корректно читается.
  • getl.jdbc.JDBCDriver: если код обработки считанной записи для функции eachRow по своим причинам решал прекратить дальнейшее чтение записей источника, то он устанавливал directive в Closure.DONE, однако чтение следующих записей продолжалось. Теперь при установке директивы в Closure, чтение данных из источника прекращается.
  • getl.utils.BoolUtils: если функции IsValue передавался массив, то он обрабатывался не корректно и функция не возвращала первое найденое не пустое boolean значение. Теперь функция проверяет массив и если встретившееся значение не null и может быть сконвертировано в boolean, оно возвращается функцией.
  • getl.utils.GenerationUtils: для чтения датасетов Json, Xml и Yaml используется функция GenerateEachRow, которая генерирует код чтения таких структур по заданным правилам. При генерации кода не корректно происходила остановка чтения записей датасета, если достигался заданный лимит чтения записей или вызываемый код обработки записи в EachRow через Closure возвращал признак остановки чтения, установив в directive значение Closure.DONE. Теперь при достижении лимита или установки флага Closure сразу происходит остановка чтения датасета без обработки его дальнейших записей.

Download GETL