020 Hive的分区表创建 Hive的分区

(分到不同的目录去)第一行最后
在这里插入图片描述
分区的关键字 partitioned by
上面的语句 year就是表外字段
id comment dt 就是表内字段
在这里插入图片描述

hive的分区表创建

create table if not exists comm(
id int,
comment String,
dt String
)
partitioned by(year String)
row format delimited fields terminated by '\t'
;

在这里插入图片描述
hdfs dfs -ls /user/hive/warehouse/olqf.db/comm
现在没东西
在这里插入图片描述
加载 三部分分别为三个文件 d1 d2 d3

1	this is comment1	2015-10-10
2	this is comment2	2015-10-10
3	this is comment3	2015-10-10

4	this is comment1	2016-11-13
5	this is comment2	2016-11-15
6	this is comment3	2016-11-16

7	this is comment1	2017-10-10
8	this is comment2	2017-10-10
9	this is comment3	2017-10-10
load data local inpath '/home/olddata/d1' into table comm partition(year='2015');
load data local inpath '/home/olddata/d2' into table comm partition(year='2016');
load data local inpath '/home/olddata/d3' into table comm partition(year='2017');

在这里插入图片描述
现在就有分区了
在这里插入图片描述
查询下结果
在这里插入图片描述
这样如果单个查询更快
在这里插入图片描述
创建两级分区

create table if not exists comm1(
id int,
comment String,
dt String
)
partitioned by(year String, month int)
row format delimited fields terminated by '\t'
;

在这里插入图片描述

load data local inpath '/home/olddata/d1' into table comm1 partition(year='2015',month=10);
load data local inpath '/home/olddata/d2' into table comm1 partition(year='2016',month=11);

在这里插入图片描述
在这里插入图片描述
两级目录
在这里插入图片描述
真正的数据
在这里插入图片描述
也可直接查询
在这里插入图片描述

对分区进行修改:
显示分区:show partitions comm1;
在这里插入图片描述
添加分区:alter table comm add partition(year=“2019”) partition(year=“2020”)
在这里插入图片描述
修该已经存在的分区:
修改元数据:
alter table comm partition(year=“2020”) rename to partition(year=“2018”)

在这里插入图片描述
指定分区对应到已有的数据:
alter table comm partition(year=“2018”) set location ‘hdfs://qf/user/hive/warehouse/olqf.db/comm/year=2016’;

现在2018分区没有数据

在这里插入图片描述
插曲
在这里插入图片描述
访问出错
之前的alter table comm partition(year=“2018”) set location ‘hdfs://qf/user/hive/warehouse/olqf.db/comm/year=2016’;

写成alter table comm partition(year=“2018”) set location ‘hdfs://hadoop01::9000/user/hive/warehouse/olqf.db/comm/year=2016’;

应该写成qf
因为我们使用的hadoop是高可用ha
没有使用普通的

添加分区时直接指定数据:
alter table comm add partition(year=“2021”) location ‘hdfs://qf/user/hive/warehouse/olqf.db/comm/year=2016’;

在这里插入图片描述
然后看看是否添加了数据
在这里插入图片描述
删除分区
alter table comm drop partition(year=“2021”);
alter table comm drop partition(year=“2020”), partition(year=“2019”);

注意第二句 删除多个分区时间隔用逗号

而添加多个分区时用空格分隔

在这里插入图片描述
在这里插入图片描述
2021 2020 2019 都没了
在这里插入图片描述

====================================================================

Hive的分区

静态分区:对分区已经知道,并可以使用load方式加载数据
动态分区:对于分区未知,同时不能使用load方式加载数据
混合分区:静态和动态同时有

  • 在这里插入图片描述
  • 在这里插入图片描述
    在这里插入图片描述

创建表 加载数据 查看

create table if not exists comm_tmp1(
id int,
comment String,
year String,
month String
)
row format delimited fields terminated by '\t'
;

load data local inpath '/home/olddata/ct' into table comm_tmp1;

在这里插入图片描述
在这里插入图片描述
再创建一个comm3分区表
然后我们看一下
在这里插入图片描述

动态分区加载数据的方式

在这里插入图片描述
这里告诉你 如果要这样动态加载
需要将它设置为非严格模式
set hive.exec.dynamic.partition.mode=nonstrict;

在这里插入图片描述
再次加载
在这里插入图片描述
可以了
查看结果 没问题
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
结果文件
在这里插入图片描述
混合分区:

create table if not exists comm4(
id int,
comment String
)
partitioned by(year String, month int)
row format delimited fields terminated by '\t'
;

先创建混合分区

在这里插入图片描述
然后要设置为严格模式 然后再加载数据 这里我们混合加载 指定年份但没指定月份
可以的

set hive.exec.dynamic.partition.mode=strict;

如果为strict模式 必须要至少指定一个静态 如果全部都是动态的 必要要nonstrict

insert into table comm4 partition(year=2016,month)
select id, comment, month from comm_tmp1
where year=2016
;

在这里插入图片描述
查看结果
在这里插入图片描述

