【问题标题】:Skip hyphen in hive在蜂巢中跳过连字符
【发布时间】:2016-12-19 02:14:50
【问题描述】:

我在 HIVE CLI 中执行了一个查询,该查询应该生成一个 External Table 。 “如果不存在,则创建外部表 hassan(代码 int,area_name 字符串, male_60_64 结构, male_above_65 结构) 由 '\t' 终止的行格式分隔字段;"

它工作正常,但如果我输入“-”而不是“_”,我将面临错误。

"如果不存在则创建外部表 hassan (code int, area_name string,male-60-64 STRUCT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';"

任何帮助将不胜感激。

【问题讨论】:

  • 错误是什么?

标签: hadoop hive mapreduce hiveql bigdata


【解决方案1】:

尝试带引号的标识符

create table hassan( code int, `area_name` string, `male-60-64` STRUCT, `male-above-65` STRUCT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

参考:

https://issues.apache.org/jira/secure/attachment/12618321/QuotedIdentifier.html

【讨论】:

  • @user3118213 抱歉,反引号字符有问题,请立即尝试我的更新答案
  • FAILED: ParseException line 1:70 mismatched input ',' 在结构类型中期望
  • @user3118213 只是从阅读中我会说它不会抱怨- 符号,但它只是期望一些关于结构应该是什么样子的信息。 -- 如果将- 替换为_,该错误真的会消失吗?
  • 同意@Dennis Jaheruddin,@user3118213 - 在我的环境中使用 ` 将列名括起来后,它对我来说很好,例如 - `male-above-65`,您能否发布您的完整查询您正在尝试更改后
  • @Hassan 不幸的是,这似乎是known limitation。考虑将 - 替换为 _。
【解决方案2】:

Addy 的回答已经提供了一个如何在列名中使用连字符的示例。根据文档,这是一个描述它在不同版本的 Hive 中如何工作的补充:

  • 在 Hive 0.12 及更早版本中,仅 表中允许使用字母数字和下划线字符 列名。
  • 在 Hive 0.13 及更高版本中,列名可以包含任何 Unicode 字符(请参阅 HIVE-6013)。指定的任何列名 在反引号 (`) 内按字面意思处理。在反引号字符串中, 使用双反引号 (``) 来表示反引号字符。反引号 引用还允许使用保留关键字表和 列标识符。
  • 恢复到 0.13.0 之前的行为并限制 列名称为字母数字和下划线字符,设置 配置属性 hive.support.quoted.identifiers 为 none。在 此配置,反引号名称被解释为常规 表达式。有关详细信息,请参阅在列中支持带引号的标识符 姓名。

除此之外,您还可以在那里找到 STRUCT 的语法,这应该可以帮助您解决您在 cmets 中提到的错误:

struct_type : STRUCT

更新:

注意复杂类型中的连字符(所以在结构内部)do not appear to be supported

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2013-08-08
    • 2015-05-15
    • 2021-10-20
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多