有以下场景需要我们给字段添加默认值。
当我们清理了一些数据之后,数据的某些字段在数据中是没有的但是需要保留这个字段,那么我们将数据插入中转表中时,就需要给这个字段赋予默认值,来让语句正确执行。
本人知道的添加默认值的方法有以下两种:
在写插入语句的时候,可以直接在语句中将默认值写入。
例如:
insert into table User_Attribute select (row_number() over())+1000 as id,customid,0 as age from tbl_custom;
如上面的语句,清理的数据中没有年龄字段,而中转表中有这个字段,那么在插入的时候就直接将默认值0赋给这个字段。其他类型的直接量也一样。
示例:
hive> select * from person;
OK
1.0 张三 20.0 男 未知
2.0 李四 25.0 男 河北
3.0 张飞 30.0 男 河北
4.0 关羽 35.0 男 山东
5.0 小乔 38.0 女 浙江
6.0 刘备 40.0 男 成都
7.0 小李 29.0 男 江南
以上是本人hive中一个表中的数据,本人想把这个数据导入到另外一张表中,添加一个test int类型的字段,那么有如下操作:
hive> create table ren(id string,name string,age string,gender string,address string,test int) row format delimited fields terminated by '|';
OK
Time taken: 0.415 seconds
hive> insert into table ren select * , 0 as test from person;
执行完插入语句,我们看一下数据:
hive> select * from ren;
OK
1.0 张三 20.0 男 未知 0
2.0 李四 25.0 男 河北 0
3.0 张飞 30.0 男 河北 0
4.0 关羽 35.0 男 山东 0
5.0 小乔 38.0 女 浙江 0
6.0 刘备 40.0 男 成都 0
7.0 小李 29.0 男 江南 0
Time taken: 0.61 seconds, Fetched: 7 row(s)
hive>
插入成功,并且成功的增加了字段而且赋予了默认值。
除了直接量的方法,我们还可以使用Hive的内置函数来做到这一点。
示例:
还是上面的例子,这次使用内置函数来完成,操作如下:
hive> insert into table ren select * , abs(0) as test from person;
这次使用的是求绝对值的函数,将这个值赋予test字段。
看一下数据:
hive> select * from ren;
OK
1.0 张三 20.0 男 未知 0
2.0 李四 25.0 男 河北 0
3.0 张飞 30.0 男 河北 0
4.0 关羽 35.0 男 山东 0
5.0 小乔 38.0 女 浙江 0
6.0 刘备 40.0 男 成都 0
7.0 小李 29.0 男 江南 0
1.0 张三 20.0 男 未知 0
2.0 李四 25.0 男 河北 0
3.0 张飞 30.0 男 河北 0
4.0 关羽 35.0 男 山东 0
5.0 小乔 38.0 女 浙江 0
6.0 刘备 40.0 男 成都 0
7.0 小李 29.0 男 江南 0
Time taken: 0.296 seconds, Fetched: 14 row(s)
hive>
数据也插入成功并赋予了默认值。
以上就是两种赋予字段默认值的方法。