hive
1)Hive 和关系数据库存储文件的系统不同,Hive 使用的是 Hadoop 的HDFS(Hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统;
2)Hive 使用的计算模型是 MapReduce,而关系数据库则是自己设计的计算模型;
3)关系数据库都是为实时查询的业务进行设计的,而 Hive 则是为海量数据做数据挖掘设计的,实时性很差,因为用到了Map-Reduce的计算模型;实时性的区别导致 Hive 的应用场景和关系数据库有很大的不同;
4)Hive 很容易扩展自己的存储能力和计算能力,这个是继承 Hadoop 的,而关系数据库在这个方面要差很多。
三、其它记录
set hive.execution.engine=tez
设置队列 tez用 set tez.queue.name=pri
mr用 set mapred.job.queue.name=pri;
1.hive查询创建表
create table user_jd_reg as select t.user_id,t.phone from (select *,row_number() over (partition by user_id order
by p_date desc) as ranks from db_eam.ods_j_user_info ) as t where t.ranks=1
其中
(select *,row_number() over (partition by user_id order
by p_date desc) as ranks from db_eam.ods_j_user_info ) as t where t.ranks=1
表示按user_id进行分组,并每组内按时间进行排序,只取最早时间的user_id,其了去重user_id的作用
2.insert overwrite 操作
insert overwrite table test select '2ec' as phone,'1' as id,'zhangsan' as name; #该操作会先清空表,然后插入该条数据,最后只有这一条数据
3.hive sql删除数据(hive不能删除数据,只能选择要留下哪些数据)
insert overwrite table test select * from test where id=2 or id=3; #选择留下id=2 or id=3的行,其它的行都删除
4.清空表
insert overwrite table test select * from test where 1=0;
TRUNCATE TABLE test
5.join(内连接), left join(左连接) ,right join(右连接)
所谓的内连接,左连接,右连接,都是根据key来决定的。
内连接,两个共有的key进行连接
左连接,只根据左边有的key进行连接
右连接,只根据右边有的key进行连接
注意:不管何种连接,只要一边有多行相同的key存在,都会出现一对多的情况。
6.显示创建表的信息
show create table test;
7.hive 分区概念
Hive表的分区就是一个目录,分区字段不和表的字段重复
创建分区表:
create table tb_partition(id string, name string)
PARTITIONED BY (month string)
row format delimited fields terminated by '\t'; #行间的分隔符为\t
加载数据到hive分区表中
方法一:通过load方式加载,month=201709表示会建一个201709的目录,代表分区了,然后放入插入的数据
load data local inpath '/home/hadoop/files/nameinfo.txt' overwrite into table tb_partition partition(month='201709');
方法二:insert select 方式
insert overwrite table tb_partition partition(month='201707') select id, name from name; #该方式会先清空数据表,然后插入select的数据
8.随机提取样本
select id_card from wide10_jd order by rand() limit 10000
9.查询的时候,只获得日期
#hive中获取日期方式,https://blog.csdn.net/shuangshaung_/article/details/53611188
select to_date(reg_time) from ods_j_user_info order by rand() limit 10000
10.将同一户的多个信息合并为一个字段里面
select concat_ws('_',collect_set(address)) as new_address group by user_id; #'_'表示连接的分隔符,,collect_set去重

浙公网安备 33010602011771号