我想更改配置单元表的列名而不更改其数据类型。我尝试下面的查询,但它需要的数据类型,我不知道。
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) 提前谢谢。
SALES_
emp_id(int) emp_name(string) salary(double)
sales_emp_id(int) sales_emp_name(string) sales_salary(double)
qlckcl4x1#
嗯,在配置单元中使用 alter table command 需要其数据类型。为此,您可以执行以下命令,1) 使用新列名创建新表)
alter table command
create table newTable (sales_emp_id int ,sales_emp_name string, sales_salary double) ;
2) 从旧表插入新表
insert into newTable select * from oldtable;
3) 现在,你可以放下你的旧table了。
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
源\表目标\表位置(所有输入以空格分隔)
mi7gmzs62#
在不创建新表的情况下,可以使用配置单元中的replace函数更改所有列名。命令如下所示
ALTER TABLE table_name REPLACE COLUMNS (sales_emp_id INT,sales_emp_name STRING,sales_salary DOUBLE);
现在可以使用descripe命令检查列名
describe table_name;
2条答案
按热度按时间qlckcl4x1#
嗯,在配置单元中使用
alter table command
需要其数据类型。为此,您可以执行以下命令,1) 使用新列名创建新表)
2) 从旧表插入新表
3) 现在,你可以放下你的旧table了。
如果创建一个新表听起来不错,那么可以使用上面的代码。
如果使用shell脚本,如下所示:
输入文件.txt
源\表目标\表位置(所有输入以空格分隔)
mi7gmzs62#
在不创建新表的情况下,可以使用配置单元中的replace函数更改所有列名。命令如下所示
现在可以使用descripe命令检查列名