文件中带有数字的列名并创建配置单元表

Posted

技术标签:

【中文标题】文件中带有数字的列名并创建配置单元表【英文标题】:Column names with numbers in a file and creating hive table 【发布时间】:2019-05-19 10:25:20 【问题描述】:

我正在尝试在 hive 中创建一个表。需要帮助。

示例代码: 创建外部表 table1( 标识字符串, 名称字符串, “12489738”字符串, “12492628”字符串, “12492633”字符串, “12492638”字符串, “12492655”字符串, “12492659”字符串) 以“\t”结尾的行格式分隔字段 地点 ”” tblproperties ("skip.header.line.count"="1");

但它会抛出错误:

错误信息: NoViableAltException(320@[]) 在 org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.identifier(HiveParser_IdentifiersParser.java:11633) 在 org.apache.hadoop.hive.ql.parse.HiveParser.identifier(HiveParser.java:49892) 在 org.apache.hadoop.hive.ql.parse.HiveParser.columnNameType(HiveParser.java:40082) 在 org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeList(HiveParser.java:38241) 在 org.apache.hadoop.hive.ql.parse.HiveParser.createTableStatement(HiveParser.java:6726) 在 org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:4122) 在 org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1786) 在 org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1152) 在 org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:211) 在 org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:171) 在 org.apache.hadoop.hive.ql.Driver.compile(Driver.java:447) 在 org.apache.hadoop.hive.ql.Driver.compile(Driver.java:330) 在 org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1233) 在 org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1274) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:1170) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:1160) 在 org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:217) 在 org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:169) 在 org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:380) 在 org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:740) 在 org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:685) 在 org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:625) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.hadoop.util.RunJar.run(RunJar.java:233) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:148) 失败:ParseException 行 4:0 无法识别列规范中 '"12489738"' 'STRING' ',' 附近的输入

【问题讨论】:

【参考方案1】:

尝试使用 `(反引号)转义编号列名称

hive> CREATE EXTERNAL TABLE table1( id STRING, name STRING, `12489738` STRING, 
     `12492628` STRING, 
     `12492633` STRING, `12492638` STRING, `12492655` STRING, `12492659` STRING)
      ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t" LOCATION "" 
      tblproperties ("skip.header.line.count"="1");

【讨论】:

以上是关于文件中带有数字的列名并创建配置单元表的主要内容,如果未能解决你的问题,请参考以下文章

如何查询列名中带有句点的 Excel 工作表

使用 java 创建具有约束的配置单元表并使用 jdbc 程序检查配置单元表的列约束

如何在没有使用“ROW FORMAT DELIMITER”创建配置单元表的情况下将“|”分隔文件加载到配置单元中

在 spark 中创建带有模式的配置单元外部表

如何加载“|”分隔文件到配置单元中,而不使用“行格式分隔符”创建配置单元表

一个单元格中带有(多个数组 - 多个表)的 FILTER 函数 - Excel