HIVE之 DDL 数据定义 DML数据操作
DDL数据库定义
创建数据库
1)创建一个数据库,数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.db。hive (default)> create database db_hive;
2)避免要创建的数据库已经存在错误,增加 if not exists 判断。(标准写法)hive (default)> create database if not exists db_hive;
3)创建一个数据库,指定数据库在 HDFS 上存放的位置hive (default)> create database db_hive2 location '/db_hive2.db'
修改数据库
用户可以使用 ALTER DATABASE 命令为某个数据库的 DBPROPERTIES 设置键-值对属性值,
来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置hive (default)> alter database db_hive set dbproperties('createtime'='20170830');
查看结果hive> desc database extended db_hive;
查询数据库
1)显示数据库hive> show databases;
2)过滤显示查询的数据库hive> show databases like 'db_hive*';
3)显示数据库信息hive> desc database db_hive;
4)显示数据库详细信息,extendedhive> desc database extended db_hive;
删除数据库
1)删除空数据库hive>drop database db_hive2;
2)如果删除的数据库不存在,最好采用 if exists 判断数据库是否存在hive> drop database if exists db_hive2;
3)如果数据库不为空,可以采用 cascade 命令,强制删除hive> drop database db_hive cascade;
创建表
1)建表语法CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name[(col_name data_type [COMMENT col_comment], ...)][COMMENT table_comment][PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)][CLUSTERED BY (col_name, col_name, ...)[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS][ROW FORMAT row_format][STORED AS file_format][LOCATION hdfs_path]2)字段解释说明:(1)CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常。(2)EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。(3)COMMENT:为表和列添加注释。(4)PARTITIONED BY 创建分区表(5)CLUSTERED BY 创建分桶表(6)SORTED BY 不常用(7)ROW FORMAT DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]| SERDE serde_name[WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe确定表的具体的列的数据。 (8)STORED AS 指定存储文件类型常用的存储文件类型:SEQUENCEFILE(二进制序列文件)、TEXTFILE(文本)、RCFILE(列式存储格式文件)如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE。(9)LOCATION :指定表在 HDFS 上的存储位置。(10)LIKE 允许用户复制现有的表结构,但是不复制数据。
管理表
1)理论默认创建的表都是所谓的管理表,有时也被称为内部表。因为这种表,Hive 会(或多或少地)控制着数据的生命周期。Hive 默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(例如,/user/hive/warehouse)所定义的目录的子目录下。 当我们删除一个管理表时,Hive 也会删除这个表中数据。管理表不适合和其他工具共享数据。
2)操作
(1)普通创建表create table if not exists student2(id int, name string)row format delimited fields terminated by '\t'stored as textfilelocation '/user/hive/warehouse/student2';
(2)根据查询结果创建表(查询的结果会添加到新创建的表中)create table if not exists student3as select id, name from student;
(3)根据已经存在的表结构创建表create table if not exists student4 like student;
(4)查询表的类型hive (default)> desc formatted student2;Table Type: MANAGED_TABLE
外部表
1)理论因为表是外部表,所有 Hive 并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。
2)管理表和外部表的使用场景:每天将收集到的网站日志定期流入 HDFS 文本文件。在外部表(原始日志表)的基础上做大量的统计分析,用到的中间表、结果表使用内部表存储,数据通过 SELECT+INSERT进入内部表。
3)案例分别创建部门和员工外部表,并向表中导入数据。create external table if not exists default.dept(deptno 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';4)导入数据hive (default)> load data local inpath '/opt/module/datas/dept.txt' into table default.dept;hive (default)> load data local inpath '/opt/module/datas/emp.txt' into table default.emp;
5)查询表格式化数据hive (default)> desc formatted dept;Table Type: EXTERNAL_TABLE
分区表
(1)创建分区表hive (default)> create table dept_partition(deptno int, dname string, loc string)partitioned by (month string)row format delimited fields terminated by '\t';
(2)加载数据到分区表中hive (default)> load data local inpath '/opt/module/datas/dept.txt' into tabledefault.dept_partition partition(month='201709');hive (default)> load data local inpath '/opt/module/datas/dept.txt' into tabledefault.dept_partition partition(month='201708');hive (default)> load data local inpath '/opt/module/datas/dept.txt' into tabledefault.dept_partition partition(month='201707');
(3)查询分区表中数据hive (default)> select * from dept_partition where month='201709';hive (default)> select * from dept_partition where month='201709'unionselect * from dept_partition where month='201708'unionselect * from dept_partition where month='201707';
分区操作
(1)增加分区hive (default)> alter table dept_partition add partition(month='201706') ;hive (default)> alter table dept_partition add partition(month='201705') partition(month='201704');(2)删除分区hive (default)> alter table dept_partition drop partition (month='201704');hive (default)> alter table dept_partitiondrop partition (month='201705'), partition (month='201706');(3)查看分区个数hive>show partitions dept_partition;(4)查看分区表结构hive>desc formatted dept_partition;
分区表注意事项
1)创建二级分区表hive (default)> create table dept_partition2(deptno int, dname string, loc string)partitioned by (month string, day string)row format delimited fields terminated by '\t';2)正常的加载数据
(1)加载数据到二级分区表中hive (default)> load data local inpath '/opt/module/datas/dept.txt' into tabledefault.dept_partition2 partition(month='201709', day='13');(2)查询分区数据hive (default)> select * from dept_partition2 where month='201709' and day='13';3)把数据直接上传到分区目录上,让分区表和数据产生关联的两种方式
(1)方式一:上传数据后修复上传数据hive (default)> dfs -mkdir -p /user/hive/warehouse/dept_partition2/month=201709/day=12;hive (default)> dfs -put /opt/module/datas/dept.txt/user/hive/warehouse/dept_partition2/month=201709/day=12;查询数据(查询不到刚上传的数据)hive (default)> select * from dept_partition2 where month='201709' and day='12';执行修复命令hive>msck repair table dept_partition2;再次查询数据hive (default)> select * from dept_partition2 where month='201709' and day='12';(2)方式二:上传数据后添加分区上传数据hive (default)> dfs -mkdir -p /user/hive/warehouse/dept_partition2/month=201709/day=11;hive (default)> dfs -put /opt/module/datas/dept.txt/user/hive/warehouse/dept_partition2/month=201709/day=11;执行添加分区hive (default)> alter table dept_partition2 add partition(month='201709', day='11');查询数据hive (default)> select * from dept_partition2 where month='201709' and day='11';(3)方式三:上传数据后 load 数据到分区创建目录hive (default)> dfs -mkdir -p /user/hive/warehouse/dept_partition2/month=201709/day=10;上传数据hive (default)> load data local inpath '/opt/module/datas/dept.txt' into tabledept_partition2 partition(month='201709',day='10');查询数据hive (default)> select * from dept_partition2 where month='201709' and day='10';
修改表
(1)重命名表ALTER TABLE table_name RENAME TO new_table_namehive (default)> alter table dept_partition2 rename to dept_partition3;
(2)增加/ 修改/替换列信息更新列:ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_namecolumn_type [COMMENT col_comment] [FIRST|AFTER column_name]增加和替换列:ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type[COMMENT col_comment], ...)注:ADD 是代表新增一字段,字段位置在所有列后面(partition 列前),REPLACE 则是表示替换表中所有字段。实操案例:(1)查询表结构hive>desc dept_partition;(2)添加列hive (default)> alter table dept_partition add columns(deptdesc string);(3)查询表结构hive>desc dept_partition;(4)更新列hive (default)> alter table dept_partition change column deptdesc desc int;(5)查询表结构hive>desc dept_partition;(6)替换列hive (default)> alter table dept_partition replace columns(deptno string, dname string, loc string);(7)查询表结构hive>desc dept_partition;
删除表
hive (default)> drop table dept_partition;
DML数据操作
数据导入
向表中装载数据(Load)
1)语法hive>load data [local] inpath '/opt/module/datas/student.txt' [overwrite]into table student [partition (partcol1=val1,…)];参数说明(1)load data:表示加载数据(2)local:表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表(3)inpath:表示加载数据的路径(4)into table:表示加载到哪张表(5)student:表示具体的表(6)overwrite:表示覆盖表中已有数据,否则表示追加(7)partition:表示上传到指定分区2)实操案例0)创建一张表hive (default)> create table student(id string, name string) row format delimited fields terminated by '\t';(1)加载本地文件到 hivehive (default)> load data local inpath '/opt/module/datas/student.txt' into table default.student;(2)加载 HDFS 文件到 hive 中上传文件到 HDFShive (default)> dfs -put /opt/module/datas/student.txt /user/upuptop/hive;加载 HDFS 上数据hive (default)>load data inpath '/user/upuptop/hive/student.txt' into table default.student;(3)加载数据覆盖表中已有的数据上传文件到 HDFShive (default)> dfs -put /opt/module/datas/student.txt /user/upuptop/hive;加载数据覆盖表中已有的数据hive (default)>load data inpath '/user/upuptop/hive/student.txt' overwrite into table default.student;
通过查询语句向表中插入数据(Insert)
1)创建一张分区表hive (default)> create table student(id string, name string) partitioned by (month string) row format delimited fields terminated by '\t';2)基本插入数据hive (default)> insert into table student partition(month='201709')values('1004','wangwu');3)基本模式插入(根据单张表查询结果)hive (default)> insert overwrite table student partition(month='201708')select id, name from student where month='201709';
4)多插入模式(根据多张表查询结果)hive (default)> from studentinsert overwrite table student partition(month='201707')select id, name where month='201709'insert overwrite table student partition(month='201706')select id, name where month='201709';
查询语句中创建表并加载数据(As Select )
根据查询结果创建表(查询的结果会添加到新创建的表中)create table if not exists student3 as select id, name from student;
创建表时通过 Location
1)创建表,并指定在 hdfs 上的位置hive (default)> create table if not exists student5(id int, name string)row format delimited fields terminated by '\t'location '/user/hive/warehouse/student5';2)上传数据到 hdfs 上hive (default)> dfs -put /opt/module/datas/student.txt /user/hive/warehouse/student5;3)查询数据hive (default)> select * from student5;
Import 数据到指定 Hive
先用 export 导出后,再将数据导入!!!注意格式问题
hive (default)> import table student2 partition(month='201709') from '/user/hive/warehouse/export/student';
数据导出
Insert 导出
1)将查询的结果导出到本地hive (default)> insert overwrite local directory '/opt/module/datas/export/student'select * from student;2)将查询的结果格式化导出到本地hive (default)> insert overwrite local directory '/opt/module/datas/export/student1'ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'COLLECTION ITEMS TERMINATED BY '\n'select * from student;3)将查询的结果导出到 HDFS 上(没有 local)hive (default)> insert overwrite directory '/user/upuptop/hive/warehouse/student2'ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'COLLECTION ITEMS TERMINATED BY '\n'select * from student;
Hadoop 命令导出到本地
hive (default)> dfs -get/user/hive/warehouse/student/month=201709/000000_0 /opt/module/datas/export/student3.txt;
Hive Shell 命令导出
基本语法:(hive -f/-e 执行语句或者脚本 > file)
$ bin/hive -e 'select * from default.student;' > /opt/module/datas/export/student4.txt;
Export 导出到 HDFS
hive (default)> export table default.student to '/user/hive/warehouse/export/student';
清空数据
注意:Truncate 只能删除管理表,不能删除外部表中数据
hive (default)> truncate table student;
本博客仅为博主学习总结,感谢各大网络平台的资料。蟹蟹!!
转载于:https://www.cnblogs.com/upuptop/p/11154303.html
HIVE之 DDL 数据定义 DML数据操作相关推荐
- 【一周入门MySQL—1】数据库概述、数据定义、数据操作
数据库概述.数据定义.数据操作 一.数据库概述 数据库基础概念:按照一定的数据结构来组织.存储和管理数据的仓库. 企业数据存储面临的问题: 存储大量数据: 大量数据的检索和访问: 保证数据信息的一致性 ...
- mysql中数据定义和数据控制语言_DB-数据操控与定义语言
数据操控语言 数据操控语言主要用于对表中数据的增删改.使用insert可对表进行插入数据,update可修改表中的数据或结构,delete则可进行删除. 首先看一下我们在何表中操作: 1,insert ...
- hive mysql类型,(二)Hive数据类型、数据定义、数据操作和查询
1.数据类型 1.1 基本数据类型Hive数据类型长度例子TINYINT1byte有符号整数20 SMALINT2byte有符号整数20 INT4byte有符号整数20 BIGINT8byte有符号整 ...
- 认识Hive,以及Hive的数据定义与数据操作,hive的数据查询和hive函数
认识Hive 为什么要出现hive 前面知识我们讲到mapreudce计算框架,各位需要通过java编码的形式来实现设计运算过程,这对各位的编程能力提出了更高的要求,难道没有门槛更低的方式来实现运算的 ...
- mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)
SQL 包含以下 4部分:1数据定义语言(DDL):DROP.CREATE.ALTER 等语句.2数据操作语言(DML):INSERT(插入).UPDATE(修改).DELETE(删除)语句.3数据查 ...
- mysql中数据定义和数据控制语言_MySQL的DDL数据定义语言和DCL数据控制语言
SQL客户端slient内置命令 db01 [world]>help \c 类似于ctrl+c,结束上一条命令 \G 格式化输出,一般针对列特别多的场景使用 exit(\q) 退出当前会话 so ...
- (8)Hive的DDL数据定义(表的操作)
文章目录 创建表 管理表 外部表 管理表和外部表的使用场景 案例实操 管理表与外部表的互相转换 分区表 分区表基本操作 创建分区表 加载数据到分区表中 单分区查询 增加分区 删除分区 查看分区 分区表 ...
- 【MySQL】DDL(Data Definition Language)数据定义语言之操作数据库
文章目录 操作数据库:CRUD 1. C(Create):创建 1. 创建数据库: 2. 创建数据库,判断不存在,再创建: 3. 创建数据库,并指定字符集 2. R(Retrieve):查询 1. 查 ...
- java中数据定义_数据对象如何定义为Java代码示例
想将数据保存为这样子: [{ "subject": { "code": "B123", "words": [{ &quo ...
最新文章
- [置顶] C语言实验:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天,并求出这一天是星期几。...
- “面试不败计划”: java语言基础面试题(一)
- FreeCAD v0.19源码编译与VS2017+Qt5环境搭建
- 高等数学上-赵立军-北京大学出版社-题解-练习2.3
- openshift_Openshift源中的高可用性Drools无状态服务
- electron知识点
- 太阳能电池基本特性实验报告_太阳能电池基本特性研究实验报告的数据处理Ini怎么?太阳能电池基 爱问知识人...
- 一个常用的Android工具库
- 福特新CEO“泼冷水”,给自动驾驶设立商业化节点是否真的有必要?
- OLED(经典0.96英寸)--4SPI--SSD1306控制原理(含常用芯片_oled例程)
- 雨木林风linux系统,雨林木风开源系统下载-ylmf.os(雨林木风开源系统)v4.0 正式版 - 极光下载站...
- 管理学定律三:羊群效应与刺猬法则
- python实现不重复排列组合_python 实现排列组合
- godaddy安装nginx证书
- Go 初识微信订阅号(测试号)
- 分布式锁-Redis解决方案和Redisson解决方案
- nlp-Embedding
- JAVA 间隔 时间 计算器
- A记录和CNAME记录——【网络】
- CPU-Z、GPU-Z:查看电脑的CPU处理器、GPU显卡信息
热门文章
- java request获取域,Java Web - Servlet(13)HttpServletRequest详解(获取请求数据、请求分派、请求域)(二)...
- java递归统计_Java类递归计数
- 如何在从事前端两年,得到20+K的offer
- HTML5前端开发真的会被取代吗?
- 【Java 编程】文件操作,文件内容的读写—数据流
- java 锁定界面_Java中的锁
- oracle的数据库由,Oracle数据库系统主要由Oracle______组成。
- java catch自定义异常_java异常类-java自定义异常-嗨客网
- 关于在阅读nnUNet代码中的一些小细节的记录(三)
- python记录(4)- lxml模块创建xml文件