我在HIVE CLI中执行了一个查询,应该生成一个外部表。create EXTERNAL TABLE IF NOT EXISTS (code int, area_name string)male_60_64结构、male_above_65结构)以't'结尾的行格式分隔字段;"
它工作得很好,但如果我用"-"代替"_",我将面临错误。
"create EXTERNAL TABLE IF NOT EXISTS (code int, area_name string, male-60-64)c1: string, x-user: string>) ROW FORMAT DELIMITED FIELDS以't'结尾;"
Addy的回答已经提供了如何在列名中使用连字符的示例。以下是根据文档描述的在不同版本的Hive中如何工作的补充内容:
- 仅在Hive 0.12及更早的版本中表和中允许使用字母、数字和下划线字符列名。
- 在Hive 0.13及以后的版本中,列名可以包含任意Unicode字符(参见HIVE-6013)。指定的任何列名在反引号内(')按字面意思处理。在一个反勾字符串中,使用双反号(' ')来表示反号字符。撇号Quotation还支持为表和使用保留关键字列标识符。
- 恢复到0.13.0之前的行为和限制列名称为字母数字和下划线字符,请设置配置属性hive.support. quotes .identifiers为none。在在这个配置中,反打勾的名称被解释为常规名称表达式。有关详细信息,请参见列中支持引号标识符名字。
除此之外,您还可以在那里找到STRUCT的语法,它应该可以帮助您解决您在注释中提到的错误:
struct_type: STRUCT
更新:
注意,在复杂类型(即结构体内部)中似乎不支持连字符。
尝试带引号的标识符
create table hassan( code int, `area_name` string, `male-60-64` STRUCT, `male-above-65` STRUCT) ROW FORMAT DELIMITED FIELDS TERMINATED BY 't';