嗨,如何通过在hive中选择相同的分区表来覆盖列值。
我通过执行以下查询创建了表
CREATE TABLE user (fname string,lname string) partitioned By (day int);
在将数据插入表后,我插入数据。我执行了选择查询,如下所示:
AA AA 20170201
BB BB 20170201
CC CC 20170201
DD DD 20170202
EE EE 20170203
根据我的要求,我想在我添加的以下查询的帮助下,在我的表(用户)中再添加一列。
ALTER TABLE user ADD COLUMNS ( day2 int);
添加列后,我的表格如下所示
AA AA NULL 20170201
BB BB NULL 20170201
CC CC NULL 20170201
DD DD NULL 20170202
EE EE NULL 20170203
但我想要这样的桌子。
AA AA 20170201 20170202
BB BB 20170201 20170202
CC CC 20170201 20170202
DD DD 20170202 20170202
EE EE 20170203 20170203
所以我执行了以下查询。
insert overwrite table user partition (day)
select
fname,
lname,
day as day2,
case
when day <= 20170202 then 20170202
when day > 20170202 then day
end as day
from user;
然后我执行了如下选择查询
select * from user;
结果是:
AA AA NULL 20170201
BB BB NULL 20170201
CC CC NULL 20170201
AA AA NULL 20170202
BB BB NULL 20170202
CC CC NULL 20170202
DD DD NULL 20170202
EE EE NULL 20170203
为什么我得到空值。可以请让我知道我错过了什么,让如何实现这一点
AA AA 20170201 20170202
BB BB 20170201 20170202
CC CC 20170201 20170202
DD DD 20170202 20170202
EE EE 20170203 20170203
遵循分区 Hive 表的行为,HiVE 的架构定义在分区级别进行维护。因此,较旧的分区可能尚未收到架构更新。
详细查询
hive> drop table test_insert;
OK
hive> CREATE TABLE test_insert (fname string,lname string) partitioned By (day int);
OK
hive> insert into test_insert partition (day=20170202) values('f','l');
OK
hive> insert into test_insert partition (day=20170203) values('f','l');
OK
hive> select * from test_insert;
OK
f l 20170202
f l 20170203
Time taken: 0.148 seconds, Fetched: 2 row(s)
hive> ALTER TABLE test_insert ADD COLUMNS ( day2 int);
OK
Time taken: 0.193 seconds
hive> select * from test_insert;
OK
f l NULL 20170202
f l NULL 20170203
此时,请注意分区表的模式是在分区级别维护的,应该遵循分区模式,而不是表模式。
请注意此处列中的差异。ALTER未更改现有分区的列定义。
hive> describe formatted test_insert;
OK
# col_name data_type comment
fname string
lname string
day2 int
# Partition Information
# col_name data_type comment
day int
hive> describe formatted test_insert partition (day=20170202);
OK
# col_name data_type comment
fname string
lname string
# Partition Information
# col_name data_type comment
day int
修改了上面的查询,创建了新的分区,这样模式将从表中复制到新创建的分区中。
hive> insert overwrite table test_insert partition (day)
> select
> fname,
> lname,
> day as day2,
> case
> when day <= 20170202 then 19999999
> when day > 20170202 then day
> end as day
> from test_insert;
hive> select * from test_insert;
OK
f l 20170202 19999999
f l NULL 20170202
f l NULL 20170203
Time taken: 0.224 seconds, Fetched: 3 row(s)
希望这很清楚。!如果您想更改所有现有分区的架构,请尝试以下命令,然后尝试插入。
ALTER TABLE test_insert partition(day) ADD COLUMNS ( day2 string);
问题内容: 我有一个包含许多列的表,例如: 表A : 我如何像下面这样插入表B? 表B : 谢谢! 问题答案: 您也可以为此使用普通的UNPIVOT。 使用表变量的示例: 返回值:
问题内容: 如何使用JOIN从一个表中选择所有列,从另一个表中仅选择一些列?在MySQL中。 问题答案: 只需使用表名: 这将选择所有列和列和从。
我想在选择另一个select元素的一个选项时显示一个select元素,在选择另一个选项时隐藏它。 这是JavaScript: 感谢任何帮助。谢谢
问题内容: 我有2个表,一个包含我需要的最终结果,另一个包含我需要根据设定级别选择的列列表。 例如 : 所以,如果我做以下 然后,基本上我需要使用此select语句中的列名来确定从另一条语句中选择了哪些列。 香港专业教育学院尝试过的方法,我当然知道这是错的,但可以让我对我试图做的事情有所了解。 我试图以一种动态方式构建一个sql查询,该查询可以通过我放在表中的任何列进行更改。 从理论上讲,这应与以
我有这个,它绑定了一个变更事件。在其内部值的中,我想在另一个选择列表中选择一个特定的元素,即其中的一个特定选项。 然而它并不起作用。在主服务中有一些服务,如果选择了子服务,就不需要子服务,因此应该选择默认的。 null null
问题内容: 我的表是: 我需要选择每个包含的最大值。 结果将是: 我试过了: 不起作用 尽管数据库保留187个,但结果集有130行。结果包括的一些重复项。 没有。提供所有记录。 具有各种结果。 问题答案: 你好亲密!您需要做的就是选择住所及其最大日期时间,然后再加入到两个字段的表中:
问题内容: 尝试通过一些非常有限的知识和经验来进行SQL查询。尝试了很多我通过搜索发现的内容,但没有得出我想要的结果。 我有四个表: 回复:KITS-[KIT_NO]和[ITEM_NO]都位于ITEMS表中。它们的串联是PK。 我想选择ORDERS,ORDERS.DATE,ORDER_DETAILS.ITEM_NO,ITEMS.DESC 没问题。一些简单的内部联接,我在路上。 困难在于在selec
嗨,我想通过使用mutate函数来创建一个新变量Foldchange。但是我想使用来自同一列的值来计算这个值。有没有什么方法可以计算一个新变量,从同一列中折叠更改,而无需重新排列表格,这样表格就不需要拆分了? 下面是一个清晰的例子: 我想要的输出类似于使用: 获取 显然,我不能使用此代码基于V1和V2变量进行选择,但这只是为了说明。我希望通过这种方式,我可以保持我的附加表的完整性,折叠更改将具有重