I have hive table created as below:
create table alpha001(id int, name string) clustered by (id) into 2 buckets store
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
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.