hive在不知道列数据类型的情况下更改列名

svmlkihl  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(278)

我想更改配置单元表的列名而不更改其数据类型。
我尝试下面的查询,但它需要的数据类型,我不知道。

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) 提前谢谢。

qlckcl4x

qlckcl4x1#

嗯,在配置单元中使用 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) 现在,你可以放下你的旧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

输入文件.txt

源\表目标\表位置(所有输入以空格分隔)

mi7gmzs6

mi7gmzs62#

在不创建新表的情况下,可以使用配置单元中的replace函数更改所有列名。命令如下所示

ALTER TABLE table_name REPLACE COLUMNS (sales_emp_id INT,sales_emp_name STRING,sales_salary DOUBLE);

现在可以使用descripe命令检查列名

describe table_name;

相关问题