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

时间:2016-07-29 01:25:35

标签: hadoop hive

我想更改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)

提前致谢。

2 个答案:

答案 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

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;