Сценарий
- После того как параметры задания настроены, необходимо настроить сопоставление полей. Вы можете нажать
в Операция столбце, чтобы создать конвертер полей. - Если файлы мигрируют между FTP, SFTP, OBS и HDFS и источник миграции Формат файла установлен в Бинарный, файлы будут переданы напрямую, без сопоставления полей.
Вы можете создать конвертер полей на Сопоставить поле странице при создании задания миграции таблицы/файла.
Рисунок 1 Создание конвертера полей

CDM может конвертировать поля во время миграции. В настоящее время поддерживаются следующие конвертеры полей:
Ограничения
- Если Использовать SQL‑оператор установлен в Да в конфигурации исходного задания конвертеры не могут быть созданы.
- На Сопоставить поле вкладка, если CDM не удаётся получить все столбцы, получая образцы значений (например, когда данные экспортируются из HBase, CloudTable или MongoDB, вероятность того, что CDM не получит все столбцы, высока), вы можете нажать
и выбрать Добавить новое поле чтобы добавить новые поля и обеспечить полную импортированную в пункт назначения миграции данные. - Когда в качестве источника миграции используется реляционная база данных, Hive, DLI или MRS Hudi, образцы значений получить невозможно.
- Когда в качестве назначения используется SQLServer, поля типа timestamp невозможно записать. Необходимо изменить их тип (например, на datetime), чтобы их можно было записать.
- Имена столбцов отображаются, когда источником задания миграции является OBS, файлы CSV должны быть мигрированы, и параметр Извлечь первую строку как столбцы установлен в Да.
- Конфигурация преобразователей полей не участвует, когда используется двоичный формат для миграции файлов в файлы.
- В сценарии автоматического создания таблиц необходимо заранее вручную добавить поля в таблицу назначения, а затем добавить поля в сопоставление полей.
- После добавления поля его образец значения не отображается в консоли. Это не влияет на передачу значения поля. CDM напрямую записывает значение поля в конечный пункт назначения.
- Если сопоставление полей неверно, вы можете скорректировать его, перетаскивая поля или щёлкнув
для пакетного сопоставления полей. - Выражение обрабатывает данные поля. При создании конвертера выражений не используйте макрос времени. Если необходимо использовать макрос времени, используйте любой из следующих методов (if the source is of the file type, only Метод 1 поддерживается):
- Метод 1: При создании конвертера выражений используйте две одинарные кавычки ('') для ограждения выражения.
Например, если выражение ${dateformat(yyyy-MM-dd)} не заключено в кавычки, дефис (-) в значении 2017-10-16 полученный из выражения будет распознан как минус, и будет выполнено дальнейшее вычисление для получения результата 1991, что неверно. Если заключить выражение в кавычки, то есть, '${dateformat(yyyy-MM-dd)}', вы получите '2017-10-16', что правильно.
Рисунок 2 Использование двух одинарных кавычек ('') для заключения выражения

- Метод 2: Добавьте пользовательское исходное поле, введите макропеременную даты и времени для Пример значения, а затем снова сопоставьте поле с полем назначения.
Рисунок 3 Добавление пользовательского исходного поля

