Набор символов Dremio 'ISO-8859-1'
Выполняя этот простой запрос в 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.
Сведения об исключении из журналов докеров:
com.dremio.common.exceptions.UserException: не удалось закодировать "NBC Universal - NBC 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.exec.planner.sql.SqlExceptionHelper.coerceException(SqlExceptionHelper.java:126) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar:4.1.3-202001022113020736-53142377] в com.dremio.exec.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.exec.planner.sql.handlers.commands.HandlerToExec.plan(HandlerToExec.java:70) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar:4.1.3-202001022113020736-53142377] в com.dremio.exec.work.foreman.AttemptManager.plan(AttemptManager.java:415) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar:4.1.3-202001022113020736-53142377] в com.dremio.exec.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:62432) [na:1.8.0_2].lang.Thread.run(Thread.java:748) [na:1.8.0_232] Вызвано: org.apache.calcite.runtime.CalciteException: не удалось закодировать "NBC Universal - NBC 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] в sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java: 1.8.0_2 ~ 1.8.0_2 ~ 1.8.0_2) ] в java.lang.reflect.Constructor.newInstance (Constructor.java:423) ~[na:1.8.0_232] в org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463) ~[кальцит -core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] в org.apache.calcite.runtime.Resources$ExInst.ex(Resources.java:572) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] в org.apache.calcite.util.NlsString.(NlsString.java:81) ~[calcite-core-1.16.0-201909031936280585-3f7641.16.0-201909031936280585-3f76472] на org.apache.calcite.rex.RexBuilder.makeLiteral(RexBuilder.java:887) ~[calcite-core-1.16.0-201909031936280585-3f7856472.jar: 1.16.01936280585-3f7856472.jar: 1.16.01936280590 ] в org.apache.calcite.rex.RexBuilder.makeVarCharLiteral(RexBuilder.java:1108) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] atcalcite..sql2rel.SqlNodeToRexConverterImpl.convertLiteral(SqlNodeToRexConverterImpl.java:120) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3fcache.saplite.saplite.saplite.svg64.saplite.sql.sql.q7. посетите (SqlToRelConverter.java:4639) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] в org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlTojava:Converter. ~ -core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] в org.apache.calcite.sql.SqlLiteral.accept(SqlLiteral.java:533) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] в org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:4552) ~[calcite-71903-java: 4552) ~ [ядро: 1.16.0-201909031936280585-3f76472] в org.apache.calcite.sql2rel.StandardConvertletTable $ 14. -3f76472] на org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:63) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3fcache.html.visit(SqlToRelConverter.java:4650) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] в org.apache.calcite.sql2rel.SqlToRelvis.java:3988) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] в org.apache.calcite.sql.SqlCall.accept(SqlCall.java:138) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] в org.apache.calcite.sql2rel.SqlToRelConverter $ Blackboard.convertExpression (SqlToRelConverter) -6: 45-calcite.0-201909031936280585-3f76472.jar: 1.16.0-201909031936280585-3f76472] в org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectList(SqlToRelConverter.java:383103 core-721903-java-3831) -71936.0-core-721903-0-721903 -328 -325 -326 -328 -328-ядро-: 1.16.0-201909031936280585-3f76472] по адресу org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:662) ~[calcite-core-1.16.0-201909031936280585-20190319362805805-36190319362805402190319362805362190319362805-805-907-907 3f76472] в org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:619) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-20190572] или calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3056) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472q.alcalite.SqlToRelConverter.convertQuery(SqlToRelConverter.java:555) ~[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] в com.dremio.exec.RtoRelContible.sql..java:320) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar:4.1.3-202001022113020736-53142377] в com.dremio.exec.planner.sql.handlers.PrelTransformer.toConvertibleRelRoot(PrelTransformer.java:777) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar:4.1.3-202001022113020736-53142377] в com.dremio.exec.planner.sql.handlers.PrelTransformer.convertToRelRoot(PrelTransformer.java:862) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar:4.1.3-202001022113020736-53142377]0-201909031936280585-3f76472] в com.dremio.exec.planner.sql.SqlConverter.toConvertibleRelRoot(SqlConverter.java:320) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.2001036221130-20736-53142377.200103622: 4.120.3-2013 -53142377] в com.dremio.exec.planner.sql.handlers.PrelTransformer.toConvertibleRelRoot(PrelTransformer.java:777) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736- 53142377] в com.dremio.exec.planner.sql.handlers.PrelTransformer.convertToRelRoot(PrelTransformer.java:862) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-5314 ]0-201909031936280585-3f76472] в com.dremio.exec.planner.sql.SqlConverter.toConvertibleRelRoot(SqlConverter.java:320) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.2001036221130-20736-53142377.200103622: 4.120.3-2013 -53142377] в com.dremio.exec.planner.sql.handlers.PrelTransformer.toConvertibleRelRoot(PrelTransformer.java:777) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736- 53142377] в com.dremio.exec.planner.sql.handlers.PrelTransformer.convertToRelRoot(PrelTransformer.java:862) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-5314 ]planner.sql.handlers.PrelTransformer.toConvertibleRelRoot (PrelTransformer.java:777) ~ [dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377] в com.dremio.exec.planner.sql.handlers.PrelTransformer.convertToRelRoot(PrelTransformer.java:862) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377]planner.sql.handlers.PrelTransformer.toConvertibleRelRoot (PrelTransformer.java:777) ~ [dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377] в com.dremio.exec.planner.sql.handlers.PrelTransformer.convertToRelRoot(PrelTransformer.java:862) ~[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar: 4.1.3-202001022113020736-53142377]
1 ответ
Проблема заключалась в том, что необходимо экранировать $ в конфигурации calcite, а также, поскольку Dremio (4.1) все еще использует calcite 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"