Hive错误:ParseException缺少EOF

15

我不确定我在这里做错了什么:

hive> CREATE TABLE default.testtbl(int1 INT,string1 STRING)  
      stored as orc 
      tblproperties ("orc.compress"="NONE") 
      LOCATION "/user/hive/test_table";

      FAILED: ParseException line 1:107 missing EOF at 'LOCATION' near ')'

而以下查询可以完美地运行:

hive>  CREATE TABLE default.testtbl(int1 INT,string1 STRING)  
       stored as orc 
       tblproperties ("orc.compress"="NONE");
       OK
       Time taken: 0.106 seconds

我这里是否漏掉了什么?有任何指点将不胜感激。谢谢!

6个回答

20

工作时间太长了...谢谢。 - minhas23

5

@Haiying Wang指出应将LOCATION放在tblproperties之前。

但我认为,当locationstored as上方指定时,也会出现错误。

最好坚持正确的顺序:

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name    -- (Note: TEMPORARY available in Hive 0.14.0 and later)
  [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
  [COMMENT table_comment]
  [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
  [SKEWED BY (col_name, col_name, ...)                  -- (Note: Available in Hive 0.10.0 and later)]
     ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
     [STORED AS DIRECTORIES]
  [
   [ROW FORMAT row_format] 
   [STORED AS file_format]
     | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  -- (Note: Available in Hive 0.6.0 and later)
  ]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)]   -- (Note: Available in Hive 0.6.0 and later)
  [AS select_statement];   -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)

参考:Hive 创建表


0

在Hive中创建表时遇到了相同的错误。

我使用了drop命令来删除表,然后再次运行我之前的create table命令。

对我起作用了。


0

谢谢您的回复,Neels。但是我在创建表时遇到了问题。我想知道是语法错误还是需要满足另一个条件,以子句的形式呈现。如果我错了,请纠正我。位置属性是用于明确指定存储表数据的位置。 - lex
你能试试看这个代码是否适用于你:CREATE TABLE default.testtbl(int1 INT,string1 STRING) stored as TEXTFILE tblproperties ("orc.compress"="NONE") LOCATION "/user/hive/test_table" - Neels
收到了相同的错误:<pre><code>hive> CREATE TABLE default.testtbl(int1 INT,string1 STRING) stored as TEXTFILE tblproperties ("orc.compress"="NONE") LOCATION "/user/hive/test_table"; FAILED: ParseException line 1:111 missing EOF at 'LOCATION' near ')'hive> </code></pre> - lex
抱歉上面的注释没有格式化。编辑器不让我编辑文本。 - lex

0

ParseException line lineNumber missing EOF at '.' near 'schemaName':

在尝试从Linux脚本执行以下命令以截断Hive表时,出现了上述错误:

dse -u username -p password hive -e "truncate table keyspace.tablename;"

解决方法: 需要将脚本行中的命令分开,如下所示 -

dse -u username -p password hive -e "use keyspace; truncate table keyspace.tablename;"

祝编程愉快!


0
如果您在使用命令“hive -f file.hql”从文件运行HiveQL时看到此错误,并且它明确指向查询的第一行,那么这很可能是由于先前查询中遗漏了分号(;)。 因为解析器将分号(;)视为每个查询的终止符。 例如:
DROP TABLE IF EXISTS default.emp create table default.emp ( field1 type, field2 type) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' STORED AS TEXTFILE LOCATION 's3://gts-promocube/source-data/Lowes/POS/';
如果您将上述内容保存在文件中并使用hive -f执行它,则会收到以下错误: FAILED: ParseException line 2:0 missing EOF at 'CREATE' near emp。
解决方案:在上面的DROP TABLE命令中加入一个分号(;)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接