替换 hive 中的列

Posted

技术标签:

【中文标题】替换 hive 中的列【英文标题】:replace columns in hive 【发布时间】:2018-04-08 14:40:33 【问题描述】:

我在 hive 中创建了一个表,现在我正在尝试使用 REPLACE COLUMNS 替换列名。 更改查询是:

**ALTER TABLE emp1 REPLACE COLUMNS (
id INT eid int,
name STRING ename string,
sal INT esal int,
city string ecity string,
country string ecountry string);**

不匹配令牌异常(26!=301) 在 org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:617) 在 org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115) 在 org.apache.hadoop.hive.ql.parse.HiveParser.alterStatementSuffixAddCol(HiveParser.java:9898) 在 org.apache.hadoop.hive.ql.parse.HiveParser.alterTblPartitionStatementSuffix(HiveParser.java:8524) 在 org.apache.hadoop.hive.ql.parse.HiveParser.alterTableStatementSuffix(HiveParser.java:8139) 在 org.apache.hadoop.hive.ql.parse.HiveParser.alterStatement(HiveParser.java:7190) 在 org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:2602) 在 org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1589) 在 org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1065) 在 org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:201) 在 org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166) 在 org.apache.hadoop.hive.ql.Driver.compile(Driver.java:462) 在 org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1276) 在 org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1393) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:1205) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:1195) 在 org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:220) 在 org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:172) 在 org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:383) 在 org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:775) 在 org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:693) 在 org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:628) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:136) 失败:ParseException line 2:7 mismatched input 'eid' Expecting ) 在 add column 语句中的 'INT' 附近

请帮助我。我正在学习蜂巢

【问题讨论】:

【参考方案1】:

ALTER TABLE <TableName> REPLACE COLUMNS 删除所有现有列并添加新的列集。

ALTER TABLE <TableName> REPLACE COLUMNS (EID INT, EName STRING);

REPLACE COLUMNS

对于您的场景,您可以使用ALTER TABLE &lt;TableName&gt; CHANGE &lt;ColumnName&gt;

ALTER TABLE &lt;TableName&gt; CHANGE ID EID INT;

这个页面会给你很多信息ALTER COLUMNS

【讨论】:

【参考方案2】:

REPLACE 用于当您想要为表添加完全不同的列时。如果不是,最好在 alter 语句中使用 CHANGE 选项重命名 column_name。

【讨论】:

以上是关于替换 hive 中的列的主要内容,如果未能解决你的问题,请参考以下文章

替换 Hive 表中所有列中的字符

我需要用一些组替换我的 DataFrame 中的列中的值

我可以使用 MySQL 工作台替换 Mysql 中名为“key”的列中的字符串吗?

从数据框中的列中采样唯一行而不进行替换

在 Numpy 数组的列中进行条件替换

替换 0 并从同一行的列中向前填充 [重复]