【问题标题】:Error while creating table in Hive在 Hive 中创建表时出错
【发布时间】:2016-11-15 13:50:54
【问题描述】:

我是 hadoop 新手。在创建新表时,我需要有关 Hive 中遇到的错误的帮助。我经历过这个Hive FAILED: ParseException line 2:0 cannot recognize input near ''macaddress'' 'CHAR' '(' in column specification

我的问题:有必要在脚本中写下表格的位置吗?因为我在开始时写表位置,我害怕写位置,因为它不应该通过任何多功能操作干扰我的其余数据库。

这是我的查询:

CREATE TABLE meta_statistics.tank_items (
   shop_offers_history_before bigint,
   shop_offers_temp bigint,
   videos_distinct_temp bigint,
   deleted_temp bigint,
   t_stamp timestamp )
   CLUSTERED BY (
   tank_items_id)
   INTO 8 BUCKETS
   ROW FORMAT SERDE
   TBLPROPERTIES (transactional=true)
   STORED AS ORC;

我得到的错误是 -

ParseException 第 1:3 行无法识别“TBLPROPERTIES”附近的输入 '(' '事务性'

还有哪些其他可能的错误以及如何消除这些错误?

【问题讨论】:

    标签: hive


    【解决方案1】:

    您的创建查询中有语法错误。您共享的错误表明 hive 无法识别 'TBLPROPERTIES' 附近的输入。

    解决方案:

    按照 hive 语法,TBLPROPERTIES 中传递的键值应该用双引号引起来。应该是这样的:TBLPROPERTIES ("transactional"="true")

    因此,如果我更正您的查询,它将是:

     CREATE TABLE meta_statistics.tank_items ( 
         shop_offers_history_before bigint, 
         shop_offers_temp bigint, 
         videos_distinct_temp bigint, 
         deleted_temp bigint, 
         t_stamp timestamp 
      ) CLUSTERED BY (tank_items_id) INTO 8 BUCKETS 
        ROW FORMAT SERDE TBLPROPERTIES ("transactional"="true") STORED AS ORC;
    

    执行上述查询,然后如果您遇到任何其他语法错误,请确保STORED AS , CLUSTERED BY , TBLPROPERTIES 的顺序符合 hive 语法。

    更多详情请参考: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTable

    【讨论】:

    • 你好 Reena,我创建了一个新的数据库 meta_statistics 并执行 d 更正查询并面临另一个错误 SemanticException [错误 10002]: Invalid column reference 但我不明白错误是哪个列引用以及什么与此有关吗?感谢您的宝贵时间
    • 是的,我明白了!我刚刚用其他现有的列引用替换了簇列引用,现在它工作正常。非常感谢您的建议。
    【解决方案2】:

    1) ROW FORMAT SERDE -> 你应该通过一些 serde

    2) TBLPROPERTIES 键值应该用双引号引起来

    3) 如果你给CLUSTERED BY 值应该在给定的列中

    如下替换

    CREATE TABLE meta_statistics.tank_items ( shop_offers_history_before bigint, shop_offers_temp bigint, videos_distinct_temp bigint, deleted_temp bigint, t_stamp timestamp ) CLUSTERED BY (shop_offers_history_before) INTO 8 BUCKETS ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'  STORED AS ORC TBLPROPERTIES ("transactional"="true");
    

    希望对你有帮助

    【讨论】:

    • 您好 Nirmal,我已经实现了您的建议,但向我展示了另一种类型的错误 - ParseException line 40:20 mismatched input 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'在 serde 格式规范中期待“SERDE”附近的 StringLiteral
    • 我也更改了“存储为 ORC”和“tblproperties”的位置,并得到错误数据库不存在:meta_statistics。所以需要创建数据库或者使用另一个数据库。非常感谢。
    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多