- Если данные импортируются в GaussDB(DWS), необходимо выбрать колонки распределения в полях назначения. Рекомендуется выбирать колонки распределения согласно следующим правилам:
- Используйте первичный ключ в качестве колонки распределения.
- Если несколько сегментов данных объединены в первичные ключи, укажите все первичные ключи в качестве колонки распределения.
- В случае отсутствия первичного ключа, если колонка распределения не выбрана, DWS по умолчанию использует первую колонку в качестве колонки распределения. В результате существует риск искажения данных.
Анонимизация
Этот конвертер используется для скрытия ключевой информации о строке символов. Например, если вы хотите преобразовать 12345678910 в 123****8910, настройте параметры следующим образом:
- Установите Длина начала резервирования в 3.
- Установите Длина конца резервирования в 4.
- Установите Заменить символ на *.
Обрезать
Этот конвертер используется для автоматического удаления пробелов до и после строки. Параметры настраивать не требуется.
Обратная строка
Этот конвертер используется для автоматического реверса строки. Например, реверс ABC в CBA. Параметры настраивать не требуется.
Заменить строку
Этот конвертер используется для замены строкового значения. Требуется настроить объект для замены и новое значение.
Удалить разрыв строки
Этот конвертер используется для удаления символов новой строки, таких как \n, \r и \r\n, из поля.
Преобразование выражения
Этот конвертер использует язык выражений JSP (EL) для преобразования текущего поля или строки данных. JSP EL используется для создания арифметических и логических выражений. В выражении вы можете использовать целые числа, числа с плавающей запятой, строки, константы true и false, и null.
При преобразовании данных, если заменяемый контент содержит специальный символ, используйте обратный слеш (\\), чтобы преобразовать специальный символ в обычный.
- Выражение поддерживает следующие переменные среды:
- value: указывает значение текущего поля.
- row: указывает текущую строку, которая имеет тип массив.
- Выражение поддерживает следующие Utils:
- Если поле имеет тип string, преобразуйте все строковые литералы в строчные буквы, например, преобразуйте aBC в abc.
Expression: StringUtils.lowerCase(value)
- Преобразовать все символьные строки текущего поля в заглавные буквы.
Выражение: StringUtils.upperCase(value)
- Преобразовать формат первого поля даты из 2018-01-05 15:15:05 в 20180105.
Выражение: DateUtils.format(DateUtils.parseDate(row[0],"yyyy-MM-dd HH:mm:ss"),"yyyyMMdd")
- Преобразовать метку времени в строку даты в yyyy-MM-dd hh:mm:ss формат, например, преобразовать 1701312046588 в 2023-11-30 10:40:46.
Выражение: DateUtils.format(NumberUtils.toLong(value),"yyyy-MM-dd HH:mm:ss")
- Преобразовать строку даты в формате yyyy-MM-dd hh:mm:ss в метку времени.
Выражение: DateUtils.getTime(DateUtils.parseDate(value,"yyyy-MM-dd hh:mm:ss"))
- Если значение поля является строкой даты в yyyy-MM-dd форматировать, извлечь год из значения поля, например, извлечь 2017 из 2017-12-01.
Выражение: StringUtils.substringBefore(value,"-")
- Если значение поля имеет числовой тип, преобразуйте значение в новое значение, которое в два раза больше исходного значения:
- Преобразовать значение поля true в Y и другие значения полей в N.
Выражение: value=="true"?"Y":"N"
- Если значение поля имеет строковый тип и оставлено пустым, преобразуйте его в По умолчанию. В противном случае значение поля не будет преобразовано.
Выражение: пустое значение? "Default":value
- Преобразовать формат даты 2018/01/05 15:15:05 в 2018-01-05 15:15:05:
Выражение: DateUtils.format(DateUtils.parseDate(value,"yyyy/MM/dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss")
- Получить 36‑битный универсальный уникальный идентификатор (UUID):
Выражение: CommonUtils.randomUUID()
- Если поле имеет тип string, сделайте первую букву заглавной, например, преобразовать cat в Cat.
Выражение: StringUtils.capitalize(value)
- Если поле имеет тип string, преобразуйте первую букву в строчную, например, преобразовать Cat в кот.
Выражение: StringUtils.uncapitalize(value)
- Если поле имеет тип строка, используйте пробел для заполнения строки до указанной длины и центрирования строки. Если длина строки не короче указанной длины, не преобразовывайте строку. Например, преобразуйте ab чтобы соответствовать указанной длине 4.
Выражение: StringUtils.center(value,4)
- Удалить символ новой строки (включая \n, \r, и \r\n) в конце строки. Например, преобразуйте abc\r\n\r\n в abc\r\n.
Expression: StringUtils.chomp(value)
- Если строка содержит указанную строку, true возвращается; иначе, false возвращается. Например, abc содержит a чтобы true возвращается.
Expression: StringUtils.contains(value,"a")
- Если строка содержит любой символ указанной строки, true возвращается; иначе, false возвращается. Например, zzabyycdxx содержит любой из z или a чтобы true возвращается.
Выражение: StringUtils.containsAny(value,"za")
- Если строка не содержит ни один из указанных символов, true возвращается. Если любой указанный символ содержится, false возвращается. Например, abz содержит один символ из xyz чтобы false возвращается.
Выражение: StringUtils.containsNone(value,"xyz")
- Если строка содержит только указанные символы, true возвращается. Если содержит любой другой символ, false возвращается. Например, abab содержит только символы среди abc чтобы true возвращается.
Выражение: StringUtils.containsOnly(value,\"abc")
- Если строка символов пустая или null, преобразуйте её в указанную строку символов. В противном случае не преобразовывайте строку символов. Например, преобразуйте пустую строку символов в null.
Выражение: StringUtils.defaultIfEmpty(value,null)
- Если строка заканчивается указанным суффиксом (с учётом регистра), true возвращается; иначе, false возвращается. Например, если суффикс abcdef не равно null, false возвращается.
Выражение: StringUtils.endsWith(value,null)
- Если строка совпадает с указанной строкой (с учётом регистра), true возвращается; иначе, false возвращается. Например, после строк abc и ABC сравниваются, false возвращается.
Expression: StringUtils.equals(value,"ABC")
- Получить первый индекс указанной строки символов в строке. Если индекс не найден, -1 возвращается. Например, первый индекс ab в aabaabaa равен 1.
Expression: StringUtils.indexOf(value,"ab")
- Получить последний индекс указанной строки символов в строке. Если индекс не найден, -1 возвращается. Например, последний индекс k в aFkyk равно 4.
Выражение: StringUtils.lastIndexOf(value,"k")
- Получите первый индекс указанной последовательности символов, начиная с позиции, указанной в строке. Если индекс не найден, -1 возвращается. Например, первый индекс b полученный после индекса 3 aabaabaa равно 5.
Выражение: StringUtils.indexOf(value,"b",3)
- Получите первый индекс любого указанного символа в строке. Если индекс не найден, -1 возвращается. Например, первый индекс для z или a в zzabyycdxx. равно 0.
Выражение: StringUtils.indexOfAny(value,"za")
- Если строка содержит любой символ Unicode, true возвращается; иначе, false возвращается. Например, ab2c содержит только не-Unicode символы, так что false возвращается.
Выражение: StringUtils.isAlpha(value)
- Если строка содержит только символы Unicode и цифры, true возвращается; иначе, false возвращается. Например, ab2c содержит только символы Unicode и цифры, так что true возвращается.
Выражение: StringUtils.isAlphanumeric(value)
- Если строка содержит только символы Unicode, цифры и пробелы, true возвращается; иначе, false возвращается. Например, ab2c содержит только символы Unicode и цифры, так что true возвращается.
Выражение: StringUtils.isAlphanumericSpace(value)
- Если строка содержит только символы Unicode и пробелы, true возвращается; иначе, false возвращается. Например, ab2c содержит символы Unicode и цифры, так что false возвращается.
Выражение: StringUtils.isAlphaSpace(value)
- Если строка содержит только печатаемые символы ASCII, true возвращается; иначе, false возвращается. Например, для !ab-c~, true возвращается.
Выражение: StringUtils.isAsciiPrintable(value)
- Если строка пуста или null, true возвращается; иначе, false возвращается.
Выражение: StringUtils.isEmpty(value)
- Если строка содержит только Unicode-цифры, true возвращается; иначе, false возвращается.
Выражение: StringUtils.isNumeric(value)
- Получить левые символы указанной длины. Например, получить два первых символа ab из abc.
Выражение: StringUtils.left(value,2)
- Получите правые символы указанной длины. Например, получите два самых правых символа bc из abc.
Выражение: StringUtils.right(value,2)
- Конкатенируйте указанную строку слева от текущей строки и задайте длину полученной строки. Если длина текущей строки не короче указанной длины, строка не будет преобразована. Например, если yz конкатенируется слева от bat и после конкатенации длина должна быть 8, строка будет yzyzybat после преобразования.
Выражение: StringUtils.leftPad(value,8,"yz")
- Конкатенировать указанный строковый набор символов справа от текущей строки и задать длину полученной строки. Если длина текущей строки не короче указанной, строка не будет преобразована. Например, если yz конкатенируется справа от bat и длина должна быть 8 после конкатенации, строка будет batyzyzy после преобразования.
Выражение: StringUtils.rightPad(value,8,"yz")
- Если поле имеет тип строка, получить длину текущей строки. Если строка равна null, 0 возвращается.
Выражение: StringUtils.length(value)
- Если поле имеет тип string, удалите из него все указанные строковые значения. Например, удалите ue из в очереди чтобы получить qd.
Выражение: StringUtils.remove(value,"ue")
- Если поле имеет тип string, удалите подстроку в конце поля. Если указанная подстрока не находится в конце поля, преобразование не выполняется. Например, удалите .com в конце www.domain.com.
Выражение: StringUtils.removeEnd(value,".com")
- Если поле имеет тип string, удалите подстроку в начале поля. Если указанная подстрока не находится в начале поля, преобразование не выполняется. Например, удалить www. в начале www.domain.com.
Выражение: StringUtils.removeStart(value,"www.")
- Если поле имеет тип string, замените все указанные строковые символы в поле. Например, заменить a в aba на z чтобы получить zbz.
Выражение: StringUtils.replace(value,"a","z")
Если содержимое, которое нужно заменить, содержит специальный символ, специальный символ необходимо экранировать в обычный символ. Например, если вы хотите удалить \t из строки, используйте следующее выражение: StringUtils.replace(value,"\\t",""), что означает повторное экранирование обратного слеша (\).
- Если поле имеет тип string, заменяйте несколько символов в строке одновременно. Например, замените h in hello with j and o with y для получения желе.
Expression: StringUtils.replaceChars(value,"ho","jy")
- Если строка начинается с указанного префикса (чувствительна к регистру), true возвращается; иначе, false возвращается. Например, abcdef начинается с abc, так что true возвращается.
Expression: StringUtils.startsWith(value,"abc")
- Если поле имеет тип строки, удалите все указанные символы в начале и в конце поля. поле. Например, удалите все x, y, z, и b из abcyx для получения abc.
Выражение: StringUtils.strip(value,\"xyzb\")
- Если поле имеет тип строки, удалите все указанные символы в конце поля, например, удалите строку \"abc\" в конце поля.
Выражение: StringUtils.stripEnd(value,\"abc\")
- Если поле имеет тип string, удалите все указанные символы в начале поля, например, удалите все пробелы в начале поля.
Выражение: StringUtils.stripStart(value,null)
- Если поле имеет тип string, получите подстроку после указанной позиции (индекс начинается с 0, включая символ в указанной позиции) строки. Если указанная позиция отрицательная, вычислите позицию в обратном порядке. Последняя цифра будет -1. Например, получите символ с индексом 2 из abcde (это, c) и строка после него, то есть, cde.
Выражение: StringUtils.substring(value,2)
- Если поле имеет тип string, получите подстроку в указанном диапазоне (индекс начинается с 0, включая символ в начале и исключая символ в конце). Если диапазон является отрицательным числом, вычислите позицию в обратном порядке. Первая цифра в конце равна -1. Например, получите строку между вторым символом (c) и четвёртым символом (e) поля abcde, то есть, cd.
Expression: StringUtils.substring(value,2,4)
- Если поле имеет тип string, получите подстроку после первого указанного символа. Например, получите подстроку после первого b в abcba, то есть, cba.
Expression: StringUtils.substringAfter(value,"b")
- Если поле имеет тип строки, получите подстроку после последнего указанного символа. Например, получите подстроку после последнего b in abcba, that is, a.
Expression: StringUtils.substringAfterLast(value,"b")
- Если поле имеет тип строки, получите подстроку перед первым указанным символом. Например, получите подстроку перед первым b in abcba, that is, a.
Expression: StringUtils.substringBefore(value,"b")
- Если поле имеет тип string, получите подстроку до последнего указанного символа. Например, получите подстроку до последнего b in abcba, то есть, abc.
Выражение: StringUtils.substringBeforeLast(value,"b")
- Если поле имеет тип string, получите вложенную подстроку в указанной строке. Если подстрока не найдена, null возвращается. Например, получите подстроку между тег in tagabctag, то есть, abc.
Выражение: StringUtils.substringBetween(value,"тег")
- Если поле имеет тип строка, удалите управляющие символы (char≤32) с обоих концов строкового значения, например, удалите пробелы с обоих концов строки.
Выражение: StringUtils.trim(value)
- Преобразуйте символьную строку в значение типа byte. Если преобразование не удалось, 0 возвращается.
Выражение: NumberUtils.toByte(value)
- Преобразуйте символьную строку в значение типа byte. Если преобразование не удалось, заданное значение, например, 1, возвращается.
Выражение: NumberUtils.toByte(value,1)
- Преобразовать строку символов в значение типа double. Если преобразование не удалось, 0.0d возвращается.
Выражение: NumberUtils.toDouble(value)
- Преобразовать строку символов в значение типа double. Если преобразование не удалось, указанное значение, например, 1.1d, возвращается.
Выражение: NumberUtils.toDouble(value,1.1d)
- Преобразовать строку символов в значение типа float. Если преобразование не удалось, 0.0f возвращается.
Выражение: NumberUtils.toFloat(value)
- Преобразовать строку символов в значение типа float. Если преобразование не удалось, указанное значение, например, 1.1f, возвращается.
Выражение: NumberUtils.toFloat(value,1.1f)
- Преобразуйте строку символов в значение типа int. Если преобразование не удалось, 0 возвращается.
Выражение: NumberUtils.toInt(value)
- Преобразуйте строку символов в значение типа int. Если преобразование не удалось, укажите значение, например, 1, возвращается.
Выражение: NumberUtils.toInt(value,1)
- Преобразуйте строку символов в значение типа long. Если преобразование не удалось, 0 возвращается.
Выражение: NumberUtils.toLong(value)
- Преобразовать строку символов в значение типа long. Если преобразование не удаётся, указанное значение, например, 1L, возвращается.
Expression: NumberUtils.toLong(value,1L)
- Преобразовать строку символов в значение типа short. Если преобразование не удаётся, 0 возвращается.
Expression: NumberUtils.toShort(value)
- Преобразовать строку символов в значение типа short. Если преобразование не удаётся, указанное значение, например, 1, возвращается.
Expression: NumberUtils.toShort(value,1)
- Преобразовать строку IP в значение типа long, например, преобразовать 10.78.124.0 к 172915712.
Выражение: CommonUtils.ipToLong(value)
- Прочитать файл сопоставления IP‑адреса и физического адреса из сети и загрузить файл сопоставления в коллекцию карт. url указывает адрес для хранения файла сопоставления IP, например, http://10.114.205.45:21203/sqoop/IpList.csv.
Выражение: HttpsUtils.downloadMap("url")
- Кешировать сопоставления IP‑адресов и физических адресов и указать ключ для получения, например, ipList.
Выражение: CommonUtils.setCache("ipList",HttpsUtils.downloadMap("url"))
- Получить кешированные сопоставления IP‑адресов и физических адресов.
Expression: CommonUtils.getCache("ipList")
- Проверить, кешированы ли сопоставления IP‑адресов и физических адресов.
Expression: CommonUtils.cacheExists("ipList")
- На основе указанного типа смещения (month/day/hour/minute/second) и смещения (положительное число означает увеличение, отрицательное — уменьшение) преобразовать время в указанном формате в новое время, например, добавить 8 часов к 2019-05-21 12:00:00.
Expression: DateUtils.getCurrentTimeByZone("yyyy-MM-dd HH:mm:ss",value, "hour", 8)
- Если значение пустое или null, возвращается "aaa". Иначе, value возвращается.
Выражение: StringUtils.defaultIfEmpty(value,"aaa")