Ошибка несоответствия строк при соединении двух файлов

Я присоединяюсь к двум файлам. Один файл является извлечением из table(in0 port) имея такой формат записи utf8 string("\x01", maximum_length=3),
А другой файл нормальный text file(in1 port) имея такой формат записи ascii string(3),

При присоединении я получаю ниже ошибку:

Field "company" in key specifier for input in1 has type "ascii string(3)",
but field "kg3_company_cd" in key specifier for input in0 has type "utf8 string("\x01", maximum_length=3)".
This join may be attempted in spite of the type mismatch by
setting configuration variable AB_ALLOW_DANGEROUS_KEY_CASTING to true.
However, typically the input streams will have been hash-partitioned on
the join keys of different types, making it unlikely that all equal join.

1 ответ

Проблема в том, что строка utf8 и строка ascii - это разные базовые данные, представляющие одно и то же значение. Полученное сообщение об ошибке предупреждает вас о том, что если ваше соединение выполняется параллельно, вполне вероятно, что алгоритм разделения хеш-функции отправил бы соответствующие значения ключей из каждого потока в разные разделы, потому что базовые данные, представляющие "равные" строки, отличаются, Пример: если оба потока имеют 3 записи, каждая из которых имеет значения полей ключей ("A", "AB", ABC"), ключ" AB "может находиться в разделе 0 для одного потока, но в разделе 7 для другого потока. Компонент объединения будет запускать один экземпляр для каждого раздела, ожидая, что данные будут разделены правильно. Экземпляр для раздела 0 будет видеть ключ "AB" в одном потоке, но не в другом. Если это внутреннее соединение, вы увидите только те, которые соответствуют ключевые записи, которые были случайно отправлены в тот же раздел на выходе.

Вы должны выбрать, какую строковую кодировку вы хотите, и убедиться, что оба потока имеют соответствующую кодировку перед соединением. Просто добавьте переформатирование до.

Другие вопросы по тегам