Набор символов Dremio 'ISO-8859-1' - PullRequest
       116

Набор символов Dremio 'ISO-8859-1'

0 голосов
/ 17 января 2020

Во время выполнения этого простого запроса в Dremio:

SELECT 'NBC Universal – NBC News' Data

Мы получили следующее сообщение об ошибке

Failed to encode 'NBC Universal – NBC News' in character set 'ISO-8859-1'

Мы попытались установить настройки шафрана для набора символов с помощью следующей команды docker:

docker run -p 9047:9047 -p 31010:31010 -p 45678:45678 -e DREMIO_JAVA_SERVER_EXTRA_OPTS="-Dcalcite.default.charset=UTF-16LE -Dcalcite.default.nationalcharset=UTF-16LE -Dcalcite.default.collation.name=UTF-16LE$en_US"  dremio/dremio-oss

Версия Dremio - 4.1

Есть ли какая-либо конфигурация, чтобы сделать кодировку Dremio по умолчанию UTF-8 или UTF16?

Мы искали в этой теме , как настроить набор символов в Dremio.

Сведения об исключении из docker журналов:

com.dremio.common.exceptions.UserException: не удалось кодировать «NB C Universal - NB C News» в наборе символов «ISO-8859-1» в com.dremio.common.exceptions.UserException $ Builder.build (UserException. java: 776) ~ [dremio-common-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377] в com.dremio.exe c .planner. sql .SqlExceptionHelper .coerceException (SqlExceptionHelper. java: 126) ~ [dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377] по адресу com.dremio.exe c .planner. sql .handlers.query.NormalHandler.getPlan (NormalHandler. java: 60) ~ [dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377] в com.dremio. exe c .planner. sql .handlers.commands.HandlerToExe c .plan (HandlerToExe c. java: 70) ~ [dremio-sabot-ker nel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377] at com.dremio.exe c .work.foreman.AttemptManager.plan (AttemptManager. java: 415) ~ [dremio- sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377] в com.dremio.exe c .work.foreman.AttemptManager.lambda $ run $ 0 (AttemptManager. java: 324) ) ~ [dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377] в com.dremio.service.commandpool.CommandWrapper.run (CommandWrapper. java: 62) ~ [ dremio-services-commandpool-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377] в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1149) [na: 1.8. 0_232] в java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 624) [na: 1.8.0_232] в java .lang.Thread.run (Thread. java: 748 ) [na: 1.8.0_232] Вызвано: org. apache .calcite.runtime.CalciteException: не удалось кодировать 'NB C Universal - NB C News' в наборе символов 'ISO-8859-1' в sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) ~ [na: 1.8.0_232] в sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl. java: 62 ~ [na] : 1.8.0_232] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl. java: 45) ~ [na: 1.8.0_232] в java .lang.reflect.Constructor.newInstance (Конструктор. java: 33 ) ~ [na: 1.8.0_232] at org. apache .calcite.runtime.Resources $ ExInstWithCause.ex (Resources. java: 463) ~ [calcite-core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] at org. apache .calcite.runtime.Resources $ ExInst.ex (Resources. java: 572) ~ [calcite-core-1.16.0-201909031936280585-3f76472.jar: 1.16 .0-201909031936280585-3f76472] в орг. apache .calcite.util.NlsString. (NlsString. java: 81) ~ [calcite-core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585 -3f76472] в орг. apache .calcite.rex.RexBuilder.makeLiteral (RexBuilder. java: 887) ~ [кальцит -core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] в орг. apache .calcite.rex.RexBuilder.makeVarCharLiteral (RexBuilder. java: 1108) [calc] 1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] at or. -201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] в орг. apache .calcite.sql2rel. SqlToRelConverter $ Blackboard.visit (SqlToRelConverter. java: 4639) ~ [calcite-core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] в орг.серв. $ Blackboard.visit (SqlToRelConverter. java: 3988) ~ [calcite-core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] в орг. apache .calcite. sql. SqlLiteral.accept (SqlLiteral. java: 533) ~ [calcite-core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] на орг. apache .calcite.sql2rel.Sqlter .convertExpression (SqlToRelConverter. java: 4552) ~ [calcite-core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] в орг. (StandardConvertletTable. java: 292) ~ [calcite-core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] в орг. java: 63) ~ [кальцит- core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] at or. -1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] at org. apache .calcite.sql2rel.SqlToRelConverter $ Blackboard.visit (SqlToRelConverter. java: calc-core-88) 1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] в орг. apache .calcite. sql .SqlCall.accept (SqlCall. java: 138) ~ [calcite-core-1.16 .0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] at org. apache .calcite.sql2rel.SqlToRelConverter $ Blackboard.convertExpression (SqlToRelConverter. javaite-45. 0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] at or. -3f76472.jar: 1.16.0-201909031936280585-3f76472] в орг. apache. Кальцит .sql2рел SqlToRelConverter.convertSelect (SqlToRelConverter. java: 619) ~ [calcite-core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] в орг. (SqlToRelConverter. java: 3056) ~ [calcite-core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] в орг. apache .calcite.sql2rel.SqlToRelQ java: 555) ~ [calcite-core-1.16.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] в com.dremio.exe c .planner. sql .SqlConverter.toConvertibleRel Root (SqlConverter. java: 320) ~ [dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377] по адресу com.dremio.exe c .planner. sql .handlers.PrelTransformer.toConvertibleRel Root (PrelTra nsformer. java: 777) ~ [dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377] по адресу com.dremio.exe c .planner. sql. handlers.PrelTransformer.convertToRel Root (PrelTransformer. java: 862) ~ [dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377]

1 Ответ

0 голосов
/ 06 марта 2020

Проблема была в том, что $ в конфиге calcite нужно экранировать, а также, поскольку Dremio (4.1) все еще использует кальцит 1.16, конфиг saffron должен быть saffron.default вместо calcite.default.

docker run -p 9047:9047 -e DREMIO_JAVA_SERVER_EXTRA_OPTS="-Dsaffron.default.charset=UTF-16LE -Dsaffron.default.nationalcharset=UTF-16LE -Dsaffron.default.collation.name=UTF-16LE\$en_US" dremio/dremio-oss:4.1.7 

Для прямого исправления в файлах конфигурации Dremio, dremio-env файл необходимо обновить следующим образом:

# Extra Java options - server only (dremio command)
#
DREMIO_JAVA_SERVER_EXTRA_OPTS="-Dsaffron.default.charset=UTF-16LE -Dsaffron.default.nationalcharset=UTF-16LE -Dsaffron.default.collation.name=UTF-16LE\$en_US"
...