【问题标题】:FAILED: ParseException line 1:24 cannot recognize input near 'USING' 'org' in table name (USING org.apache.spark.sql.json)失败:ParseException line 1:24 无法识别表名中“USING”“org”附近的输入(USING org.apache.spark.sql.json)
【发布时间】:2021-01-19 09:58:45
【问题描述】:

我想使用以下查询,但出现错误。正如我在这里读到的https://databricks.com/blog/2015/02/02/an-introduction-to-json-support-in-spark-sql.html 查询应该是正确的。

CREATE TABLE spark_logs USING org.apache.spark.sql.json OPTIONS (path "/data/web_logs/clicks.json");


NoViableAltException(275@[184:1: tableName : (db= identifier DOT tab=
identifier -> ^( TOK_TABNAME $db $tab) |tab= identifier -> ^(
TOK_TABNAME $tab) );])
        at org.antlr.runtime.DFA.noViableAlt(DFA.java:158)
        at org.antlr.runtime.DFA.predict(DFA.java:116)
        at org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.tableName(HiveParser_FromClauseParser.java:4692)
        at org.apache.hadoop.hive.ql.parse.HiveParser.tableName(HiveParser.java:44923)
        at org.apache.hadoop.hive.ql.parse.HiveParser.createTableStatement(HiveParser.java:4873)
        at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:2557)
        at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1589)
        at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1065)
        at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:201)
        at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166)
        at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:522)
        at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1356)
        at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1473)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1285)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1275)
        at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:226)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:175)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:389)
        at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:781)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:699)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:634)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
FAILED: ParseException line 1:24 cannot recognize input near
'spark_logs' 'USING' 'org' in table name

你知道为什么 hive 不能识别USING org.apache.spark.sql.json吗?

【问题讨论】:

    标签: sql apache-spark hive apache-spark-sql


    【解决方案1】:

    您需要查阅新的文档 (Databricks),而不是大约 5 年前写的东西 :-) 语法如下:

    CREATE TABLE table_name 
    USING JSON 
    LOCATION 'path....';
    

    更新:看起来在 1.6.x 中,唯一支持的语法如博客文章中所述(临时表,但不是 Hive 表):

    CREATE TEMPORARY TABLE people
        USING org.apache.spark.sql.json
        OPTIONS (path '[the path to the JSON dataset]')
    

    【讨论】:

    • 什么版本的 Spark?
    • Spark 版本为 1.6.0。
    • Spark 1.6 是完全不同的野兽,临时表有效,但不是 create table
    猜你喜欢
    • 2019-02-03
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2022-12-21
    • 2015-03-10
    • 2023-02-20
    • 2018-04-25
    • 2013-09-09
    相关资源
    最近更新 更多