在 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 中创建带有附加列的表的主要内容,如果未能解决你的问题,请参考以下文章