Hive概念01-内外表区别、分区表、分桶表的使用

一、Hive内部表和外部表概念?区别?最适合的应用场景?

首先弄清楚什么是元数据和表数据:元数据就是表的属性数据,表的名字,列信息,分区等标的属性信息,它是存放在RMDBS传统数据库中的(如,mysql)。表数据就是表中成千上万条数据了。

hive的存储过程:启动hive时,会初始化hive,这时会在mysql中生成大约36张表(后续随着业务的复杂会增加),然后创建表,会在mysql中存放这个表的信息(不是以表的形式存在的,而是把表的属性以数据的形式放在mysql中,这样在hive中使用sql命令一样是能够查到这张表的)。然后把本地的文本文件使用hive命令格式化导入到表中,这样这些数据就存放到hdfs中,而不是在mysql或hive中。

因此:Hive内部表和外部表概念?区别?最适合的应用场景?
表结构都是由hive控制的,但是数据的控制权和删除表产生的结果不同:
数据控制权:内部表由hive控制数据,存储在对应数据库(MySQL等)文件夹下的子文件夹;外部表保存在hdfs,hbase等指定位置的路径
删除表产生的结果:内部表删除表结构和表数据;外部表只删除表结构,数据不会被删掉,并且如果重建了表结构,数据依然在表里。

二、Hive分区表的作用?静态分区和动态分区的区别
建表方式一致
1、作用:hive分区是将数据分在不同的文件夹,在查询时通过where子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多,避免了遍历全表
区别:分区和模式不同,载入数据方式不同
2、静态分区:

  • 动态分区模式:默认的是动态分区关闭,且模式严格
  • 载入数据方式:通过load方式一次一个分区装载数据
    创建分区:alter table 表名 add partition(字段名=’…’ …);
    加载数据:load data [local] inpath ‘…’ [overwrite] into table 表名 partition(字段名=’…’ …)

3、动态分区:

  • 动态分区模式:需要手动开启动态分区且设置模式为非严格
set hive.exec.dynamic.partition=true;
set hive.execdynamic.partition.mode=nonstrict;
  • 载入数据方式:
    通过二级转化方式(查询的结果集)一次性添加多个分区数据
create table 表名 ...
load ... into table
insert into table 分区名 partition(分区名 ...) select ... from 表名;
  • 案例:
insert into dynamic_people partition(year,month) 
select id,name,age,start_date,year(start_date),month(start_date) from people;

三、分桶抽样是怎么做的

  • 概念:分桶对应于HDFS中的文件,更高的查询处理效率,使抽样(sampling)更高效。一般根据"桶列"的哈希函数将数据进行分桶
  • 分桶表设置:建表时hive自动根据bucket数量分桶:set hive.enforce.bucketing = true;并在 create 后row format前增加:clustered by (TANLE_NAME) into N buckets
  • 注意事项:必须使用INSERT方式加载数据
  • 分桶表抽样:
    select * from 表名 tablesample(bucket X out of Y on id) s;其中x为第几个部分,Y为分桶数量的整数倍或因子。如果Y为分桶数,则数据为第X个桶;如果Y为小于分桶数的因子,则数据为X+[n]Y的数据;如果Y为大于分桶数的倍数,则可以理解为重新分桶为Y,数据为Y中的第X个桶。

四、排序时如何把NULL值排到最后面?
五、having 和 where有什么不同?
六、Hive几种排序方式的区别?

七、.什么是视图?视图的应用场景有哪些?(10分)

  • 只给看特定列
  • 业务查询复杂,隐藏子查询

八、Hive的UDF函数需要继承哪一个类?重写哪一个方法?(10分)
继承UDF类,重写evaluate方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值