====================================================


在这里插入图片描述
在这里插入图片描述

先设为严格模式再去尝试查询

在这里插入图片描述

2.分区不带where条件并且where条件中不带分区字段来过滤

同样select * from comm;也不允许你查
需要带where条件
select * from comm where year=2017;

hive在严格模式下 你的查询不能没有分区字段来过滤

在这里插入图片描述

3.排序不带limit:

即带order by 的查询 在严格模式下 必须加入limit

select *
from comm3
where year = 2016
order by id desc
limit 2
;

不带limit就failed 带了就好了
在这里插入图片描述
这是结果
在这里插入图片描述


以上就是hive严格模式下阻止的五类查询

1.笛卡尔积查询(带join的)
2.分区不带where条件并且where条件中不带分区字段来过滤
3.order by排序不带limit:

在这里插入图片描述
还有两个就是
bigints 和 strings 作比较
bigints 和 doubles 作比较
这两者都不让查询

以及hive的静态分区 动态分区 混合分区 几个属性的设置 以及每一个的意义

版权声明:本文为C_time原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/C_time/article/details/91063356

智能推荐

Hibernate学习总结(一)

一、Hibernate简介 一个持久层的ORM框架。ORM:Object Relational Mapping(对象关系映射)。指的是将一个Java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表。 二、Hibernate入门 1、创建一个项目,引入jar包 hibernate用到的jar包 2、创建表 3、创建实体类 4、创建映射(*****) 映射需要通过XML...

Linux系统NFS

文章目录 1. nfs简介 1.1 nfs特点 1.2 使用nfs的好处 1.3 nfs的体系组成 1.4 nfs的应用场景 2. nfs工作机制 2.1 RPC 2.2 NIS 2.3 nfs工作机制 3. exports文件的格式 4. nfs管理 5. 作业 5.1手动搭建一个nfs服务器 5.1.1开放/nfs/shared目录,供所有用户查阅资料 5.1.2 开放/nfs/upload目...

关于java中String,StringBuffer,StringBuilder的区别以及StringBuffer,StringBuilder的安全性问题

这里的结果就是正确的然后我们来看他的append方法 它在前边加了一个synchronized来修饰,相当于同时只能有一个线程来访问他,这样就不会产生上边的问题但同时他的效率也就比StringBuilder低,...

Django连接现有mysql数据库

1、打开cmd后cd到项目位置 2、建立项目 django-admin startproject test2 3、编辑项目中的配置文件, mysite/settings.py ,告诉Django你的数据库连接参数和数据库名。具体的说,要提供 DATABASE_NAME , DATABASE_ENGINE , DATAB...

ShareSDK新浪微博登录时报错error:redirect_uri_mismatch

今天用 ShareSDK 做第三方登录的时候碰到个问题,明明在微博平台的应用审核已经通过了,但是调用登录接口的时候一直报错,错误如下: 出现这个错误是因为在微博开放平台上没有设置回调地址,或者设置的回调地址与本地XML中的地址不一致。 在sharesdk.xml文件当中对于微博的设置: 其中RedirectUrl为设置的回调地址,这里的地址必须要与微博开发平台设置的地址相同,否则就会出现上面的错误...

猜你喜欢

python解析网络封包方法

2019独角兽企业重金招聘Python工程师标准>>> 在使用Python解析网络数据包时,使用网络字节序解析,参见下表。 C语言的数据类型和Python的数据类型对照表请参见下表。 接下来对封包与解包进行举例说明。 version type id content unsigned short unsigned short unsigned int unsigned int 封包...

python3:时间方法,异常处理,系统文件相关模块(os)

文章目录 时间方法 time模块 时间表示方法: time模块的方法 datetime模块 异常处理 触发异常 创建mydiv.py脚本,要求如下: 创建myerror.py脚本,要求如下: os模块 实现ls -R(os.walk) os.path pickle模块 记账脚本 时间方法 time模块 时间表示方法: 时间戳:自1970-1-1 0:00:00到某一时间点之间的秒数 UTC时间:世...

负载均衡群集——LVS+DR模型

一、实验组成 调度器 192.168.100:41 web1 192.168.100:42 web2 192.168.100.43 NFS共享服务器 192.168.100.44 二、实验拓扑 三、实验配置 3.1在调度器配置:192.168.100.41 配置虚拟IP地址(VIP) 调整/proc响应参数 对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭...

adb无线连接时appium找不到设备

问题描述 以前使用USB连接真机,运行appium时一直正常,连接参数如下: 最近为了方便,使用adb无线连接真机,adb版本为1.0.40,真机安卓版本10,连接后,通过adb devices能够查看到连接的设备: adb无线连接是正常的,但每次运行时appium都找不到无线连接的设备,陷入重启adb循环: 解决流程 1.因为是没找到设备,所以在appium连接参数中增加了"udid&...

Mybatis_CRUD(基于xml的增删改查操作)

dao IUserDao domain User QueryVo SqlMapConfig.xml com.itheima.dao IUserDao.xml com.itheima.test 执行原理图:...