1.hive是什么有什么用
什么是hive:Hive一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类似于SQL查询(HQL),本质是将Hive SQL转化成MapReduce程序.
2.hive工作原理
在hive中创建一张表,这张表要映射到hdfs中的数据(结构化的静态数据),形成映射关系;
表结构是根据要处理的数据来决定的,(描述表结构的信息,指定处理数据的位置)元数据,元数据存储在mysql中;
当在hive客户端中写sql语句时;
首先要加载mysql中的元数据;
然后解析sql语句,分析,优化,将其转换成MapReduce程序,从hdfs中读取数据来处理数据.
3.hive查看数据库的属性
(1)显示系统所有的数据库
show databases;
(2)创建数据库
create database db_name;
(3)如果数据库已经存在会报错
create database if not exists db_name;这样创建会避免报错
(4)创建数据库指定库的位置不指定在/user/hive/warehouse
关键字 location 指定表或者是数据库的位置(HDFS中)
create database if not exists abc location “/abc” ;
(5)显示所有的数据库(模糊查询)
show databases like “b*” ;
(6)显示数据库的详细信息
desc database abc;
desc database extended abc;
(7)切换数据库
use name;
查看当前正在被使用的数据库
(8)select current_database();
(9)删除数据库
drop database abc;
(10)修改数据库
alter database abc set dbproperties(“author”=“abc”);
(11)hive命令直接可以在本地启动一个客户端操作hive
(12)可以启动hiveserver2的服务 监听的10000端口
1)可以使用java程序连接(jdbc)
2)可以使用hive自带的beeline方式连接
(13)hiveserver2 前台启动
hiveserver2 & 后台启动
netstat -nltp | grep 10000 是否有端口占用
(14)beeline 输入此命令
!connect jdbc:hive2://linux01:10000
用户名 : root;密码: 回车
4.怎么建表
基本语法
create table if not exists tb_name(
列 数据类型,
列 数据类型,
…
)
row format delimited fields terminated by “分隔符
location “/ABC”;(数据在hdfs中的位置)
desc tb_name;显示表的信息
desc formatted tb_abc;显示表的详细信息
5.怎么导入数据
将数据导入到表所在的HDFS 的文件夹中 数据就直接加载
核心原理:select查询操作的数据就是表文件夹下的数据
1.默认的表目录2.location指定目录
(1)导入数据的方式一:直接将数据文件上传到对应的表的目录下
hdfs dfs -put abc.csv /tb_product
(2)导入数据的方式二:使用命令导入本地文件
load data local inpath “/hive/abc.csv” into table tb_abc;
底层就是将本地的文件上传到表所在的HDFS的目录下
(3)导入数据的方式三:使用命令导入HDFS文件到表中
load data inpath “/abc.csv” into table tb_abc;
底层将这个文件移动到对应的表的目录下
导入新的数据,覆盖原来的数据
overwrite
load data local inpath "/hive/abc.csv overwrite into table tb_abc;
(4)导入方式四:建表的时候指定表的位置 ----> 就是数据的位置
create table if not exists tb_ABC(
id int ,
name string ,
price double ,
cate string COMMENT ‘类别’,
pnum int ,
description string
)
row format delimited fields terminated by “,”
location “/ABC”;
6.什么是内部表,外部表, 以及他们的应用场景
内部表和外部表
内部表 管理表 默认的表类型
删除表的时候 存储数据的文件夹会被删除
外部表
删除表的时候 存储数据的文件夹不会被删除
内部表:业务表使内部表用
外部表:原始数据,公用的数据使用外部表
//默认的内部表,删除表会删除数据