hive插入数据

新建表

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在数据加载的时候不做类型检查,查询的时候做检查。
http://blog.csdn.net/lxpbs8851/article/details/17118841

你可能感兴趣的:(Hive)