hive semantische Ausnahme beim einfügen der Daten
Erstellte ich eine hive-Tabelle mit ORC. Wenn ich für das einfügen von Daten aus der hive-Konsole funktioniert es perfekt.Aber Wenn ich das einfügen von Daten aus der Jdbc-code.Es wirft hive semantische Ausnahme.
Fehler
rg.apache.hive.service.cli.HiveSQLException: Fehler beim kompilieren Anweisung: FEHLER: SemanticException [Fehler 10293]: Unable to create temp-Datei für das einfügen von Werten Ausdruck geben TOK_TABLE_OR_COL nicht unterstützt einfügen/Werte
org.apache.hive.service.cli.Betrieb.Betrieb.toSQLException(Betrieb.java:326)
org.apache.hive.service.cli.Betrieb.SQLOperation.vorbereiten(SQLOperation.java:102)
org.apache.hive.service.cli.Betrieb.SQLOperation.runInternal(SQLOperation.java:171)
org.apache.hive.service.cli.Betrieb.Betrieb.run(Betrieb.java:268)
org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementInternal(HiveSessionImpl.java:410)
org.apache.hive.service.cli.Sitzung.HiveSessionImpl.executeStatementAsync(HiveSessionImpl.java:397)
Sonne.reflektieren.GeneratedMethodAccessor24.invoke(Unknown Source)
Sonne.reflektieren.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflektieren.Methode.invoke(Method.java:606)
org.apache.hive.service.cli.Sitzung.HiveSessionProxy.invoke(HiveSessionProxy.java:78)
org.apache.hive.service.cli.Sitzung.HiveSessionProxy.access$000(HiveSessionProxy.java:36)
org.apache.hive.service.cli.Sitzung.HiveSessionProxy$1.run(HiveSessionProxy.java:63)
java.Sicherheit.AccessController.doPrivileged(Native Method)
javax.Sicherheit.auth.Thema.doAs(Subject.java:415)
org.apache.hadoop.Sicherheit.UserGroupInformation.doAs(UserGroupInformation.java:1671)
org.apache.hive.service.cli.Sitzung.HiveSessionProxy.invoke(HiveSessionProxy.java:59)
com.Sonne.proxy.$Proxy25.executeStatementAsync(Quelle Unbekannt)
org.apache.hive.service.cli.CLIService.executeStatementAsync(CLIService.java:258)
org.apache.hive.service.cli.die Sparsamkeit.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.die Sparsamkeit.ProcessFunction.Prozess(ProcessFunction.java:39)
org.apache.die Sparsamkeit.TBaseProcessor.Prozess(TBaseProcessor.java:39)
org.apache.hive.service.auth.TSetIpAddressProcessor.Prozess(TSetIpAddressProcessor.java:56)
org.apache.die Sparsamkeit.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:285)
java.util.gleichzeitige.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.gleichzeitige.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:745)
Meine insert-Abfrage
result = name+","+age+","+job;
String stmt = "INSERT INTO table real_estate.addressinformation_orc VALUES(" + result + ")";
jede Hilfe wird geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zitieren die Streicher. Vorausgesetzt, das Alter ist eine ganze Zahl, dies funktionieren wird, aber es ist eine schlechte Lösung:
Es ist ein bas-Lösung, weil, wenn name und job countain ein Zitat, brechen würde, dass Sie Ihren code.
Eine viel bessere Lösung ist die Verwendung von prepared statements. Mit prepared statements, die Sie nicht haben, um über sorgen qoting:
Muß man die Ergebnis-variable in string Anführungszeichen.
Zum Beispiel :
insert into Tabelle test1(sno,name) values (1,jj);
Obige Zeile wirft Fehler, wenn wir diese Bearbeiten das gleiche wie unten funktioniert es
insert into table test1(sno,name) values (1,"jj");
Hier name Datentyp ist string