java - Hive 中关于 EOF 的 ParseException

标签 java hive

我可以在 shell 中执行 SQL:

LOAD DATA LOCAL INPATH '/tmp/sql.txt' INTO TABLE files;

这是 sql.txt 中的内容:

4e6c924a-1fa2-4326-86eb-975d1007f0a6 FileScoreConverterTest.java /home/xiehaozhe/Development/Kloud-Document-Analyzer/kda/src/test/java/com/kda/filescore/type/FileScoreConverterTest.java
ab6ee610-c980-4ff7-b472-8546766e0f89 FileWordCountConverterTest.java /home/xiehaozhe/Development/Kloud-Document-Analyzer/kda/src/test/java/com/kda/filescore/type/FileWordCountConverterTest.java

表(名为文件)的结构是

guid STRING
filename STRING
filepath STRING

如果我用 Java 执行 sql,我得到一个异常:

Exception in thread "main" java.sql.SQLException: Query returned non-zero code: 40000, cause: FAILED: ParseException line 1:54 mismatched input ';' expecting EOF near 'files'

代码如下:

Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
String sql = "LOAD DATA LOCAL INPATH '" + sqlFilePath + "' INTO TABLE files;";
Connection connection = DriverManager.getConnection(databaseAddress, databaseUsername, databasePassword);
Statement statement = connection.createStatement();
statement.executeQuery(sql);

我该怎么办?

最佳答案

当您在 shell 中编写查询时,您应该使用“;”在 SQL 语句的末尾:

LOAD DATA LOCAL INPATH '/tmp/sql.txt' INTO TABLE files;

但是,您不能使用“;”使用 Java 时在 SQL 语句的末尾:

LOAD DATA LOCAL INPATH '/tmp/sql.txt' INTO TABLE files

所以,这就是导致异常的原因。

关于java - Hive 中关于 EOF 的 ParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17064120/

相关文章:

java - 在 JSF 中使用 IOUtils 下载 zip 文件时出现 "Empty response, an empty response was recieved from the server"错误

java - 为什么 Google App Engine 文档强调 JDO 而不是 JPA?

hadoop - 数据分布如何在 HIVE 的分桶中发生?

apache-spark - Hive on Spark 无法工作 - 无法创建 Spark 客户端

java - 如何获取表单中的UserID并将其添加到表中?

java - Java 服务器/客户端中的编码和解码

java - 为什么我使用 java TreeSet Compare 方法获得此输出?

hadoop - 如何在超过3个级别的配置单元中加载嵌套集合

hadoop - 如何从配置单元外部表创建数据框

hadoop - 选择性足以仅考虑HIVE文件中很少的值