新建表
create table lintest(name string,id string)
添加新列alter table lintest add columns(plus int)
向表中插入数据
insert overwrite table lintest
select uuid,deviceid,'1',count(deviceid) as num from kuaiya.activity where concat(year,month,day)='20160706' group by uuid,deviceid,mac limit 10;
发现一个问题:
查询的是int字段,向string类型的字段插入数据可以正常插入
但是如果列字段类型为int,插入string类型的数据,无法插入。
hive查询去重,如果使用distinct去重,有时会去重不彻底。因此使用hive的内置函数row_number()
select deviceid,build_brand,substring(os,0,9) as version,num from(
select deviceid,build_brand,os,row_number() over(distribute by deviceid sort by os) as num
from base.user_all)tmp
where tmp.num=1
解释:deviceid通过distinct去重会有很多重发的,如果使用row_number()(distribute deviceid sort by os)。。。where num=1只去一个deviceid
参考资料:
http://ju.outofmemory.cn/entry/268751
注意事项:
- hive建表默认使用单个分隔符号:例如:如果定义分隔符号‘#$’,数据查询只有#被当作分隔符号使用。
- load数据,字段类型不匹配时,查询返回NULL
- select查询插入数据,字段类型不匹配时,查询返回NULL
- hive在数据加载的时候不做类型检查,查询的时候做检查。