hive load data inpath 空目录_hive学习笔记之四:分区表
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类和汇总,及配套源码,涉及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;OKname string age int city string # Partition Information # col_name data_type comment city string Time 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.namet9.aget9.citytom11guangzhoujerry12guangzhoutom11shenzhenjerry12shenzhenTime 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-x 3 hadoop supergroup 16 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.namet10.aget10.provincet10.citytom11guangdongguangzhoujerry12guangdongguangzhoutom11guangdongshenzhenjerry12guangdongshenzhentom11shanxihanzhongjerry12shanxihanzhongtom11shanxixianjerry12shanxixianTime taken: 0.129 seconds, Fetched: 8 row(s)
- 查看hdfs文件夹,如下图,一级目录是province字段的值:
- 打开一个一级目录,如下图,可见二级目录是city的值:
- 查看数据:
[hadoop@node0 bin]$ ./hadoop fs -cat /user/hive/warehouse/t10/province=shanxi/city=hanzhong/009.txttom,11jerry,12
- 以上就是静态分区的基本操作,可见静态分区有个不便之处:新增数据的时候要针对每一个分区单独使用load命令去操作,这时候使用动态分区来解决这个麻烦;
动态分区
- 动态分区的特点就是不用指定分区目录,由hive自己选择;
- 执行以下命令开启动态分区功能:
set hive.exec.dynamic.partition=true
- 名为hive.exec.dynamic.partition.mode的属性,默认值是strict,意思是不允许分区列全部是动态的,这里改为nostrict以取消此禁制,允许全部分区都是动态分区:
set hive.exec.dynamic.partition.mode=nostrict;
- 建一个外部表,名为t11,只有四个字段:
create external table t11 (name string, age int, province string, city string) row format delimited fields terminated by ',' location '/data/external_t11';
- 创建名为011.txt的文件,内容如下:
tom,11,guangdong,guangzhoujerry,12,guangdong,shenzhentony,13,shanxi,xianjohn,14,shanxi,hanzhong
- 将011.txt中的四条记录载入表t11:
load data local inpath '/home/hadoop/temp/202010/25/011.txt' into table t11;
- 接下来要,先创建动态分区表t12,再把t11表的数据添加到t12中;
- t12的建表语句如下,按照province+city分区:
create table t12 (name string, age int) partitioned by (province string, city string)row format delimited fields terminated by ',';
- 执行以下操作,即可将t11的所有数据写入动态分区表t12,注意,要用overwrite:
insert overwrite table t12 partition(province, city) select name, age, province, city from t11;
- 通过hdfs查看文件夹,可见一级和二级子目录都符合预期:
- 最后检查二级子目录下的数据文件,可以看到该分区下的记录:
[hadoop@node0 bin]$ ./hadoop fs -cat /user/hive/warehouse/t12/province=guangdong/city=guangzhou/000000_0tom,11
至此,分区表的学习就完成了,希望能给您一些参考;
欢迎关注我的公众号:程序员欣宸
hive load data inpath 空目录_hive学习笔记之四:分区表相关推荐
- hive load data inpath 空目录_Hive内部表 | 每日五分钟学大数据
上一篇说的是外部表,当把EXTERNAL关键字去掉的时候就是内部表了.为什么叫内部表,因为这种表,Hive会(或多或少地)控制着数据的生命周期. 如果你熟悉Hive那你一定知道,Hive默认情况下会将 ...
- hive load data inpath 空目录_走近大数据之Hive进阶(一、Hive数据的导入)
一.使用Load语句进行数据的导入 -语法: LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE]INTO TABLE tablename [PARTITIO ...
- hive load data inpath ‘‘ overwrite into 坑
load data inpath 'dataDir/dim_url.csv' overwrite into table dim_url partition(day='2021-03') 注意: 1,以 ...
- hive 字符串替换指定字符_hive学习笔记:substr()——字符串截取
在hive中,可以使用substr()函数截取字符串,比如从日期中截取年份.月份等信息. 还有一个函数是substring(),用法基本上与substr()相同,至于区别这里暂时不做研究. subst ...
- hive load data外部表报错_从0开始学大数据-Hive基础篇
Hive起源于Facebook,是基于 Hadoop HDFS 分布式文件系统的分布式 数据仓库 架构.它为数据仓库的管理提供了许多功能:数据ETL(抽取.转换和加载)工具.数据存储管理和大型数据集的 ...
- hive load data出错
今天往hive导数据时发生了个错误 hive> load data inpath '/user/tmp/uids.test_copy_3.txt' into table userfeature. ...
- load data inpath的实践
有个需求,需要在hive表里面追加数据,数据是历史数据,是业务方给的一个csv文件, 思路,考虑使用load data inpath,把历史数据导入到hive表里面 步骤: 1.利用已经搭建好的大数据 ...
- Hive - Load Data 数据过长或过短
一.引言 Hive 可以通过 load data inpath 加载本地或者 hdfs 的数据到 hive 表中,有时会出现生成数据长于 hive 表字段或者短于 hive 表字段的情况,经过测试,两 ...
- oracle拆分分区语法详解大全_学习笔记:Oracle分区表 添加 删除 合并 删除 交换 拆分等分区表的操作案例...
天萃荷净 Oracle分区表管理,记录关于Oracle分区表的管理案例:创建.删除.合并.拆分.交换.更改分区表的操作方法 1.添加创建分区表 1.1)增加分区(add partition) 语法是: ...
最新文章
- idea 自动生成构造以及get、set方法
- python turtle循环图案-Python绘图Turtle库详解
- 题目1507:不用加减乘除做加法
- 平安城市与智慧城市对接的关键要素
- [C++11]initializer_lisr模板类的使用
- Markdown--编辑表格与矩阵
- animition动画的加入
- 产生随机数(rand()函数和srand()函数)的含义
- linux 小巧的浏览器,崇尚简约 六款小体积浏览器推荐
- android rom root权限,教你刷机包获取ROOT权限的方法
- COMFORT 美食 | 四季银河,心飨臻味
- 经济学人The Economist学习(笔记词汇)Day1
- 监听滚动事件 实现动态锚点
- JEPF软件快速开发平台学习心得之请假单功能的完成(一)
- 分区表与普通表之间切换的报错
- java金花_炸金花绝对大小计算、比较及排序算法(Java),包含花色参与和不参与大小比较...
- 20_外星人游戏项目03——
- 杭电2019计算机分数线,杭州电子科技大学2019年各省录取分数线及各专业录取分数线...
- 三种架构模式——MVC、MVP、MVVM
- 中国时隔两年再次全面降息 专家称或刺激楼市回暖
热门文章
- 阿里立秋:AI千人千面,淘宝如何做智能化UI测试?
- Spring Cloud 入门 之 Eureka 篇(一)
- matplotlib 简单试用
- 再谈迭代器,生成器,yield,及和类的使用
- GC参考手册 —— GC 调优(基础篇)
- 探讨 .NET 4 新增的 SortedSet 类
- SparkMLlib回归算法之决策树
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”...
- 制作MACOSX10.10.3/10.9安装启动盘U盘的教程
- 用递归将嵌套的JSON对象遍历出来,转为二维数组