在 hive 中创建带有附加列的表

Posted

技术标签:

【中文标题】在 hive 中创建带有附加列的表【英文标题】:create table in hive with additional columns 【发布时间】:2016-01-07 06:40:51 【问题描述】:

我是 Hive 的新手。我想在配置单元中创建与现有表相同的列以及一些附加列的表。我知道我们可以使用这样的东西。

CREATE TABLE new_table_name
AS
SELECT *
FROM old_table_name

这将创建与 old_table_name 具有相同列的表。

但是如何在 new_table_name 中指定其他列?

【问题讨论】:

【参考方案1】:

以下是实现它的方法:

旧表:

hive> describe departments;
OK
department_id           int                     from deserializer   
department_name         string                  from deserializer   

创建表:

create table ctas as 
select department_id, department_name, 
cast(null as int) as col_null 
from departments;

新表的显示结构:

hive> describe ctas;
OK
department_id           int                                         
department_name         string                                      
col_null                int                                         
Time taken: 0.106 seconds, Fetched: 3 row(s)

新表的结果:

hive> select * from ctas;
OK
2       Fitness         NULL
3       Footwear        NULL
4       Apparel         NULL
5       Golf            NULL
6       Outdoors        NULL
7       Fan Shop        NULL
8       TESTING         NULL
8000    TESTING         NULL
9000    testing export  NULL

【讨论】:

【参考方案2】:

简单的方法是在上述CREATE 语句之后发出ALTER TABLE 命令以添加更多(附加)列。

【讨论】:

谢谢穆拉利。有什么办法,我可以在创建时指定吗?如果我通过 Alter table 建议,然后添加几列,它会导致任何 mapreduce 工作吗?我只是想了解如果我们采用这种方法是否会有任何性能损失 如果您的表已经有数据,然后您尝试添加一列,那么它将无法工作,因为您需要使用新列中的值重写表。但是,它是一个空白表,那么它是一个简单的alter,所以应该是轻量级的。不确定这是否会调用 MR。【参考方案3】:

首先像第一个一样创建一个新表 然后改变这个新表并添加你想要的列。

CREATE TABLE new_table LIKE old_table;
ALTER TABLE new_table ADD COLUMNS (newCol1 int,newCol2 int);

如果您希望避免数据复制,请将您的表设为外部

希望对你有帮助:)

【讨论】:

以上是关于在 hive 中创建带有附加列的表的主要内容,如果未能解决你的问题,请参考以下文章

在配置单元中创建一个带有时间戳作为注释的表

在 HDInsight 4.0 中创建群集期间更改 Hive 托管表的默认路径

如何使用 DBI 写入带有日期列的表

在 hive 的外部表中创建分区

Hive:无法插入到带有地图列的表中

如何在 numpy 中创建一个“接受”附加的空列表网格?