Drop column of hive table stored as orc

后端 未结 4 528
栀梦
栀梦 2021-01-01 00:03

I have hive table created as below:

create table alpha001(id int, name string) clustered by (id) into 2 buckets store         


        
4条回答
  •  自闭症患者
    2021-01-01 00:48

    You are using the replace command in a wrong way, you need to omit the columns that you want to drop while using replace command.

    describe formatted bucketed_table; OK col_name data_type comment

    col_name data_type comment

    id int firstname string last_name string

    hive>alter table bucketed_table drop column id;

    MismatchedTokenException(58!=196) at org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:61 7) at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115) at org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.dropPartitionSpec(Hiv eParser_IdentifiersParser.java:10839) at org.apache.hadoop.hive.ql.parse.HiveParser.dropPartitionSpec(HiveParser.java:49854 ) at org.apache.hadoop.hive.ql.parse.HiveParser.alterStatementSuffixDropPartitions(Hive Parser.java:13140) at org.apache.hadoop.hive.ql.parse.HiveParser.alterTableStatementSuffix(HiveParser.ja va:9370) at org.apache.hadoop.hive.ql.parse.HiveParser.alterStatement(HiveParser.java:8803) at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:4057) at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1786) at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1152) at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:211) at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:171) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:438) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:321) at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1224) at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1265) at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1161) at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1151) at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:217) at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:169) at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:380) at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:740) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:685) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:625) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.util.RunJar.run(RunJar.java:233) at org.apache.hadoop.util.RunJar.main(RunJar.java:148) FAILED: ParseException line 1:32 mismatched input 'column' expecting PARTITION near 'drop' in drop partition statement

    hive> alter table bucketed_table replace columns(firstname string , lastname string); OK Time taken: 0.164 seconds

    hive> select * from bucketed_table; OK bucketed_table.firstname bucketed_table.lastname 3 nikhil 3 nikhil 1 tutu 1 avi 4 tanvi 10 vivek 1 tutu 1 avi 4 tanvi 10 vivek 5 akshay 5 akshay Time taken: 0.138 seconds, Fetched: 12 row(s)

    hive> describe bucketed_table; OK col_name data_type comment firstname string lastname string

    so from above even if you replace the column , if the bucketing is done on that column it will still persist but if that column doesn't have bucketing on it then it will be removed both from metadata and hdfs.

提交回复
热议问题