-
hive的基本思想
hive是基于Hadoop的一个数据仓库工具(离线),可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
hadoop处理结构化数据的数据仓库
不是关系型数据库,不适合OLTP在线事务处理,例如银行
不适合实时查询和行级更新。
总结:hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析 -
Hive的特点
可扩展
Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。延展性
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。容错
良好的容错性,节点出现问题SQL仍可完成执行。 -
启动服务
nohup bin/hiveserver2 1>/dev/null 2>&1 & 后台启动,只要别的客户端连接上它就可以,可以多个beeline客户端
hive客户端不支持并发访问,同时起两个塞住了可以用beeline -
连接
!connect jdbc:hive2//s201:10000
直接连接
bin/beeline -u jdbc:hive2://s201:10000 -n root
s201是你登录这台机器的主机名字
在hive命令模式下可以用 dfs -put … 等命令操作hdfs
mysql复制表 create table tt as select * from users ; //携带数据和表结构
mysql复制表 create table tt like users ; //不带数据,只有表结构
hive2.0 以后执行引擎换成了spark -
脚本化运行
例如:
#!/bin/bash hive -e "select * from db_order.t_order" hive -e "select * from default.t_user" hql="create table default.t_bash as select * from db_order.t_order" hive -e "$hql"
hql语句复杂,把hql语句写入一个文件
select * from db_order.t_order; select count(1) from db_order.t_user;
hive -f /root/x.hql
-
建库生成在目录下
例如:建的是a.db,在指定目录
hdfs://hdp20-01:9000/user/hive/warehouse/a.db -
建表生成在库目录下
建表show
/user/hive/warehouse/db_order.db/show
8.删除表
hive会从元数据库中清除关于这个表的信息;
hive还会从hdfs中删除这个表的表目录;
-
内部表与外部表
内部表(MANAGED_TABLE):表目录按照hive的规范来部署,位于hive的仓库目录/user/hive/warehouse中
外部表(EXTERNAL_TABLE):表目录由建表用户自己指定外部表和内部表的特性差别:
内部表目录在hive仓库目录中,外部表的目录由用户自己决定 删除一个内部表时候,hive会清楚它的元数据,并且删除表数据目录(删除表数据也跟着被删除了) 删除一个外部表时候,hive只会清楚元数据而已( 删除表时数据不删。)
-
分区表
分区表的实质是:在表目录中为数据文件创建分区子目录,以便于在查询时,MR程序可以针对分区子目录中的数据进行
处理,缩减读取数据的范围。
Hive优化手段之一就是建分区表,原理:从目录的层面控制搜索数据的范围
分区字段不能是表中定义的字段排序等操作可以将分区字段当做表字段用
查看表中所有数据不要指定条件分区是一个整体,加入里面是年份和月份分区,他是一个整体,你直接往其中一个下面添加不可
以,语法就报错。hive不支持非等值的join
-
load
Load 操作只是单纯的复制/移动操作,将数据文件移动到 Hive 表对应的位置。
如果指定了 LOCAL, load 命令会去查找本地文件系统中的 filepath。
如果没有指定 LOCAL 关键字,则根据inpath中的uriOVERWRITE 关键字
如果使用了 OVERWRITE 关键字,则目标表(或者分区)中的内容会被删除,然后再将 filepath 指向的文件/目录中的内
容添加到表/分区中。
如果目标表(分区)已经有一个文件,并且文件名和 filepath 中的文件名冲突,那么现有的文件会被新文件所替代。