hive编程指南-个人不会的知识点记录

本文介绍了Hive数据库的基础知识,包括数据类型、表定义、数据操作及查询优化技巧等内容。详细探讨了如何通过索引、模式设计和调优策略提高Hive查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

买这本书没有认真看完过,重新看下,记录下自己不会或者之前不用且模棱两可的知识点。

第三章:数据类型

3.1  hive的基本数据类型,是对java数据类型的实现,在hive中,如果是float和double数据类型比较,hive会隐式把float转换成double,即向上取

3.2  集合数据类型,struct、map、array三种集合数据类型

        struct:与c语音的struct或者"对象,{"col1":"a","col2":123}:  主要函数:1、struct    2、select named_struct('user_id',10001,'user_name','LiLei') 3、inline(将给定的STRUCT数组展开。每个数组元素对应一行,每行每个STRUCT元素对应一列);

        map: map是一组键值对,{k11:86, k21:15},可以使用may_keys,map_values取出key或者value,返回值为array

        array:是一组有相同类型和名称的变量的集合,变量称为数组的元素。常用方法有array_contains、array_intersect(计算两个ARRAY的交集),和java的array对应

第四章:数据定义

4.3 创建表

    建表时可以指定if not exists,如果有相同表名的表了,hive就会忽略后面的执行语句

   describe formatted table_name;

第五章:数据操作

5.2 分区操作

set hive.exec.max.dynamic.partitions.pernode=100;      每个mapper或者reducer可以创建的最大的动态分区个数

set hive.exec.max.dynamic.partitions=1000;                  一个动态分区语句可以创建的最大动态分区个数

第六章:查询

6.1 select语句

set hive.map.aggr=true;   会触发在map阶段的"顶级"聚合过程

6.4.2 join优化

join顺序是从上到下的

当对3个或者更多的表进行join时,如果每个on语句都用相同的连接键的话,那么只会产生一个mapreduce任务

6.4.7 left semi join

满足等值条件下左表的记录(a left b where b.col is null差不多),但是这个更高效,join时找到了等值条件就停止扫描

6.5 sort by 

对某些字段单独排序,全局不唯一

6.7 cluster by

distribute by cola order by cola = cluster by cola(升序情况下)

第八章:索引

hive只有有限的索引功能,hive中没有普通关系型数据库中键的概念,但是可以对一些字段建立索引来加速某些操作,一张表的索引数据存储在另一张表中。

创建索引也需要消耗计算资源

8.1 bitmap索引(之前见别的人面试中说过这个优化,记录下)

bitmap索引普遍应用于重排后值较少的列

创建语句:create index tmp_index on table dim_trd_goods(goods_id) as 'bitmap' in table dim_trd_goods_index_table;

8.3 显示索引

show formatted index on dim_trd_goods;

第九章:模式设计

9.2 关于分区

分区过多会导致创建大量的非必须的hadoop文件和文件夹,一个分区就对应着一个包含有多个文件的文件夹。长此以往,会超出nameNode对系统云数据信息的处理能力。nameNode会将系统文件的元数据信息保存在内存中。

理想的分区方案是系统不应该导致产生太多的分区和文件夹目录,每个分区下的文件应该是文件系统中块的大小的若干倍。(一般是128M)

第十章:调优

10.1 explain

看hive的执行计划:explain select count(id) from bigdata2c.tmp_xuemin_community;(阿里云环境下)

TS即TableScan

In Job job0:
root Tasks: M1
In Task M1:
    Data source: bigdata2c.tmp_xuemi_community
    TS: bigdata2c.tmp_xuemi_community
        AGGREGATE:
         UDAF: COUNT(id) (__agg_0_count)[Complete]
            SEL: __agg_0
                FS: output: Screen
                    schema:
                      __agg_0 (bigint) AS _c0

10.5 本地模式

小数据集下省去了触发查询的执行任务时间

set hive.exec.mode.local.auto=true;

10.6 并行执行

set hive.exec.parallel=true;

一般作用于union all查询

10.7 严格查询模式

1、分区表必须指定分区

2、order by 必须添加limit

3、限制笛卡尔积的查询

10.8 调整mapper和reducer个数

--设置每个reduce锁接受的数据量大小,默认是1G
set hive.exec.reducers.bytes.per.reducer=500000000;

--设置reduce数量
set mapred.reduce.tasks=20;

10.9 JVM重用

适用于小文件场景或task特别多的场景

hadoop的默认配置通常是使用派生JVM来执行map和reduce任务的,这时JVM的启动过程可能会造成相当大的开销,JVM重用可以使得JVM实例在同一个job中重新使用n次。

缺点是:开启JVM重用将会一直占用使用到的task插槽,以便进行重用,直到任务完成后才能释放。如果某个job中有某几个reduce task执行时间要比其他的reduce task执行时间多得多的话(长尾),保留的插槽会无法被其他的job使用,直到所有的task都结束了才会释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值