Hive 数据类型及操作数据库
3. Hive 数据类型
3.1 基本数据类型
| Hive 数据类型 | Java 数据类型 | 长度 | 
|---|---|---|
| TINYINT | byte | 1 byte 有符号整数 | 
| SMALINT | short | 2 byte 有符号整数 | 
| INT | int | 4 byte 有符号整数 | 
| BIGINT | long | 8 byte 有符号整数 | 
| FLOAT | float | 单精度浮点数 | 
| DOUBLE | double | 双精度浮点数 | 
| STRING | string | 字符系列, 可以使用单引号或双引号 | 
| TIMESTAMP | 时间类型 | |
| BINARY | 字节数组 | 
3.2 集合数据类型
| Hive 数据类型 | 描述 | 语法示例 | 
|---|---|---|
| STRUCT | 类似于C语言的struct | |
| MAP | map | |
| ARRAY | 数组 | 
// 原始数据: complicated.txt
zhangsan,lisi_wangwu,xiao zhang:20_zhangfei:22,zhong guan cun_beijing
// 创建表语句
create table studentInfo(
    name string,
    friends array<string>,
    children map<string, int>,
    address struct<street:string, city:string>
)
row format delimited
fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
// 查询语句
select friends[1],children['wangwu'],address.street from studentInfo;
4. DDL 数据定义
4.1 创建数据库
- 创建数据库: create database if not exists db_hive;
4.2 查询数据库
- 显示数据库: show databases;
- 筛选数据库: show databases like '条件';
- 查看数据库信息: desc database db_hive;
- 查看数据库详细信息: desc database extended db_hive;
4.3 修改数据库
- 增加属性: alter database db_hive set dbproperties('CTtime'='2019-06-21');
4.4 删除数据库
- 删除空数据库: drop database db_hive;
- 删除非空数据库: drop database db_hive cascade;
4.5 创建表
4.5.1 管理表(内部表, MANAGED_TABLE)
- 使用另外一张表的结构和数据: create table student001 as select * from student;
- 仅使用另外一张表的结构: create table student001 like student;
- 查看表信息: desc student;
- 查看内部表(外部表)信息: desc formatted student;
4.5.2 外部表(EXTERNAL_TABLE)
- Hive 并未完全拥有这份数据。删除外部表并不会删除掉这份数据,但是描述表的元数据信息会被删除掉。
- 创建外部表: create external table dept(deptid int, dname string, loc int) row format delimited fields terminated by '\t';
- 创建外部表: create external table if not exists default.emp(empno int, ename string, job string, mgr int, hiredate string, sal double, comm double, deptno int) row format delimited fields terminated by '\t';
// 原始数据:dept.txt
10  ACCOUNTING  1700
20  RESEARCH    1800
30  SALES   1900
40  OPERATIONS  1700
// 原始数据: emp.txt
7369    SMITH   CLERK   7902    1980-12-17  800.00  20
7499    ALLEN   SALESMAN   7698    1981-2-20  1600.00   300.00  30
7521    WARD   SALESMAN   7698    1981-2-22  1250.00    500.00  30
7566    JONES   MANAGER   7839    1981-4-2  2975.00  20
7654    MARTIN   SALESMAN   7698    1981-9-28  1250.00  1400.00  30
7698    BLAKE   MANAGER   7839    1981-5-1  2850.00  30
7782    CLARK   MANAGER   7839    1981-6-9  2450.00  10
7788    SCOTT   ANALYST   7566    1987-4-19  3000.00  20
7839    KING   PRESIDENT    1981-11-17  5000.00  10
7844    TURNER   SALESMAN   7698    1981-9-8  1500.00   0.00  30
7876    ADAMS   CLERK   7788    1987-5-23   1100.00  20
7900    JAMES   CLERK   7698    1981-12-3  950.00  30
7902    FORD   ANALYST   7566    1981-12-3  3000.00  20
7934    MILLER   CLERK   7782    1982-1-23  1300.00  10
4.5.3 管理表与外部表的相互转换
- 假如"student002"为外部表,更改为内部表: alter table student002 set tblproperties('EXTERNAL'='FALSE');
- 修改内部表为外部表: alter table student002 set tblproperties('EXTERNAL'='TRUE');
- 注意: ('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!
4.6 分区表
- Hive 中的分区就是分目录。分区表对应 HDFS 文件系统上的独立文件夹。在查询时,通过 WHERE 子句中的表达式选择查询所需要的指定分区,可以提高查询效率。
4.6.1 分区表基本操作
- 需求: 根据日期对日志进行管理;
- 创建分区表: create table stu_patition(id int, name string) partitioned by (month string) row format delimited fields terminated by '\t';
- 加载数据: locad data local inpath '文件路径' into table stu_partition partition(month="20190618");
- 查询分区表: select * from stu_partition where month="20190618";
- 添加多个分区: alter table stu_partition add partition(month="20190619") partition(month="20190620");
- 删除一个分区: alter table stu_partition drop partition(month="20190620");
- 删除多个分区: alter table stu_partition drop partition(month="20190620"),partition(month="20190621");
4.6.2 分区表注意事项
- 创建二级分区表: create table stu_patition(id int, name string) partitioned by (month string, day string) row format delimited fields terminated by '\t';
- 加载数据: locad data local inpath '文件路径' into table stu_partition partition(month="201906",day="18");
4.6.3 将上传数据与分区表关联
- 第一种方式:
- 使用HDFS创建目录数据: dfs -mkdir -p /user/hive/warehouse/stu_partition/month=20190719;
- 使用HDFS上传数据: dfs -put 本地文件路径/student.txt /user/hive/warehouse/stu_partition/month=20190719;
- 执行修复命令: msck repair table stu_partition;
 
- 使用HDFS创建目录数据: 
- 第二种方式:
- 使用HDFS创建目录数据: dfs -mkdir -p /user/hive/warehouse/stu_partition/month=20190720;
- 使用HDFS上传数据: dfs -put 本地文件路径/student.txt /user/hive/warehouse/stu_partition/month=20190720;
- 执行修复命令: alter table stu_partition add partition(month="20190720");
 
- 使用HDFS创建目录数据: 
4.7 修改表
- 重命名表: alter table 原始表名 rename to 新表名;
- 重命名列: alter table student001 change column 原列名 新列名 列类型;
- 添加多列: alter table student001 add columns (gender string, description string);
5. DML 数据操作
5.1 数据导入
- 向表中装载数据(Load): load data [local] inpath '文件路径' overwrite | into table student [partition(partcol1=val1, ....)]- "load data": 表示加载数据;
- "local": 表示从本地加载数据到Hive表,否则从HDFS加载数据到Hive表;
- "inpath": 表示加载数据的路径;
- "overwrite": 表示覆盖表中已有数据,否则表示追加;
- "into table": 表示加载到哪张表;
- "student": 表示具体的表;
- "partition": 表示上传到指定分区;
 
- 通过查询语句向表中插入数据(Insert)
- 根据单张表查询结果,插入数据:insert into table 表名 partition(month=20190617) select * from student;
- 根据多张表查询结果,插入数据:
 
- 根据单张表查询结果,插入数据:
- 根据查询结果创建表: create table if not exists student003 as select id, name from student;
5.1.1 创建表时通过 Location 指定加载数据路径
- 创建表时,指定在 HDFS 上的位置: create table if not exists student006(id int, name string) row format delimited fields terminated by '\t' location '/user/hive/warehouse/student007';
- 上传数据到 HDFS 上: hadoop fs -put 本地路径 /user/hive/warehouse/student007;
- 查询数据: select * from student006;
5.2 数据导出
5.2.1 Insert 导出
- 将查询的结果导出到本地: insert overwrite local directory '本地路径' select * from student;
- 将查询的结果格式化导出到本地: insert overwrite local directory '本地路径' row format delimited fields terminated by '\t' select * from student;
5.2.2 Hadoop 命令导出到本地
- dfs -get /user/hive/warehouse/student/month=201709/student.txt 本地路径;
5.2.3 Hive Shell 命令导出
- bin/hive -e 'select * from default.student;' > 本地路径;
5.2.4 Export 导出到 HDFS 上
- export table default.student to '/user/hive/warehouse/export/student;'
5.2.5 Import 数据到指定 Hive 表中
- 先用 EXPORT 导出后,再将数据导入;
- import table student2 partition(month='201907') from '/user/hive/warehouse/export/student';
5.3 清除表中数据
- truncate table student;
Hive 数据类型及操作数据库的更多相关文章
- iOS 数据储存--SQLite 操作数据库-FMDB,sqlite数据类型,保存图片,demo
		1.SQLite 语句中 数据类型的储存 /* 不区分大小写 char(长度).字符串 NULL. 空值 INTEGER. 整型 REAL.浮点型 TEXT.文本类型 BLOB. 二进制类型,用来存储 ... 
- 缓存数据库-redis数据类型和操作(list)
		转: 狼来的日子里! 奋发博取 缓存数据库-redis数据类型和操作(list) 一:Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素导列表的头部( ... 
- Hive配置与操作实践
		Hive配置与操作实践 @(Hadoop) 安装hive hive的安装十分简单,只需要在一台服务器上部署即可. 上传hive安装包,解压缩,将其配入环境变量. mysql的设置 在要作为元数据库的m ... 
- Hive 数据类型 + Hive sql
		Hive 数据类型 + Hive sql 基本类型 整型 int tinyint (byte) smallint(short) bigint(long) 浮点型 float double 布尔 boo ... 
- 第3章 Hive数据类型
		第3章 Hive数据类型 3.1 基本数据类型 对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB ... 
- python高级之操作数据库
		python高级之操作数据库 本节内容 pymysql介绍及安装 使用pymysql执行sql 获取新建数据自增ID fetch数据类型设置 1.pymysql介绍及安装 在python2中连接数据库 ... 
- pymysql 操作数据库
		一.简介 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同,但目前pymysql支持python3.x而后者不支持3.x版本 其执行语句与sql源码相似 二.使用 ... 
- SQL Server中的Image数据类型的操作
		原文:SQL Server中的Image数据类型的操作 准备工作,在库Im_Test中建立一张表Im_Info,此表中有两个字段,分别为Pr_Id (INT),Pr_Info (IMAGE),用来存储 ... 
- JDBC(用Eclipse操作数据库Oracle)的基础操作集合
		JDBC: JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编 ... 
随机推荐
- BCB6常用快捷键
			:: 项目管理类 :: F10 代码窗口全屏显示时切换到BCB的主窗口 Ctrl + F12 打开源文件清单对话框 ... 
- .pro文件中设置版本等信息
			VERSION = 1.2.3 QMAKE_TARGET_PRODUCT = 产品名称QMAKE_TARGET_COMPANY = 公司QMAKE_TARGET_DESCRIPTION = 文件描述Q ... 
- Linux操作系统常用命令合集——第一篇-文件和目录操作(40个命令)
			一.选项和参数的区别 在经过上一次的系统安装后我们已经成功登陆,登陆LInux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着“选项”(英文名:options)或“参数” ... 
- parted分区命令
			Parted是一个比fdisk更高级的工具,它支持多种分区表格式,包括MS-DOS和GPT.它允许用户创建,删除,调整大小,缩小,移动和复制分区,重新组织磁盘使用,以及将数据复制到新硬盘,但在缩小分区 ... 
- AC自动机1030 [JSOI2007]文本生成器
			/*Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章――― ... 
- ZR#959
			ZR#959 解法: 对于一个询问,设路径 $ (u, v) $ 经过的所有边的 $ gcd $ 为 $ g $,这可以倍增求出. 考虑 $ g $ 的所有质因子 $ p_1, p_2, \cdots ... 
- 如何判断Linux下 网卡是虚拟还是物理网卡?
			ifconfig命令可以查看Linux系统中正在使用的网卡,包括物理网卡和虚拟网卡,如果想要查看Linux系统中全部的网卡,可以查看/proc/net/dev文件,那如何区分网卡是虚拟还是物理的呢? ... 
- Qt学习大全
			这边文章的目的是把自己之前写的关于Qt的文章整理归纳成一个Qt学习的专栏,会提供之前文章的导航,同时也会留一些坑待自己日后填. 1.Qt 元对象系统 2.Qt的信号和槽 3.Qt的插件开发 4.Qml ... 
- x2goserver 连接问题
			The remote proxy closed the connection while negotiating the session. This may be due to the wrong a ... 
- qt mvc1
			mvc是经典的三层结构,将数据,视图和逻辑分离.Qt中的Model/View框架,实现了这个模式.在Qt中这个模式设计到三个类,model类,view类和delegate类.model类保存数据,vi ... 
