Hive知识体系梳理

整理归纳知识,形成知识体系,是高效学习非常重要的一个环节。高效的归纳总结,可以让我们轻松统揽全局,掌握知识。

目录

 

1、Hive基本概念

2、hive的安装部署

3、Hive的数据类型

4、DDL数据

5、DML 数据操作 (重点)

6、查询(重点)

7、函数

8、压缩和存储

9、 企业级调优


1、Hive基本概念

     1.1 hive是什么

          Hive:由 Facebook 开源用于解决海量结构化日志的数据统计。 
          Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。 
          本质是:将 HQL 转化成 MapReduce 程序 

        (1)Hive 处理的数据存储在 HDFS 
        (2)Hive 分析数据底层的默认实现是 MapReduce 
        (3)执行程序运行在 Yarn 上

     1.2 hive的优缺点

     1.3 hive的架构原理

 

元数据(metastore)包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等
默认元数据存放在自带的derby数据库,可以自己修改为mysql数据库

     1.4 hive和数据库的比较

          查询语言、数据存储位置 、数据更新 、索引 、执行 、执行延迟 、可扩展性 、数据规模 

2、hive的安装部署

      2.1 安装配置

      2.2 hive的基本操作

           show databases、use default、show tables、create table student(id int, name string)、show tables、desc student、

           insert into student values(1000,"ss")、select * from student、quit

      2.3 将本地(hdfs)文件导入 Hive 

             load data local inpath 本地文件路径 into table hive表名; 

             去掉local可以导入hdfs文件路径、into前面加上overwrite表示覆盖原有的数据追加

      2.4 安装mysql

             安装mysql服务器、安装mysql客户端、远程登入

      2.5 Hive 元数据配置到 MySql 

            就可以多个窗口开启hive

      2.6 Hive的jdbc访问

      2.7 Hive 常用交互命令 

            “-e”不进入 hive 的交互窗口执行 sql 语句、“-f”执行脚本中 sql 语句 

       2.8 Hive 其他命令操作 (不常用)

             在 hive cli 命令窗口中如何查看本地或 hdfs 文件系统 、在 hive 中输入的所有历史命令 

       2.9 Hive 常见属性配置 

              Hive 数据仓库位置配置 、查询后信息显示配置 、Hive 运行日志信息配置 、参数配置方式 

3、Hive的数据类型

      3.1 基本数据类型

           常用的数据类型:int、bigint、double、string

      3.2 集合数据类型

           struct、map、array

           集合数据类型建表示例:

           create table test(

           name string,

           friends array<string>,

           children map<string, int>,

           address struct<street:string, city:string>

           )

          row format delimited  fields terminated by ','

          collection items terminated by '_'

          map keys terminated by ':'

          lines terminated by '\n'; 

字段解释: row format delimited fields terminated by ','  -- 列分隔符 collection items terminated by '_'   --MAP STRUCT 和 ARRAY 的分隔符(数据分割 符号) map keys terminated by ':'    -- MAP 中的 key 与 value 的分隔符 lines terminated by '\n';     -- 行分隔符 

访问array、map、struct数据:select friends[1],children['xiao song'],address.city from test where name="songsong";

      3.3 类型转换

             隐式转换(小范围转大范围)、case转换(大范围转小范围,数据缺失)

            例如 CAST('1' AS INT)将把字符串'1' 转换成整数 1;如果强制类型转换失败,如执行CAST('X' AS INT),表达式返回空值 NULL。 

