我想更改Hive表的列名而不更改它的数据类型。
我尝试了下面的查询,但它需要我不知道的数据类型。
ALTER TABLE test CHANGE a a1 INT;
我希望在我的所有列之前加上SALES_
前缀,而不管它们的列类型。
输入表格
emp_id(int) emp_name(string) salary(double)
输出表
sales_emp_id(int) sales_emp_name(string) sales_salary(double)
提前致谢。
答案 0 :(得分:1)
好吧,使用alter table command
更改配置单元中的列名称需要其数据类型。
为此,您可以执行以下命令,
1)使用新列名称创建一个新表
create table newTable (sales_emp_id int ,sales_emp_name string, sales_salary double) ;
2)从旧表中插入新表
insert into newTable select * from oldtable;
3)现在,你可以放弃旧桌子。
drop table oldtable;
如果创建一个新表听起来没问题,可以使用上面的代码。
好吧,如果你使用shell脚本,如下所示:
while read line;do
SOURCE_TABLENAME= `echo $line| awk -F" " '{print $1}'`
TARGET_TABLENAME= `echo $line| awk -F" " '{print $2}'`
LOC=`echo "$line"| awk -F" " '{print $3}'`
PREFIX="emp_"
S=`hive -e "desc $SOURCE_TABLENAME"`
VAL=echo $S |sed 's/\(\(\w\w*\W*\)\{2\}\)/\1\n/g' | sed 's/$/,/g' | sed -e 's/^/$PREFIX/'
STATEMENT="CREATE TABLE $SOURCE_TABLENAME (`echo $VAL) as select * from $SOURCE_TABLENAME LOCATION $LOC`"
hive -e "drop table $SOURCE_TABLENAME"
done < INPUT_FILE.txt
source_table target_table位置(所有输入以空格分隔)
答案 1 :(得分:0)
无需创建新表,您可以使用配置单元中的REPLACE功能更改所有列名称。该命令看起来像这样
ALTER TABLE table_name REPLACE COLUMNS (sales_emp_id INT,sales_emp_name STRING,sales_salary DOUBLE);
现在您可以使用describe命令检查列名
describe table_name;