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数据操作相关推荐

  1. 【一周入门MySQL—1】数据库概述、数据定义、数据操作

    数据库概述.数据定义.数据操作 一.数据库概述 数据库基础概念:按照一定的数据结构来组织.存储和管理数据的仓库. 企业数据存储面临的问题: 存储大量数据: 大量数据的检索和访问: 保证数据信息的一致性 ...

  2. mysql中数据定义和数据控制语言_DB-数据操控与定义语言

    数据操控语言 数据操控语言主要用于对表中数据的增删改.使用insert可对表进行插入数据,update可修改表中的数据或结构,delete则可进行删除. 首先看一下我们在何表中操作: 1,insert ...

  3. hive mysql类型,(二)Hive数据类型、数据定义、数据操作和查询

    1.数据类型 1.1 基本数据类型Hive数据类型长度例子TINYINT1byte有符号整数20 SMALINT2byte有符号整数20 INT4byte有符号整数20 BIGINT8byte有符号整 ...

  4. 认识Hive,以及Hive的数据定义与数据操作,hive的数据查询和hive函数

    认识Hive 为什么要出现hive 前面知识我们讲到mapreudce计算框架,各位需要通过java编码的形式来实现设计运算过程,这对各位的编程能力提出了更高的要求,难道没有门槛更低的方式来实现运算的 ...

  5. mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)

    SQL 包含以下 4部分:1数据定义语言(DDL):DROP.CREATE.ALTER 等语句.2数据操作语言(DML):INSERT(插入).UPDATE(修改).DELETE(删除)语句.3数据查 ...

  6. mysql中数据定义和数据控制语言_MySQL的DDL数据定义语言和DCL数据控制语言

    SQL客户端slient内置命令 db01 [world]>help \c 类似于ctrl+c,结束上一条命令 \G 格式化输出,一般针对列特别多的场景使用 exit(\q) 退出当前会话 so ...

  7. (8)Hive的DDL数据定义(表的操作)

    文章目录 创建表 管理表 外部表 管理表和外部表的使用场景 案例实操 管理表与外部表的互相转换 分区表 分区表基本操作 创建分区表 加载数据到分区表中 单分区查询 增加分区 删除分区 查看分区 分区表 ...

  8. 【MySQL】DDL(Data Definition Language)数据定义语言之操作数据库

    文章目录 操作数据库:CRUD 1. C(Create):创建 1. 创建数据库: 2. 创建数据库,判断不存在,再创建: 3. 创建数据库,并指定字符集 2. R(Retrieve):查询 1. 查 ...

  9. java中数据定义_数据对象如何定义为Java代码示例

    想将数据保存为这样子: [{ "subject": { "code": "B123", "words": [{ &quo ...

最新文章

  1. [置顶] C语言实验:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天,并求出这一天是星期几。...
  2. “面试不败计划”: java语言基础面试题(一)
  3. FreeCAD v0.19源码编译与VS2017+Qt5环境搭建
  4. 高等数学上-赵立军-北京大学出版社-题解-练习2.3
  5. openshift_Openshift源中的高可用性Drools无状态服务
  6. electron知识点
  7. 太阳能电池基本特性实验报告_太阳能电池基本特性研究实验报告的数据处理Ini怎么?太阳能电池基 爱问知识人...
  8. 一个常用的Android工具库
  9. 福特新CEO“泼冷水”,给自动驾驶设立商业化节点是否真的有必要?
  10. OLED(经典0.96英寸)--4SPI--SSD1306控制原理(含常用芯片_oled例程)
  11. 雨木林风linux系统,雨林木风开源系统下载-ylmf.os(雨林木风开源系统)v4.0 正式版 - 极光下载站...
  12. 管理学定律三:羊群效应与刺猬法则
  13. python实现不重复排列组合_python 实现排列组合
  14. godaddy安装nginx证书
  15. Go 初识微信订阅号(测试号)
  16. 分布式锁-Redis解决方案和Redisson解决方案
  17. nlp-Embedding
  18. JAVA 间隔 时间 计算器
  19. A记录和CNAME记录——【网络】
  20. CPU-Z、GPU-Z:查看电脑的CPU处理器、GPU显卡信息

热门文章

  1. java request获取域,Java Web - Servlet(13)HttpServletRequest详解(获取请求数据、请求分派、请求域)(二)...
  2. java递归统计_Java类递归计数
  3. 如何在从事前端两年,得到20+K的offer
  4. HTML5前端开发真的会被取代吗?
  5. 【Java 编程】文件操作,文件内容的读写—数据流
  6. java 锁定界面_Java中的锁
  7. oracle的数据库由,Oracle数据库系统主要由Oracle______组成。
  8. java catch自定义异常_java异常类-java自定义异常-嗨客网
  9. 关于在阅读nnUNet代码中的一些小细节的记录(三)
  10. python记录(4)- lxml模块创建xml文件