今天整理了一下hive的相关知识,其中包括hive原理及其表相关的一些内容,主要为个人理解:
1.hive是什么有什么用?

  • hive是数仓工具,可以抽取,转换,加载数据(ETL),
    Hive不适用于毫秒级的响应,因为其底层是调用MR程序在Yarn上运行操作hdfs上的结构化静态数据来实现处理数据的功能,但Hive将sql跟MR结合,可以实现多维度的查询,用户的学习成本较低,上手较为容易.

2.hive工作原理

  • Hive工作原理本质是将客户端发起的sql语句转换成底层的MR程序执行
  • (1)hive接收到客户端发起的请求(sql语句)
  • (2)根据请求获取到mysql中表的元数据信息
  • (3) 将mysql语句解析,编译,优化,转换成MR语句
  • (4)转换成的MR程序在YARN上执行,操作hdfs完成客户端需求

3.hive查看数据库的属性

  • (1)先开启hdfs,yarn以及mysql服务
  • (2) 开启hiveserver2 &服务
  • (3)进入到beeline,开启远程连接客户端,连接hive服务!connect jdbc:hive2://linux01:10000
    (4)show databases;
    (5)desc database database_name;

4.怎么建表

  • (1) 先开启hdfs,yarn以及mysql服务 (2)开启hiveserver2 &服务
    (3)进入到beeline,开启远程连接客户端,连接hive服务!connect jdbc:hive2://linux01:10000
    (4)create table table_name( 字段 类型. 字段 类型, … ) row format delimited
    fields terminated by “分隔符”

5.怎么导入数据?
导入数据有四种方式:

(1)将数据文件直接传输到表的目录下 **(2)将本地的数据上传到表的目录下,在远程连接的界面执行load data local inpath “” into table tablename;**这种方式用的最多 (3)将hdfs中的数据移动到表的目录下, 在远程连接的界面执行load data inpath “” into table tablename; (4)创建表时,将表提取数据的目录(location “path”)设置成数据所在的目录

6.什么是内部表,外部表, 以及他们的应用场景

  • 外部表是在创建表时,在create和table之间加上external关键字,声明此表为外部表
    外部表的特点是删除表时,表中的数据不会一起删除,即不会影响其他共享此数据表的相关操作,一般此表适用于原始数据或公用数据的场景
    默认创建不加external关键字的表为内部表 内部表又称管理表,特点是在删除表时,表中的数据会跟着一起删除
    此表适用于业务数据的场景,即用完之后可以删除的情况
    7.什么是分区表,分区表有什么作用?
  • 分区就是将数据根据查询的维度分文件夹存储管理 分区表就是实现了分区功能的表
    分区表在查询数据的时候更高效,普通表查询数据需要检索表目录下所有的文件,再筛选出符合条件的数据,而分区表可以直接指定分区查询,效率更高.
    8.创建分区表 ,二级分区表 ,导入数据
1)创建分区表
create table tb_name(
字段 类型,
字段 类型,
...
)
partitioned by(字段 类型)
row format delimited fields terminated by “”;
load data local inpath  “”  into table tb_name partition(字段=”’’);
2)创建二级分区表
create table tb_name(
字段 类型,
字段 类型,
...
)
partitioned by(字段 类型,字段 类型)
row format delimited fields terminated by “”;
load data local inpath  “”  into table tb_name partition(字段=”’’,字段=””);

9.数据导入方式总结
数据导入有以下几种方式:

1)基本方式
 将数据文件直接上传到表的目录下
 从本地将数据文件上传到表的目录下
 Load data local inpath “” into table tb_name;
 从hdfs中将文件移动到表的目录下
 Load data inpath “”into table tb_name;
 建表时直接指定表提取数据的目录
 2)Insert语法(增量)
 导入一条数据
 Insert into tb_name values(v1,v2…);
 导入多条数据
 Insert into tb_name values(v1,v2…),values(v1,v2…)…;
 导入另一个表格数据
 Insert into tb_name select * from tb_name;
 覆盖导入数据
 Insert overwrite tb_name select * from tb_name;
 3)create语法(全量)
 字段 类型,
 字段 类型,
 …
 )as
 Create table tb_name()
 as
 Select * from tb_name;
 4)import导入
 首先export导出
 Export table tb_name to “”;
 再import导入
 Import table tb_name from “”;
 注:导入的数据只能是上一步导出的数据
 10.导出方式总结
 1)导出到本地
 不带分隔符:
 Insert overwrite local directory “”
 Select * from tb_name;
 带分隔符:
 Insert overwrite local directory “”
 Row format delimited fileds terminated by “\t”
 Select * from tb_name;
 2)导出到hdfs
 不带分隔符:
 Insert overwrite directory “”
 Select * from tb_name;
 带分隔符:
 Insert overwrite directory “”
 Row format delimited fileds terminated by “\t”
 Select * from tb_name;
 3)hdfs命令
 Hdfs dfs -get “src” “local”;
 4)hive命令
 执行sql语句
 Hive -e “sql”
 执行sql文件
 Hive -f “filename”
 5)Export
 Export table tb_name to “”;
 6)Sqoop
 用于将hdfs中的结构化数据导入到mysql表格中,也可以将mysql表格中的数据导入到hdfs中