Строгий режим
Строгий режим — это дополнительное свойство, которое можно настроить для загрузки данных. Оно влияет на поведение загрузки и итоговые загруженные данные.
В этой теме рассматривается, что такое строгий режим и как его настроить.
Понимание строгого режима
Во время загрузки данных типы данных исходных столбцов могут не полностью соответствовать типам данных целевых столбцов. В таких случаях Selena выполняет преобразования значений исходных столбцов с несовместимыми типами данных. Преобразования данных могут завершиться неудачей из-за различных проблем, таких как несоответствие типов данных полей и переполнение длины полей. Значения исходных столбцов, которые не удалось правильно преобразовать, являются неквалифицированными значениями столбцов, а исходные строки, содержащие неквалифицированные значения столбцов, называются "неквалифицированными строками". Строгий режим используется для управления тем, следует ли отфильтровывать неквалифицированные строки во время загрузки данных.
Строгий режим работает следующим образом:
- Если строгий режим включен, Selena загружает только квалифицированные строки. Она отфильтровывает неквалифицированные строки и возвращает подробности о неквалифицированных строках.
- Если строгий режим отключен, Selena преобразует неквалифицированные значения столбцов в
NULLи загружает неквалифицированные строки, содержащие эти значенияNULL, вместе с квалифицированными строками.
Обратите внимание на следующие моменты:
-
В реальных бизнес-сценариях как квалифицированные, так и неквалифицированные строки могут содержать значения
NULL. Если целевые столбцы не допускают значенияNULL, Selena сообщает об ошибках и отфильтровывает строки, содержащие значенияNULL. -
Максимальный процент неквалифицированных строк, которые могут быть отфильтрованы для задания Stream Load, Broker Load, Routine Load или Spark Load, контролируется дополнительным свойством задания
max_filter_ratio. INSERT не поддерживает установку свойстваmax_filter_ratio.
Например, вы хотите загрузить четыре строки, содержащие значения \N (\N обозначает значение NULL), abc, 2000 и 1 соответственно в столбце из файла данных в формате CSV в таблицу Selena, и тип данных целевого столбца таблицы Selena — TINYINT [-128, 127].
-
Значение исходного столбца
\Nобрабатывается какNULLпри преобразовании в TINYINT.ПРИМЕЧАНИЕ
\Nвсегда обрабатывается какNULLпри преобразовании независимо от целевого типа данных. -
Значение исходного столбца
abcобрабатывается какNULL, поскольку его тип данных не TINYINT и преобразование завершается неудачей. -
Значение исходного столбца
2000обрабатывается какNULL, поскольку оно выходит за пределы диапазона, поддерживаемого TINYINT, и преобразование завершается неудачей. -
Значение исходного столбца
1может быть правильно преобразовано в значение типа TINYINT1.
Если строгий режим отключен, Selena загружает все четыре строки.
Если строгий режим включен, Selena загружает только строки, содержащие \N или 1, и отфильтровывает строки, содержащие abc или 2000. Отфильтрованные строки учитываются в максимальном проценте строк, которые могут быть отфильтрованы из-за неадекватного качества данных, как указано параметром max_filter_ratio.
Итоговые загруженные данные с отключенным строгим режимом
| Значение исходного столбца | Значение столбца при преобразовании в TINYINT | Результат загрузки, когда целевой столбец допускает значения NULL | Результат загрузки, когда целевой столбец не допускает значения NULL |
|---|---|---|---|
| \N | NULL | Значение NULL загружается. | Сообщаетс я об ошибке. |
| abc | NULL | Значение NULL загружается. | Сообщается об ошибке. |
| 2000 | NULL | Значение NULL загружается. | Сообщается об ошибке. |
| 1 | 1 | Значение 1 загружается. | Значение 1 загружается. |
Итоговые загруженные данные с включенным строгим режимом
| Значение исходного столбца | Значение столбца при преобразовании в TINYINT | Результат загрузки, когда целевой столбец допускает значения NULL | Результат загрузки, когда целевой столбец не допускает значения NULL |
|---|---|---|---|
| \N | NULL | Значение NULL загружается. | Сообщается об ошибке. |
| abc | NULL | Значение NULL не допускается и поэтому отфильтровывается. | Сообщается об ошибке. |
| 2000 | NULL | Значение NULL не допускается и поэтому отфильтровывается. | Сообщается об ошибке. |
| 1 | 1 | Значение 1 загружается. | Значение 1 загружается. |
Настройка строгого режима
Если вы запускаете задание Stream Load, Broker Load, Routine Load или Spark Load для загрузки данных, используйте параметр strict_mode для настройки строгого режима для задания загрузки. Допустимые значения: true и false. Значение по умолчанию — false. Значение true включает строгий режим, а значение false отключает строгий режим.
Если вы выполняете INSERT для загрузки данных, используйте переменную сеанса enable_insert_strict для настройки строгого режима. Допустимые значения: true и false. Значение по умолчанию — true. Значение true включает строгий режим, а значение false отключает строгий режим.
Примеры приведены ниже:
Stream Load
curl --location-trusted -u <username>:<password> \
-H "strict_mode: {true | false}" \
-T <file_name> -XPUT \
http://<fe_host>:<fe_http_port>/api/<database_name>/<table_name>/_stream_load
Подробный синтаксис и параметры Stream Load см. в STREAM LOAD.