Хранимая процедура Hive hplsql не может вставить значения меток времени
Я пытаюсь использовать данные вставки хранимой процедуры Hive HPL/SQL в таблицу кустов. Но он не может вставить значение метки времени. Моя таблица определена следующим образом:
col_name | data_type | comment |
+----------------+---------------+----------+
| id | bigint | |
| clean_batchid | bigint | |
| job_name | varchar(50) | |
| table_name | varchar(30) | |
| begin_time | timestamp | |
| end_time | timestamp | |
| clean_type | varchar(20) | |
| total_count | bigint | |
| clean_count | bigint | |
| description | varchar(500) |
Я использую улей Cli, чтобы вставить значение без каких-либо проблем.
insert into nbl_clean_batch
values(12345, 1, 'tryme','B', '2016-12-12 12:52:43', '2016-12-12 12:56:19', 0, 10, 5, 'bbb');
но когда я использую hplsql, чтобы выполнить следующий скрипт:
START_DATE := SYSDATE;
END_DATE := SYSDATE;
INSERT INTO TABLE NBL_CLEAN_BATCH
(
ID, CLEAN_BATCHID, JOB_NAME, TABLE_NAME, BEGIN_TIME, END_TIME, CLEAN_TYPE, TOTAL_COUNT, CLEAN_COUNT, DESCRIPTION
)
VALUES (
23456, 1, 'bbb', 'B', START_DATE, END_DATE, 0, 9, 2, 'line'
);
выдает следующее исключение:
Необработанное исключение в HPL / SQL
org.apache.hive.service.cli.HiveSQLException: ошибка при компиляции оператора: FAILED: строка ParseException 2:27 не соответствует вводу '-' ожидание) около '2016' в конструкторе строки значений
в org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:267) в org.apache.hive.jdbc.Utils.verifySuccessWithInfo(Utils.java:253) в org.apache.hive.jdbc.HiveStatement.runAsverc (HiveStatement.java:310) в org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:250) в org.apache.hive.hplsql.Conn.executeSql(Conn.java:110) в org.apache.hive.hplsql.Exec.executeSql(Exec.java:592) в org.apache.hive.hplsql.Stmt.insertValues (Stmt.java:800) в org.apache.hive.hplsql.Stmt.insert(Stmt.java:713) в org.apache.hive.hplsql.Exec.visitInsert_stmt(Exec.java:1116) в org.apache.hive.hplsql.Exec.visitInsert_stmt(Exec.java:52) в org.apache.hive.hplsql.arpl. $Insert_stmtContext.accept(HplsqlParser.java:10330) в org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:70) в org.apache.hive.hplsc.it.tj.) в org.apache.hive.hplsql.Exec.visitStmt(Exec.java:52) в org.apache.hive.hplsql.HplsqlParser$StmtContext.accept(HplsqlParser.java:1015) at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:70) в org.apache.hive.hplsql.HplsqlBaseVisitor.visitBlock(Haplisjj.jb).hive.hplsql.HplsqlParser$BlockContext.accept(HplsqlParser.java:449) в org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren (AbstractParseTreeVisitor.java:70ls.hp.hl). org. (Exec.java:916) в org.apache.hive.hplsql.Exec.visitProgram(Exec.java:52) в org.apache.hive.hplsql.HplsqlParser$ProgramContext.accept(HplsqlParser.java:392) в org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:42) в org.apache.hive.hplsql.Exec.run(Exec.java:771) в org.apache.hive.hplsql.Exec.run(Exec.java:747) в org.apache.hive.hplsql.Hplsql.main(Hplsql.java:23) в sun.reflect.NativeMethodAccessorImpl.invoke0(нативный метод) в sun.reflect.NativeMethodAccessorImpl.orj.jj (62) на солнце.отражение.Делегатин gMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:498) в org.apache.hadoop.util.RunJar.run(RunJar.java.2ap) или в.hadoop.util.RunJar.main(RunJar.java:136) Вызвано: org.apache.hive.service.cli.HiveSQLException: ошибка при компиляции оператора: FAILED: строка ParseException 2:27 не соответствует вводу '-' ожидание) рядом "2016" в конструкторе строк значений в org.apache.hive.service.cli.operation.Operation.toSQLException (Operation.java:394) в org.apache.hive.service.cli.operation.SQLOperation.prepare (SQLOperation.java: 199) в org.apache.hive.service.cli.operation.SQLOperation.runInternal (SQLOperation.java:282) в org.apache.hive.service.cli.operation.Operation.run (Operation.java:334) в org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementInternal (HiveSessionImpl.java:505) в org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementAsync (HiveSessionImpl. GeneratedMethodAccesso r43.invoke (Неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:498) в org.apache.hive.service.c. 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 (Subject.java:422) в org.apache.hadoop.security.UserGroupInformation. doAs (UserGroupInformation.java:1657) в org.apache.hive.service.cli.session.HiveSessionProxy.invoke (HiveSessionProxy.java:59) в com.sun.proxy. $ Proxy38.executeStatementAsync (неизвестный источник) в org.apache.hive.service.cli.CLIService.executeStatementAsync (CLIService.java:297) в org.apache.hive.service.cli.thrift.ThriftCLIService.ExecuteStatement (ThriftCLIService.java:506) в org.apache.hivese. rvice.rpc.thrift.TCLIService $ Processor $ ExecuteStatement.getResult (TCLIService.java:1437) в org.apache.hive.service.rpc.thrift.TCLIService $ Processor $ ExecuteStatement.getResult (TCLIService.java:1422) или apache.thrift.ProcessFunction.process (ProcessFunction.java:39) в org.apache.thrift.TBaseProcessor.process (TBaseProcessor.java:39) в org.apache.hive.service.auth.TSetIpAddressProcessor.process (TSetIpAddressProoror 56) в org.apache.thrift.server.TThreadPoolServer $ WorkerProcess.run (TThreadPoolServer.java:286) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) в рабочей среде java..run (ThreadPoolExecutor.java:617) в java.lang.Thread.run (Thread.java:745) Причина: java.lang.RuntimeException: org.apache.hadoop.hive.ql.parse.ParseException: строка 2: 27 несоответствующий ввод '-' ожидание) около '2016' в конструкторе строки значения в org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:207) в org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166) в org.apache.hadoop.hive.ql.Driver.compile(Driver.java:465) в org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1301) в org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1279) в org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:197)
Есть идеи почему?
Спасибо,
1 ответ
Я использовал этот формат раньше...
hive> set CURRENT_DATE=FROM_UNIXTIME(UNIX_TIMESTAMP());
hive> select ${hiveconf:CURRENT_DATE}, * from tab1;
OK
2016-12-14 13:43:13 1 100
2016-12-14 13:43:13 2 235325
2016-12-14 13:43:13 3 3242
2016-12-14 13:43:13 4 32543
Time taken: 1.377 seconds, Fetched: 4 row(s)
hive> set CURRENT_TIMESTAMP = CURRENT_TIMESTAMP;
hive> select ${hiveconf:CURRENT_TIMESTAMP}, * from tab1;
OK
2016-12-14 13:43:35.425 1 100
2016-12-14 13:43:35.425 2 235325
2016-12-14 13:43:35.425 3 3242
2016-12-14 13:43:35.425 4 32543
Time taken: 1.32 seconds, Fetched: 4 row(s)
hive>