建表

基本语句格式

CREATE [external] TABLE if not exists student #默认建立内部表,加上external则是建立外部表(id int COMMENT'学号',sname string COMMENT'用户名',age int COMMENT'年龄')#字段名称,字段类型,字段描述信息 COMMENT '记录学生学号'#表的描述信息PARTITION BY (department string COMMENT'根据部门分区')#设定分区的字段名称,此字段为全新字段,不得是表中任意字段;clustered BY (id,age)#指定分桶的字段,此字段必须来自表中字段;sorted BY (id ASC, age DESC)#指定一个桶内的排序规则(按照id升序,按照年龄降序);INTO 9 buckets #指定桶的个数为9ROW FORMAT delimited fields terminated BY '\t' #指定逗号为列分隔符collection items terminated by ',' #集合中的元素间的分隔符map keys terminated by ':' #元素内部的分隔符lines terminated BY '\n'#指定换行符为行分隔符stored AS textfile #指定最终表数据的存储格式,默认是textfile,还可以是rcfile(行列结合的格式)/parquet(压缩格式)location '/user/student' #指定hive上表在hdfs上的存储路径,默认的是配置路径下

1.内部表

CREATE TABLE if not exists student(id int ,sname string ,age int)
ROW FORMAT delimited FIELDS terminated BY ','
LINES terminated BY '\n';

2.外部表

CREATE external TABLE if not exists student(id int ,sname string ,age int)
ROW FORMAT delimited FIELDS terminated BY ','
LINES terminated BY '\n'
location '/user/student';

注意:

建外部表之后,若是从HDFS上加载数据的话(本质上是移动数据),会将数据从原路径移动到建表的路径下,

若两者路径不一致,则会导致其他部门的代码无法获取到数据,

因此,建立外部表的时候一定要location路径,且该路径与数据的原路径保持一致,

否则,会造成工作的重大失误!!!

3.分区表

CREATE TABLE if not exists student(id int ,sname string ,age int)
PARTITION BY (city string )
ROW FORMAT delimited FIELDS terminated BY ','
LINES terminated BY '\n';

4.分桶表

CREATE TABLE if not exists student(id int ,sname string ,age int)
clustered BY (id,age)
sorted BY (id ASC, age DESC)
INTO 9 buckets
ROW FORMAT delimited FIELDS terminated BY ','
LINES terminated BY '\n';

5.复制表

CREATE TABLE if not exists student01 LIKE student;
  • 复制一个表结构和student一样的表,不复制数据
  • 复制表student01是内部表还是外部表与student没关系,只与创建过程中是否指定了关键字external

6.查询表

CREATE TABLE if not exists student01 AS select id,sname FROM student;

查询出student表中的字段存入新建的表中,就叫查询表

数据类型详解

简单类型:

  • string
  • float
  • int (4个字节的整数)
  • bigint (8个字节的整数)
  • smallint (2个字节的整数)
  • tinyint (1个字节的整数)

复杂类型:

1)array:数组,存储多个元素,且元素是相同的数据类型,比如:beijing,shenzhen,wuhan

CREATE TABLE if not exists student(id int ,city array<string>)
ROW FORMAT delimited fields terminated BY '\t'
collection items terminated by ',';

查找时通过下标定位

SELECT city[0] FROM student; #输出:beijingSELECT city FROM student; #输出:[beijing,shenzhen,wuhan]

2)map:映射,比如:Chinese:80,math:90

CREATE TABLE if not exists student(id int ,score map<string,int>)
ROW FORMAT delimited fields terminated BY '\t'
collection items terminated by ','
map keys terminated by ':';

查找时通过key定位

SELECT score FROM student;
#输出:{Chinese:80,math:90} SELECT score['math'] FROM student; #输出:90

3)struct:结构体,存储多个元素,元素类型可以不同,比如:mengfan,man,180

CREATE TABLE if not exists student(id int ,remarks struct<name:string,sex:string,height:int>)
ROW FORMAT delimited fields terminated BY '\t'
collection items terminated by ','

查找时通过.查找具体的信息

SELECT remarks FROM student; #输出:{name:mengfan,sex:man,height:180}SELECT remarks.height FROM student; #输出:180

分隔符详解

1)列分隔符、元素分隔符、元素内分隔符、行分隔符的顺序

ROW FORMAT delimited fields terminated BY '\t' #指定空格为列分隔符

collection items terminated by ',' #集合中的元素间的分隔符

