Advanced
Тема интерфейса

Настройка конвертеров полей

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Сценарий

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

Вы можете создать конвертер полей на Сопоставить поле странице при создании задания миграции таблицы/файла.

Рисунок 1 Создание конвертера полей


CDM может конвертировать поля во время миграции. В настоящее время поддерживаются следующие конвертеры полей:

Ограничения

  • Если Использовать SQL‑запрос установлен в Да в конфигурации исходного задания конвертеры не могут быть созданы.
  • На Сопоставить поле вкладка, если CDM не удаётся получить все столбцы, получая образцы значений (например, при экспорте данных из HBase, CloudTable или MongoDB, есть высокая вероятность, что CDM не смог получить все столбцы), вы можете нажать и выберите Добавить новое поле чтобы добавить новые поля и обеспечить полное импортирование данных в пункт назначения миграции.
  • Когда в качестве источника миграции используется реляционная база данных, Hive, DLI или MRS Hudi, примерные значения нельзя получить.
  • Когда SQLServer является получателем, поля типа timestamp нельзя записать. Необходимо изменить их тип (например, на datetime), чтобы их можно было записать.
  • Имена столбцов отображаются, когда источником задания миграции является OBS, файлы CSV подлежат миграции, и параметр Извлечь первую строку как столбцы установлено на Да.
  • Конфигурация преобразователей полей не участвует, когда для миграции файлов в файлы используется двоичный формат.
  • В сценарии автоматического создания таблицы необходимо заранее вручную добавить поля в таблицу назначения, а затем добавить поля в сопоставление полей.
  • После добавления поля его примерное значение не отображается в консоли. Это не влияет на передачу значения поля. CDM напрямую записывает значение поля в конечный пункт назначения.
  • Если сопоставление полей неверно, вы можете отрегулировать сопоставление полей, перетаскивая поля или нажимая для пакетного сопоставления полей.
  • Выражение обрабатывает данные поля. При создании конвертера выражений не рекомендуется использовать временный макрос. Если необходимо использовать временный макрос, используйте любой из следующих методов (если источник имеет тип файл, только Method 1 поддерживается):
    • Method 1: При создании конвертера выражений используйте две одинарные кавычки ('') для заключения выражения в кавычки.

      Например, если выражение ${dateformat(yyyy-MM-dd)} не заключено в кавычки, дефис (-) в значении 2017-10-16 будет распознано как знак минус, и будет выполнено дальнейшее вычисление для получения результата 1991, что неверно. Если заключить выражение в кавычки, то есть, '${dateformat(yyyy-MM-dd)}', вы получите '2017-10-16', что правильно.

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

  • Если данные импортируются в GaussDB(DWS), необходимо выбрать колонки распределения в целевых полях. Рекомендуется выбирать колонки распределения согласно следующим правилам:
    1. Используйте первичный ключ в качестве колонки распределения.
    2. Если несколько сегментов данных объединены в первичные ключи, укажите все первичные ключи в качестве колонки распределения.
    3. В сценарии, когда первичный ключ недоступен, если колонка распределения не выбрана, DWS по умолчанию использует первую колонку в качестве колонки распределения. В результате существуют риски перекоса данных.

Анонимизация

Этот конвертер используется для скрытия ключевой информации о строке символов. Например, если вы хотите конвертировать 12345678910 в 123****8910, конфигурировать параметры следующим образом:

  • Установить Длина начала резерва до 3.
  • Установить Длина конца резерва до 4.
  • Установить Заменить символ до *.

Обрезать

Этот конвертер автоматически удаляет пробелы до и после строки. Не требуется конфигурировать параметры.

Обратить строку

Этот конвертер автоматически обращает строку. Например, обратите ABC в CBA. Не требуется настраивать параметры.

Заменить строку

Этот конвертер используется для замены символьной строки. Необходимо настроить объект, который будет заменён, и новое значение.

Удалить перевод строки

Этот конвертер используется для удаления символов новой строки, таких как \n, \r и \r\n, из поля.

