重点内容:
Hive的数据类型
Hive的Tables(External 和 Internal)
Hive的Partitions(Static和Dynamic)
选择掌握 Hive Bucket Tables
期间我要穿插一些练习,因为上课时做的练习完全不够。
1. 两种连接Hive的工具
(1)通过beeline
(2)通过command Line命令行
使用方法如下图
解释:
-e 表示执行sql语句
-f 表示从一个文件中执行sql语句
beeline --hivevar key=value 定义hive的变量,这样变量就可以在hive语句中使用了。
两种模式
命令行模式:执行一个命令,返回一个结果,整个过程是阻塞的。
生产环境绝大部分采用命令行模式来部署。
你比如hive -e ' select * from table a ' 这就是命令行模式
交互模式:进入就停在hive模式(类似进入python模式)
如果没有输入-e或者-f ,它就会自动进入shell交互模式。
Beeline和CLI方式 两者命令比较
beeline方式的命令大部分要加!
实践:
Beeline登陆hive,都需要一个jdbc的url :
beeline -u "jdbc:hive2://localhost:10000/default" (生产环境没这么短)
10000是连接hive 1.2.1
10500是连接hive 2.1.0
10016是连接spark sql
2. Data type
主要的4种原始数据类型:INT DECIMAL(小数) DOUBLE STRING
为什么主要是STRING,因为大数据环境对char和varchar类型支持的不太好。
复杂数据类型:
STRUCT 通过“.”来访问
MAP和ARRAY访问方式类似
模拟面试:
大数据数据建模在数据类型方面的最佳实践(对比数据仓库)?
Hive数据建模很简单,不再纠结数据类型的使用空间,而是关注使用场合以及对函数的兼容程度。
(就是刚才说的为什么用string,不用char和varchar)
3.元数据总结
Hive有哪些元数据,
包括database table partition buckets row column views index
面试题:如何知道当前所在数据库?
命令:select current_database();
4. hive sql基础命令
(1)database
create database myhivebook; 建数据库
show databases; 查看有哪些数据库
use myhivebook; 切换到该数据库
desc database myhivebook; 显示数据库信息
可以看到这个database的位置,Hive默认是把数据库创建在 /user/hive/warehouse目录下的,
你是内部表的话,默认都会在这个目录下,如果是default数据库的内部表就在此目录下。
如果是其他数据库的内部表,创建了数据库,比如叫a,那就会在这个目录下创建一个叫a.db的目录下,以后内部表就放在a.db下。
drop database myhivebook; 删除数据库
默认情况:
[root@data1 ~]# hdfs dfs -ls /user/hive/warehouse/
Found 7 items
drwxrwxrwt - root hive 0 2017-04-07 14:24 /user/hive/warehouse/a.db
drwxrwxrwt - root hive 0 2017-03-27 14:13 /user/hive/warehouse/abc
drwxrwxrwt - root hive 0 2017-04-07 14:22 /user/hive/warehouse/b.db
drw