map keys terminated by ':' #元素内部的分隔符

lines terminated BY '\n'#指定换行符为行分隔符

比如:有一行数据: 0001 黄海霞,孟凡 语文:80,数学:90

空格是两列数据的分隔符,逗号是两个元素之间的分隔符,冒号是元素内部的分隔符

三种分隔符的顺序为:由外到内,顺序不可改变,行分隔符在最后;

2)多字节的分隔符

hive默认只能解析单字节分隔符,数据:0001::黄海霞::80

方法1:修改serde library,默认是lazysimpleserde,改为RegexSerDe

create table stu (id int,sname string,score string)
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe' #指定序列化类库,正则表达式
with serdeproperties('input.regex'='(.*)::(.*)::(.*)' #定义输入的正则表达式 ,'output.format.string'='%1$s %2$S %3$S'); #定义输出的结果

注意:

  • 数据中有多少个分隔符,表达式中就要有多少个(.*)::(.*)::(.*)
  • 分隔符若是|,则需要用\\转义,(.*)\\|\\|(.*)\\|\\|(.*)
  • 输出结果中的 %1$s 个数要与输入中的(.*)的个数对应
  • (.*)代表的是任意字符
  • $s 是占位符

方法2:修改hive底层源码,影响较大,其他使用单字节的文件容易出错,不推荐使用

查看表

SHOW tables#查看数据表 SHOW tables in hd_hive; #查看hd_hive库中的数据表 SHOW tables LIKE 's*'; #查看表名是以s开头的表 SHOW create table student; #查看student表的建表语句 SHOW PARTITIONS student; #查看student表的分区 SHOW PARTITIONS student PARTITION(city='beijing'); #查看student表的beijing分区DESC student; #查看表的字段信息 DESC formatted student; #查看元数据库中,表的字段信息(已格式化) DESC extended student; #查看元数据库中,表的详细信息(未格式化)

删除表

DROP TABLE IF EXISTS student; #删除表,包括表结构和表数据 TRUNCATE TABLE IF EXISTS student; #清空表,保留表结构,删除表数据
  • 内部表:删除的时候,元数据库会删除,且HDFS上的原始数据也会被删除;
  • 外部表:删除的时候,元数据库会删除,但HDFS上的原始数据不会被删除;

修改表

1.修改表名

ALTER TABLE student RENAME TO stu; #修改表名,student改为stu

2.修改表字段信息

ALTER TABLE student ADD COLUMNS(department string); #添加字段 ALTER TABLE student REPLACE COLUMNS(id int ,sname string); #替换表的所有列的字段 ALTER TABLE student CHANGE sname tname string; #修改字段名称,需同时指定新字段的类型ALTER TABLE student CHANGE age age string; #修改字段类型(有限制)int能转化成string,只能小转大,不可逆;但是hive1.2.2版本中没有这个限制

3.修改表分区信息

ALTER TABLE student ADD if not exists PARTITION (city='shanghai'); #添加分区 ALTER TABLE student ADD if not exists PARTITION (city='shenzhen') location '/user/student/shenzhen';#添加分区的同时指定路径 ALTER TABLE student DROP if exists PARTITION (city='beijing'); #删除分区

修改分区:

ALTER TABLE student PARTITION (city='shenzhen') SET location '/user/shenzhen'; #修改分区的路径 ALTER TABLE student PARTITION (city='shenzhen') ENABLE no_drop; #防止分区被删除 ALTER TABLE student PARTITION (city='shenzhen') ENABLE offline; #防止分区被查询

其他辅助命令

SHOW CREATE TABLE student; # 查看建表语句,将默认语句自动补全后的建表语句

Hive关于数据表的增删改(内部表、外部表、分区表、分桶表 数据类型、分隔符类型)相关推荐

  1. hive详细笔记(四)-Hive内部表,外部表,分区表,分桶表详解(附带讲解视频)

    本节目录 内部表和外部表 静态分区表 动态分区表 分桶表 抽样查询 1 内部表和外部表 未被external修饰的是内部表(managed table),被external修饰的为外部表(extern ...

  2. Hive 分区表 分桶表

    本文目录 1.分区表 Ⅰ.分区表基本操作 1.创建分区表语句 2.分区数据准备 3.装载数据至指定分区 4.数据查询 Ⅰ.全表数据查询 Ⅱ.单个分区数据查询 Ⅲ.多个分区数据查询 5.增加分区 6.删 ...

  3. MySQL 表的增删改查(进阶篇①)· 数据库约束 · 表的设计 · 新增查询结果 · 聚合查询 · 聚合函数 · group by · having · 笛卡尔积

    一.数据库约束 1.1 约束类型 1.2 非空约束 not null 1.3 唯一约束 unique 1.4 默认约束 default 1.5 主键约束 primary key 1.6 自增主键 pr ...

  4. Hadoop之Hive数据库和表的增删改查(DDL)

    Hive QL 是Hive支持的类似SQL的查询语言.Hive QL大体可以分为DDL.DML和UDF语言.DDL语言主要是创建数据库.创建表.数据库和表的删除:DML主要进行数据的添加.查询:UDF ...

  5. 六、Hive中的内部表、外部表、分区表和分桶表

    文章目录 内部表 外部表 分区表 分桶表 在Hive数据仓库中,重要点就是Hive中的四个表.Hive 中的表分为内部表.外部表.分区表和分桶表. 内部表 默认创建的表都是所谓的内部表,有时也被称为管 ...

  6. MySQL表的增删改查(基础)

    MySQL表的增删改查(基础) 文章目录 MySQL表的增删改查(基础) 新增(`Create`) 查询(`Retrieve`) 更新(`Update`) 删除(`Delete`) 总结 注释:在SQ ...

  7. 大数据快速入门(09):永久弄清楚 Hive 分区表和分桶表的区别

    蛋蛋 和 小智 今天又在"打情骂俏",他们今天在谈论分区表和分桶表,走,我们去听听. 这天,蛋蛋去茶水间倒水,他把水杯放在饮水机下面,打开开关,一直盯着墙上的画在看,灵魂仿佛已经飞 ...

  8. Hive Sampling 抽样函数:Random随机抽样、Block 基于数据块抽样、Bucket table 基于分桶表抽样

    Hive Sampling 抽样函数 文章目录 Hive Sampling 抽样函数 Random随机抽样 Block 基于数据块抽样 Bucket table 基于分桶表抽样 语法 在HQL中,可以 ...

  9. Hive 的概念、应用场景、安装部署及使用、数据存储 、table(内部表)和external table(外部表)、partition(分区表)和bucket(分桶表)

    目录 1.Hive 的概念 2.Hive 的特点 3.Hive 和 RDBMS(关系型数据库) 的对比 4.Hive 和 HBase 的差别 5.Hive 架构 6.Hive安装与使用方法介绍 7.H ...

最新文章

  1. Maven学习笔记(二) :Maven的安装与配置
  2. 设计模式 之 建造者
  3. DNS_ARP_DHCP协议
  4. easypoi 如何合并相同的列,如何在Java中的POI中使用XWPFTable合并单元格(或应用colspan)?...
  5. 【测试点2分析】:1020 月饼 (25分)(甲级 1070 Mooncake (25 分))
  6. FTPClient登录慢的问题
  7. django 不包括字段 序列化器_手写一个Django序列化功能
  8. Debian Linux 的 vim 如何使用系统剪贴板
  9. python调用cplex求解装箱问题_使用cplex(python)解决限制背包(01背包)问题
  10. python3里面的图片处理库 pillow
  11. TensorFlow 是一个用于人工智能的开源神器
  12. poj_3468 线段树
  13. 死亡之ping(Ping of Death)
  14. 安装office2007 1706错误
  15. 在GIS中UTM和WGS84的区别
  16. html制作打飞机的游戏,JavaScript 小型打飞机游戏实现原理说明
  17. win10打开 Windows凭据管理器 0x800706BA
  18. 使用ArrayList集合实现学生管理系统
  19. 学计算机文科好还是理科好,大学毕业之后才明白,文科生和理科生的差距有多大?高中生注意...
  20. apache poi 生成word 3D折线图 maven

热门文章

  1. CentOS 7 gedit编辑器中文乱码解决方法
  2. WCF分布式开发步步为赢系列
  3. %求余数 rand随机数
  4. skiplist原理与实现
  5. 嵌入式里如何给内存做压力测试?不妨试试memtester
  6. Linux cpuidle framework
  7. java loadlibrary_java – System.loadLibrary不起作用.链中的第二个lib的UnsatisfiedLinkError...
  8. docker 定时重启脚本_使用 Go 添加启动脚本
  9. QT——QT4.8.5安装与配置
  10. OCR系列——总体概述