Dremio字符集“ ISO-8859-1”

时间:2020-01-17 20:29:14

标签: apache-calcite dremio

在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?

我们正在研究thread,了解如何在Dremio中配置字符集。

docker日志中的异常详细信息:

com.dremio.common.exceptions.UserException:无法在字符集“ ISO-8859-1”中编码“ NBC Universal – NBC News” 在com.dremio.common.exceptions.UserException $ Builder.build(UserException.java:776)〜[dremio-common-4.1.3-202001022113020736-53142377.jar:4.1.3-202001022022113020736-53142377] 在com.dremio.exec.planner.sql.SqlExceptionHelper.coerceException(SqlExceptionHelper.java:126)〜[dremio-sabot-kernel-4.1.3-202001022113020020-53142377.jar:4.1.3-202001022113020020736-53142377] 在com.dremio.exec.planner.sql.handlers.query.NormalHandler.getPlan(NormalHandler.java:60)〜[dremio-sabot-kernel-4.1.3-202001022113020020-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-202001022113020020736-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-202001022113020020736-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:无法以字符集“ ISO-8859-1”编码“ NBC Universal – NBC News” 在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:45)〜[na:1.8.0_232] 在java.lang.reflect.Constructor.newInstance(Constructor.java:423)〜[na:1.8.0_232] 在org.apache.calcite.runtime.Resources $ ExInstWithCause.ex(Resources.java:463)〜[calcite-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-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.rex.RexBuilder.makeLiteral(RexBuilder.java:887)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.rex.RexBuilder.makeVarCharLiteral(RexBuilder.java:1108)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertLiteral(SqlNodeToRexConverterImpl.java:120)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.SqlToRelConverter $ Blackboard.visit(SqlToRelConverter.java:4639)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.SqlToRelConverter $ Blackboard.visit(SqlToRelConverter.java:3988)〜[calcite-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-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.StandardConvertletTable $ 14.convertCall(StandardConvertletTable.java:292)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:63)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.SqlToRelConverter $ Blackboard.visit(SqlToRelConverter.java:4650)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.SqlToRelConverter $ Blackboard.visit(SqlToRelConverter.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.java:4552)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectList(SqlToRelConverter.java:3831)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:662)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:619)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3056)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:555)〜[calcite-core-1.16.0-201909031936280585-3f76472.jar:1.16.0-201909031936280585-3f76472] 在com.dremio.exec.planner.sql.SqlConverter.toConvertibleRelRoot(SqlConverter.java:320)〜[dremio-sabot-kernel-4.1.3-202001022113020736-53142377.jar:4.1.3-202001022113020020736-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] < / p>

1 个答案:

答案 0 :(得分:0)

问题在于,必须对方解石配置中的$进行转义,并且由于Dremio(4.1)仍在使用方解石1.16,因此,藏红花配置必须为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"
相关问题