Преобразование выражения

Этот конвертер использует язык выражений JSP (EL) для преобразования текущего поля или строки данных. JSP EL используется для создания арифметических и логических выражений. Внутри выражения JSP EL можно использовать целые числа, числа с плавающей точкой, строки, встроенные константы true и false для логических значений, и null.

  • Выражение поддерживает следующие переменные окружения:
    • значение: указывает значение текущего поля.
    • строка: указывает текущую строку, которая является массивом.
  • Выражение поддерживает следующие Utils:
    1. Если поле имеет тип string, преобразуйте все символьные строки в строчные буквы, например, преобразуйте aBC в abc.

      Выражение: StringUtils.lowerCase(value)

    2. Преобразуйте все символьные строки текущего поля в заглавные буквы.

      Выражение: StringUtils.upperCase(value)

    3. Преобразуйте формат первого поля даты из 2018-01-05 15:15:05 в 20180105.

      Выражение: DateUtils.format(DateUtils.parseDate(row[0],"yyyy-MM-dd HH:mm:ss"),"yyyyMMdd")

    4. Преобразуйте метку времени в строку даты в yyyy-MM-dd hh:mm:ss формат, например, преобразовать 1701312046588 в 2023-11-30 10:40:46.

      Выражение: DateUtils.format(NumberUtils.toLong(value),"yyyy-MM-dd HH:mm:ss")

    5. Преобразовать строку даты в формате yyyy-MM-dd hh:mm:ss в метку времени.

      Выражение: DateUtils.getTime(DateUtils.parseDate(value,"yyyy-MM-dd hh:mm:ss"))

    6. Если значение поля — строка даты в yyyy-MM-dd формат, извлечь год из значения поля, например, извлечь 2017 из 2017-12-01.

      Выражение: StringUtils.substringBefore(value,"-")

    7. Если значение поля имеет числовой тип, преобразовать значение в новое значение, которое в два раза больше исходного значения:

      Выражение: value*2

    8. Преобразовать значение поля true в Y и другие значения полей в N.

      Выражение: value=="true"?"Y":"N"

    9. Если значение поля имеет тип строка и оставлено пустым, преобразовать его в По умолчанию. В противном случае значение поля не будет преобразовано.

      Выражение: empty value? "Default":value

    10. Преобразовать формат даты 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")

    11. Получите 36‑битный универсальный уникальный идентификатор (UUID):

      Выражение: CommonUtils.randomUUID()

    12. Если поле имеет тип string, сделайте первую букву заглавной, например, преобразуйте cat to Cat.

      Выражение: StringUtils.capitalize(value)

    13. Если поле имеет тип string, преобразуйте первую букву в строчную, например, преобразуйте Cat to cat.

      Выражение: StringUtils.uncapitalize(value)

    14. Если поле имеет тип string, используйте пробел для дополнения строки до указанной длины и центрирования строки. Если длина строки не короче указанной длины, не преобразовывайте строку. Например, преобразуйте ab для соответствия указанной длине 4.

      Выражение: StringUtils.center(value,4)

    15. Удалить перевод строки (включая \n, \r, и \r\n) в конце строкового значения. Например, преобразовать abc\r\n\r\n в abc\r\n.

      Выражение: StringUtils.chomp(value)

    16. Если строка содержит указанную строку, true возвращается; в противном случае, false возвращается. Например, abc содержит a чтобы true возвращается.

      Выражение: StringUtils.contains(value,"a")

    17. Если строка содержит любой символ указанной строки, true возвращается; иначе, false возвращается. Например, zzabyycdxx содержит либо z или a чтобы true возвращается.

      Выражение: StringUtils.containsAny(value,"za")

    18. Если строка не содержит ни одного из указанных символов, true возвращается. Если любой указанный символ содержится, false возвращается. Например, abz содержит один символ из xyz чтобы false возвращается.

      Выражение: StringUtils.containsNone(value,"xyz")

    19. Если строка содержит только указанные символы, true возвращается. Если содержится любой другой символ, false возвращается. Например, abab содержит только символы из abc чтобы true возвращается.

      Выражение: StringUtils.containsOnly(value,"abc")

    20. Если строка символов пуста или равна null, преобразовать её в указанную строку символов. В противном случае не преобразовывать строку символов. Например, преобразовать пустую строку символов в null.

      Выражение: StringUtils.defaultIfEmpty(value,null)

    21. Если строка заканчивается указанным суффиксом (с учётом регистра), true возвращается; в противном случае, false возвращается. Например, если суффикс abcdef не равно null, false возвращается.

      Выражение: StringUtils.endsWith(value,null)

    22. Если строка совпадает со указанной строкой (с учётом регистра), true возвращается; иначе, false возвращается. Например, после строк abc и ABC сравниваются, false возвращается.

      Выражение: StringUtils.equals(value,"ABC")

    23. Получите первый индекс указанной подстроки в строке. Если индекс не найден, -1 возвращается. Например, первый индекс ab в aabaabaa равно 1.

      Выражение: StringUtils.indexOf(value,"ab")

    24. Получить последний индекс указанной строки в строке. Если индекс не найден, -1 возвращается. Например, последний индекс k в aFkyk равно 4.

      Выражение: StringUtils.lastIndexOf(value,"k")

    25. Получить первый индекс указанной строки из позиции, заданной в строке. Если индекс не найден, -1 возвращается. Например, первый индекс b получается после индекса 3 aabaabaa равно 5.

      Выражение: StringUtils.indexOf(value,"b",3)

    26. Получите первый индекс любого указанного символа в строке символов. Если индекс не найден, -1 возвращается. Например, первый индекс z или a в zzabyycdxx. равно 0.

      Выражение: StringUtils.indexOfAny(value,"za")

    27. Если строка содержит любой символ Unicode, true возвращается; иначе, false возвращается. Например, ab2c содержит только не-Unicode символы, так что false возвращается.

      Выражение: StringUtils.isAlpha(value)

    28. Если строка содержит только символы Unicode и цифры, true возвращается; иначе, false возвращается. Например, ab2c содержит только символы Unicode и цифры, так что true возвращается.

      Выражение: StringUtils.isAlphanumeric(value)

    29. Если строка содержит только символы Unicode, цифры и пробелы, true возвращается; в противном случае, false возвращается. Например, ab2c содержит только символы Unicode и цифры, так что true возвращается.

      Выражение: StringUtils.isAlphanumericSpace(value)

    30. Если строка содержит только символы Unicode и пробелы, true возвращается; в противном случае, false возвращается. Например, ab2c содержит символы Unicode и цифры, так что false возвращается.

      Выражение: StringUtils.isAlphaSpace(value)

    31. Если строка содержит только печатные символы ASCII, true возвращается; иначе, false возвращается. Например, для !ab-c~, true возвращается.

      Выражение: StringUtils.isAsciiPrintable(value)

    32. Если строка пуста или null, true возвращается; иначе, false возвращается.

      Выражение: StringUtils.isEmpty(value)

    33. Если строка содержит только цифры Unicode, true возвращается; иначе, false возвращается.

      Выражение: StringUtils.isNumeric(value)

    34. Получите самые левые символы указанной длины. Например, получите два самых левых символа ab из abc.

      Выражение: StringUtils.left(value,2)

    35. Получите самые правые символы указанной длины. Например, получите два самых правых символа bc из abc.

      Выражение: StringUtils.right(value,2)

    36. Конкатенировать указанный набор символов слева от текущего набора символов и задать длину получившегося набора символов. Если длина текущего набора символов не короче указанной длины, набор символов не будет преобразован. Например, если yz конкатенируется слева от bat и длина после конкатенации должна быть 8, набор символов будет yzyzybat после преобразования.

      Выражение: StringUtils.leftPad(value,8,"yz")

    37. Конкатенировать указанный набор символов справа от текущего набора символов и задать длину получившегося набора символов. Если длина текущего набора символов не короче указанной длины, набор символов не будет преобразован. Например, если yz конкатенируется справа от bat и длина должна быть 8 после конкатенации, строка batyzyzy после преобразования.

      Выражение: StringUtils.rightPad(value,8,"yz")

    38. Если поле имеет тип string, получить длину текущей строки. Если строка является null, 0 возвращается.

      Выражение: StringUtils.length(value)

    39. Если поле имеет тип string, удалить из него все указанные подстроки. Например, удалить ue из в очереди для получения qd.

      Выражение: StringUtils.remove(value,"ue")

    40. Если поле имеет тип строки, удалить подстроку в конце поля. Если указанная подстрока не находится в конце поля, преобразование не выполняется. Например, удалить .com в конце www.domain.com.

      Выражение: StringUtils.removeEnd(value,".com")

    41. Если поле имеет тип строки, удалить подстроку в начале поля. Если указанная подстрока не находится в начале поля, преобразование не выполняется. Например, удалить www. в начале www.domain.com.

      Выражение: StringUtils.removeStart(value,"www.")

    42. Если поле имеет тип строки, замените все указанные символьные строки в поле. Например, замените a в aba на z чтобы получить zbz.

      Выражение: StringUtils.replace(value,"a","z")

    43. Если поле имеет тип строки, замените несколько символов в строке одновременно. Например, замените h в привет с j и o с y получить желе.

      Выражение: StringUtils.replaceChars(value,"ho","jy")

    44. Если строка начинается с указанного префикса (чувствительна к регистру), true возвращается; иначе, false возвращается. Например, abcdef начинается с abc, так что true возвращается.

      Выражение: StringUtils.startsWith(value,"abc")

    45. Если поле имеет тип string, удалите все указанные символы в начале и в конце поля. поле. Например, удалите все x, y, z, и b от abcyx получить abc.

      Выражение: StringUtils.strip(value,"xyzb")

    46. Если поле имеет строковый тип, удалите все указанные символы в конце поля, например, удалите abc строку в конце поля.

      Expression: StringUtils.stripEnd(value,"abc")

    47. Если поле имеет строковый тип, удалите все указанные символы в начале поля, например, удалите все пробелы в начале поля.

      Expression: StringUtils.stripStart(value,null)

    48. Если поле имеет строковый тип, получайте подстроку после указанной позиции (индекс начинается с 0, включая символ в указанной позиции) строкового значения. Если указанная позиция является отрицательным числом, вычисляйте позицию в обратном порядке. Первая цифра в конце — -1. Например, получайте второй символ (c) строки abcde и строку после него, то есть, cde.

      Выражение: StringUtils.substring(value,2)

    49. Если поле имеет тип string, получите подстроку в указанном диапазоне (индекс начинается с 0, включая символ в начале и исключая символ в конце). Если диапазон отрицательный, вычислите позицию в обратном порядке. Первая цифра в конце — -1. Например, получите строку между вторым символом (c) и четвертым символом (e) abcde, то есть, cd.

      Выражение: StringUtils.substring(value,2,4)

    50. Если поле имеет тип string, получите подстроку после первого указанного символа. Например, получите подстроку после первого b в abcba, то есть, cba.

      Выражение: StringUtils.substringAfter(value,"b")

    51. Если поле имеет строковый тип, получайте подстроку после последнего указанного символа. Например, получайте подстроку после последнего b в abcba, то есть, a.

      Выражение: StringUtils.substringAfterLast(value,"b")

    52. Если поле имеет строковый тип, получайте подстроку до первого указанного символа. Например, получайте подстроку до первого b в abcba, то есть, a.

      Выражение: StringUtils.substringBefore(value,"b")

    53. Если поле имеет строковый тип, получить подстроку до последнего указанного символа. Например, получить подстроку до последнего b в abcba, то есть, abc.

      Выражение: StringUtils.substringBeforeLast(value,"b")

    54. Если поле имеет строковый тип, получить вложенную подстроку внутри указанной строки. Если подстрока не найдена, null возвращается. Например, получить подстроку между тег в tagabctag, то есть, abc.

      Выражение: StringUtils.substringBetween(value,"тег")

    55. Если поле имеет тип строка, удалите управляющие символы (char≤32) с обоих концов строкового значения, например, удалите пробелы с обоих концов строкового значения.

      Выражение: StringUtils.trim(value)

    56. Преобразуйте символьную строку в значение типа byte. Если преобразование не удалось, 0 возвращается.

      Выражение: NumberUtils.toByte(value)

    57. Преобразуйте символьную строку в значение типа byte. Если преобразование не удалось, указанное значение, например, 1, возвращается.

      Выражение: NumberUtils.toByte(value,1)

    58. Преобразовать строку символов в значение типа double. Если преобразование не удалось, 0.0d возвращается.

      Выражение: NumberUtils.toDouble(value)

    59. Преобразовать строку символов в значение типа double. Если преобразование не удалось, указанное значение, например, 1.1d, возвращается.

      Выражение: NumberUtils.toDouble(value,1.1d)

    60. Преобразовать строку символов в значение типа float. Если преобразование не удалось, 0.0f возвращается.

      Выражение: NumberUtils.toFloat(value)

    61. Преобразуйте строку символов в значение типа float. Если преобразование не удалось, указанное значение, например, 1.1f, возвращается.

      Выражение: NumberUtils.toFloat(value,1.1f)

    62. Преобразуйте строку символов в значение типа int. Если преобразование не удалось, 0 возвращается.

      Выражение: NumberUtils.toInt(value)

    63. Преобразуйте строку символов в значение типа int. Если преобразование не удалось, указанное значение, например, 1, возвращается.

      Выражение: NumberUtils.toInt(value,1)

    64. Преобразуйте строку символов в значение типа long. Если преобразование не удалось, 0 возвращается.

      Выражение: NumberUtils.toLong(value)

    65. Преобразовать символьную строку в значение типа long. Если преобразование не удалось, указанное значение, например, 1L, возвращается.

      Выражение: NumberUtils.toLong(value,1L)

    66. Преобразовать символьную строку в значение типа short. Если преобразование не удалось, 0 возвращается.

      Выражение: NumberUtils.toShort(value)

    67. Преобразовать символьную строку в значение типа short. Если преобразование не удалось, указанное значение, например, 1, возвращается.

      Выражение: NumberUtils.toShort(value,1)

    68. Преобразовать строку IP в значение типа long, например, преобразовать 10.78.124.0 в 172915712.

      Выражение: CommonUtils.ipToLong(value)

    69. Прочитайте файл сопоставления IP-адресов и физических адресов из сети и загрузите файл сопоставления в коллекцию карт. url указывает адрес для хранения файла сопоставления IP, например, http://10.114.205.45:21203/sqoop/IpList.csv.

      Выражение: HttpsUtils.downloadMap("url")

    70. Кэшировать сопоставления IP-адресов и физических адресов и указать ключ для извлечения, например, ipList.

      Выражение: CommonUtils.setCache("ipList",HttpsUtils.downloadMap("url"))

    71. Получить кешированные сопоставления IP‑адресов и физических адресов.

      Выражение: CommonUtils.getCache("ipList")

    72. Проверить, кешированы ли сопоставления IP‑адресов и физических адресов.

      Выражение: CommonUtils.cacheExists("ipList")

    73. На основе указанного типа смещения (month/day/hour/minute/second) и смещения (положительное число указывает на увеличение, отрицательное — на уменьшение) преобразовать время в заданном формате в новое время, например, добавить 8 часов к 2019-05-21 12:00:00.

      Выражение: DateUtils.getCurrentTimeByZone("yyyy-MM-dd HH:mm:ss",value, "час", 8)

    74. Если значение пусто или равно null, "aaa" возвращается. Иначе, значение возвращается.

      Выражение: StringUtils.defaultIfEmpty(value,"aaa")