hive学习笔记之四:分区表
欢迎访问我的GitHub
内容:所有原创文章分类和汇总 , 及配套源码 , 涉及Java、Docker、Kubernetes、DevOPS等;
本篇概览本文是《hive学习笔记》系列的第四篇 , 要学习的是hive的分区表 , 简单来说hive的分区就是创建层级目录的一种方式 , 处于同一分区的记录其实就是数据在同一个子目录下 , 分区一共有两种:静态和动态 , 接下来逐一尝试;
静态分区(单字段分区)先尝试用单个字段分区 , t9表有三个字段:名称city、年龄age、城市city , 以城市作为分区字段:
- 建表:
create table t9 (name string, age int) partitioned by (city string)row format delimited fields terminated by ',';
- 查看:
hive> desc t9;OKnamestringageintcitystring# Partition Information# col_namedata_typecommentcitystringTime taken: 0.159 seconds, Fetched: 8 row(s)
- 创建名为009.txt的文本文件 , 内容如下 , 可见每行只有name和age两个字段 , 用来分区的city字段不在这里设置 , 而是在执行导入命令的时候设置 , 稍后就会见到:
tom,11jerry,12
- 导入数据的命令如下 , 可见导入命令中制定了city字段 , 也就是说一次导入的所有数据 , city字段值都是同一个:
load data local inpath '/home/hadoop/temp/202010/25/009.txt' into table t9 partition(city='shenzhen');
- 再执行一次导入操作 , 命令如下 , city的值从前面的shenzhen改为guangzhou:
load data local inpath '/home/hadoop/temp/202010/25/009.txt' into table t9 partition(city='guangzhou');
- 查询数据 , 可见一共四条数据 , city共有两个值:
hive> select * from t9;OKt9.name t9.age t9.citytom 11 guangzhoujerry 12 guangzhoutom 11 shenzhenjerry 12 shenzhenTime taken: 0.104 seconds, Fetched: 4 row(s)
- 前面曾提到分区实际上是不同的子目录 , 来看一下是不是如此 , 如下图 , 红框是t9的文件目录 , 下面有两个子目录city=guangzhou和city=shenzhen:
文章插图
- 查看子目录里面文件的内容 , 可见每条记录只有name和age两个字段:
[hadoop@node0 bin]$ ./hadoop fs -ls /user/hive/warehouse/t9/city=guangzhouFound 1 items-rwxr-xr-x3 hadoop supergroup16 2020-10-31 16:47 /user/hive/warehouse/t9/city=guangzhou/009.txt[hadoop@node0 bin]$ ./hadoop fs -cat /user/hive/warehouse/t9/city=guangzhou/009.txttom,11jerry,12[hadoop@node0 bin]$
以上就是以单个字段做静态分区的实践 , 接下来尝试多字段分区;静态分区(多字段分区)
- 新建名为t10的表 , 有两个分区字段:province和city , 建表语句:
create table t10 (name string, age int) partitioned by (province string, city string)row format delimited fields terminated by ',';
- 上述建表语句中 , 分区字段province写在了city前面 , 这就意味着第一级子目录是province值 , 每个province子目录下面再按照city值建立二级子目录 , 图示如下:
文章插图
- 第一次导入 , province=‘shanxi’, city=‘xian’:
load data local inpath '/home/hadoop/temp/202010/25/009.txt' into table t10 partition(province='shanxi', city='xian');
- 第二次导入 , province=‘shanxi’, city=‘xian’:
load data local inpath '/home/hadoop/temp/202010/25/009.txt' into table t10 partition(province='shanxi', city='hanzhong');
- 第三次导入 , province=‘guangdong’, city=‘guangzhou’:
load data local inpath '/home/hadoop/temp/202010/25/009.txt' into table t10 partition(province='guangdong', city='guangzhou');
- 第四次导入 , province=‘guangdong’, city=‘shenzhen’:
load data local inpath '/home/hadoop/temp/202010/25/009.txt' into table t10 partition(province='guangdong', city='shenzhen');
- 全部数据如下:
hive> select * from t10;OKt10.name t10.age t10.province t10.citytom 11 guangdong guangzhoujerry 12 guangdong guangzhoutom 11 guangdong shenzhenjerry 12 guangdong shenzhentom 11 shanxi hanzhongjerry 12 shanxi hanzhongtom 11 shanxi xianjerry 12 shanxi xianTime taken: 0.129 seconds, Fetched: 8 row(s)
- 查看hdfs文件夹 , 如下图 , 一级目录是province字段的值:
文章插图
- 打开一个一级目录 , 如下图 , 可见二级目录是city的值:
- 截图|笔记本截图快捷键是什么
- 电池容量|Windows 自带功能查看笔记本电脑电池使用情况,你的容量还好吗?
- 每日|【每日idea 分享】12月1日:带朋友一起网上购物;线上笔记本应用程序
- 用于|用于半监督学习的图随机神经网络
- 复习|期末整理复习笔记?MHMO魅蒙iPad专用笔助提高效率
- 今日|“舜网”学习强国号今日上线 济南报业全媒体矩阵再添新成员
- SK|SK电讯推出自研AI芯片SAPEON X220 深度学习计算速度是常用GPU 1.5倍
- 效果|这个让你相见恨晚的技巧,能让PPT排版更加有设计感,推荐学习
- 学习C语言的软件,就突然被我绿了?
- 学习python第二弹