4、DDL数据

      4.1 创建数据库

            创建一个数据库,指定数据库在 HDFS 上存放的位置 :create database if not exists db_hive2 location '/db_hive2.db'; 

      4.2 查询数据库

            show databases、desc database db_hive、 desc database extended db_hive、use db_hive; 

      4.3 修改数据库

            alter database hive set dbproperties('createtime'='20170830'); 

      4.4 删除数据库

            drop database db_hive2(cascade); 

      4.5 创建表

            create [external] table [if not exists] table_name

            [(col_name data_type [comment col_comment], ...)]

            [comment table_comment]

            [partitioned by (col_name data_type [comment col_comment], ...)]

            [clustered by (col_name, col_name, ...)

            [sorted by (col_name [asc|desc], ...)] into num_buckets buckets]

            [row format row_format]

            [stored as file_format]

            [location hdfs_path] 

      4.6 管理表(内部表)和外部表

      4.6.1 external关键字

               因为表是外部表,所以 Hive 并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。 

       4.6.2 管理表与外部表的互相转换 

                alter table 表名 set tblproperties('EXTERNAL'='TRUE'); 

        4.7 分区表(重点)

        4.7.1 概念

                 分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。 

        4.7.2 partitioned by关键字

        4.7.3 导入数据

                 load data local inpath 本地数据路径 into table 表名 partition(month='201709');

         4.7.4 查询分区表中数据 

                 select * from dept_partition where month='201709'; 

         4.7.5 增加分区

                 alter table dept_partition add partition(month='201706') ;

         4.7.6 删除分区

                 alter table dept_partition drop partition (month='201704'); 

         4.7.7 查看分区表有多少分区 

                 show partitions dept_partition; 

         4.7.8 查看分区表结构 

                 desc formatted 分区表名; 

         4.7.9 创建二级分区表 

                   partitioned by (month string, day string) 

          4.7.10 把数据直接上传到分区目录上,让分区表和数据产生关联的三种方式 

                   上传数据后修复(msck repair table 表名;)、上传数据后添加分区(alter table dept_partition2 add partition(month='201709',  day='11');) 、创建文件夹后 load 数据到分区(load data local inpath '/opt/module/datas/dept.txt' into table 表名(month='201709',day='10');load会默认创建分区字段元数据信息) 

         4.8 修改表

               重命名表 (alter table 表名 rename to new_表名)、增加/修改/删除表分区 、增加/修改/替换列信息 、删除表() 

5、DML 数据操作 (重点)

      5.1 数据导入的方式

            load、insert、根据查询结果建表、直接hdfs dfs -put上传数据至hive目录、import

      5.2 数据导出

            insert overwrite local directory 本地路径 row format delimited fields terminated by '\t' 查询语句、dfs -get hdfs路径 本地路径、export

      5.3 sqoop导入和导出

      5.4 清除表中数据(Truncate) 

6、查询(重点)

      6.1 基本查询

             全表查询、选择特定列查询 、别名查询(在嵌套查询中用的最多)、算术运算符(加减乘除求余)、常用函数(count、sum、avg、min、max)、limit

      6.2 where查询

            where后面可以添加:比较运算符(Between/In/ Is Null)、Like 和 RLike 、逻辑运算符(And/Or/Not)

      6.3 分组

              Group By、Having、;having(针对查询结果中的列发挥作用,筛选数据)

      6.4 Join语句(只支持等值join) 

             内连接、左外连接、右外连接、满外连接、多表连接、笛卡尔积、

      6.5 排序

             全局排序(Order By)、每个 MapReduce 内部排序(Sort By) 、分区排序(Distribute By) 、 Cluster By 

      6.6 分桶及抽样查询 

             开启分桶表设置、创建分桶表 、分桶抽样查询 

      6.7 其他常用查询函数 

            空字段赋值 、时间类 、CASE WHEN 、行转列 、列转行 、

           窗口函数 (重点):OVER()、CURRENT ROW、n PRECEDING、n FOLLOWING、UNBOUNDED、LAG(col,n)、LEAD(col,n)、NTILE(n)

           排名函数:RANK() 、DENSE_RANK() 、ROW_NUMBER() 

7、函数

      7.1 系统内置函数 

      7.2 自定义函数 

             UDF、UDTF、UDAF

      

8、压缩和存储

      8.1 Hadoop 源码编译支持压缩 (lzo和snappy)

      8.2 Hadoop 压缩配置 

      8.3 开启 Map 输出阶段压缩 

      8.4 开启 Reduce 输出阶段压缩 

      8.5 文件存储格式

            行存储:text、sequencefile

            列存储:orc、parquet

      8.6 存储和压缩结合 

9、 企业级调优

       9.1 Fetch 抓取 

       9.2 本地模式 

       9.3 表的优化

             小表join大表(在 map 端完成 reduce)、大表 Join 大表 (空 KEY 过滤、空 key 转换 ) 、MapJoin 、 Group By (先在 Map 端进行部分聚合,最后在 Reduce 端得出最终结果)、 使用Group By代替Count(Distinct) 去重统计 、尽量避免笛卡尔积、行列过滤 、动态分区调整 、分桶 、分区 

       9.4 MR 优化 

             合理设置 Map 数 、小文件进行合并、复杂文件增加 Map 数 、合理设置 Reduce 数 

       9.5 并行执行 

       9.6 严格模式 

       9.7 JVM 重用 

       9.8 推测执行 

       9.9 压缩 

       9.10 执行计划(Explain)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值