插入数据时发生hive语义异常

b5buobof  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(385)

我用兽人创建了一个Hive表。如果我从配置单元控制台插入数据,它可以正常工作。但是如果我从jdbc代码插入数据,它会引发配置单元语义异常。
错误
rg.apache.hive.service.cli.hivesqlexception:编译语句时出错:失败:semanticexception[error 10293]:无法为insert/values org.apache.hive.service.cli.operation.tosqlexception(操作)中不支持的类型为tok\u table\u或\u col的insert values表达式创建临时文件。java:326) org.apache.hive.service.cli.operation.sqloperation.prepare(sqloperation。java:102)org.apache.hive.service.cli.operation.sqloperation.runinternal(sqloperation)。java:171)org.apache.hive.service.cli.operation.operation.run(操作。java:268)org.apache.hive.service.cli.session.hivesessionimpl.executestatementinternal(hivesessionimpl。java:410) org.apache.hive.service.cli.session.hivesessionimpl.executeStatementSync(hivesessionimpl。java:397)sun.reflect.generatedmethodaccessor24.invoke(未知源)sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:43)java.lang.reflect.method.invoke(方法。java:606) org.apache.hive.service.cli.session.hivesessionproxy.invoke(hivesessionproxy)。java:78)org.apache.hive.service.cli.session.hivesessionproxy.access$000(hivesessionproxy。java:36)org.apache.hive.service.cli.session.hivesessionproxy$1.run(hivesessionproxy。java:63)java.security.accesscontroller.doprivileged(本机方法)javax.security.auth.subject.doas(主题。java:415)org.apache.hadoop.security.usergroupinformation.doas(用户组信息。java:1671)org.apache.hive.service.cli.session.hivesessionproxy.invoke(hivesessionproxy)。java:59)com.sun.proxy.$proxy25.executeStatementSync(未知源)org.apache.hive.service.cli.cliservice.executeStatementSync(cliservice。java:258)org.apache.hive.service.cli.thrift.thriftcliservice.executestatement(thriftcliservice。java:509)org.apache.hive.service.cli.thrift.tcliservice$processor$executestatement.getresult(tcliservice。java:1313) org.apache.hive.service.cli.thrift.tcliservice$processor$executestatement.getresult(tcliservice。java:1298)org.apache.thrift.processfunction.process(processfunction。java:39)org.apache.thrift.tbaseprocessor.process(tbaseprocessor。java:39)org.apache.hive.service.auth.tsetipaddressprocessor.process(tsetipaddressprocessor)。java:56) org.apache.thrift.server.tthreadpoolserver$workerprocess.run(tthreadpoolserver。java:285)java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor。java:1145)java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor。java:615)java.lang.thread.run(线程。java:745)
我的插入查询

result = name+","+age+","+job;
String stmt = "INSERT INTO table real_estate.addressinformation_orc VALUES(" + result + ")";

任何帮助都将不胜感激。

pkln4tw6

pkln4tw61#

你需要引用字符串。假设年龄是一个整数,这将起作用,但这是一个糟糕的解决方案:

result = "'" + name + "'," + age + ",'" + job + "'"

这是一个bas解决方案,因为如果名字和工作计数是一个报价,这将打破你的代码。更好的解决办法是使用事先准备好的语句。有了准备好的声明,您就不必担心qoting:

preparedStatement = dbConnection.
  prepareStatement("INSERT INTO table " +     
    "real_estate.addressinformation_orc VALUES(?,?,?)");

preparedStatement.setString(1, name);
preparedStatement.setInt(2, age);
preparedStatement.setString(3, job);

// execute insert SQL stetement
preparedStatement.executeUpdate();
kyvafyod

kyvafyod2#

您需要在字符串引号中添加结果变量。
例如:insert into table test1(sno,name)values(1,jj);
上一行抛出错误,如果我们编辑相同的如下它的作品
在表test1(sno,name)中插入值(1,“jj”);
这里name datatype是string

相关问题