Hive入门(2)

1.Hive DDL

1.1 database DDL

(1) 创建数据库

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name //生产中if not exists都带上

  [COMMENT database_comment]  //可以增加注释

  [LOCATION hdfs_path]  //存的路径不写默认的就是/user/hive/warehouse

  [WITH DBPROPERTIES (property_name=property_value, ...)]; //添加一些属性,key,value

练习:

 create database  if not exists hive2 comment 'this is test databaes' with DBPROPERTIES("cretor"='yunfei','teacher'='ruoze');


 desc database extended hive2;
//不加这个extended看不到自己添加的属性

(2)删除数据库

use database hive2;

drop table xxx;

drop database hive2;
//这是生产中的正常操作,因为数据库下有表是不能删除的
强制的不学

(3)修改数据库

ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);   -- (Note: SCHEMA added in Hive 0.14.0)
 
ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role;   -- (Note: Hive 0.13.0 and later; SCHEMA added in Hive 0.14.0)
  
ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path; -- (Note: Hive 2.2.1, 2.4.0 and later)




hive> alter database hive2 set dbproperties('teacher'='jepson');
OK
Time taken: 0.076 seconds
hive> desc database extended hive2;
OK
hive2	this is test databaes	hdfs://192.168.137.251:9000/user/hive/warehouse/hive2.db	root	USER	{teacher=jepson, cretor=yunfei}
Time taken: 0.021 seconds, Fetched: 1 row(s)

1.2 table DDL

(1)创建表

create table hive2.ruozeperson (id int comment 'this is id',name string comment 'this is name') comment 'this is test table' row format delimited fields terminated by '\t';



create table person(id int,name string) comment 'this is a table' row format delimited fields terminated by '\t'

(2)查看表的详细信息

desc formatted ruozeperson;

(3)加载数据到表里面去

LOAD DATA LOCAL INPATH '/home/hadoop/data/emp.txt' OVERWRITE INTO TABLE ruozedata_emp; 

local: 从本地文件系统加载数据到hive表
非local:从HDFS文件系统加载数据到hive表
LOAD DATA INPATH 'hdfs:192xxx/home/hadoop/data/emp.txt' OVERWRITE INTO TABLE ruozedata_emp; 

OVERWRITE: 加载数据到表的时候数据的处理方式,覆盖
非OVERWRITE:追加

(4)第二种创建表的方式

create table emp_test as select * from emp;


这是将整个表复制了一遍


create table emp_test like emp;

这种只复制表的结构!!

(5)改表名

alter table emp_test3 rename to emp_test4;

(6)修改表的字段名和类型

 alter table emp_test change column at empno string;


将at 列改为empno string类型

(7)快速查看创建表的信息

show create table emp;

俩个都是查看表的结构,但上面这个能快速看表是如何创建的。

desc formatted emp;

(8)第三种创建表的方式

create table ruozedata_emp4 like ruozedata_emp;

INSERT OVERWRITE TABLE ruozedata_emp4
select * FROM ruozedata_emp;
 
overwrite 是覆盖, to 是追加

(9)到处Hive处理的数据

这是导入到本地,导入HDFS换成HDFS的路径就好了

insert overwrite local directory '/home/hadoop/data'  row format delimited  fields terminated by '\t' select * from emp;

2.Hive的数据存储在哪?

分俩部分:

(1)真是数据存放在HDFS之上。

(2)元数据存放在RDBMS之上。

3.Hive的数据存储结构

(1)传统的关系型数据库,有database,但是Hive中的database,在HDFS之上,就是HDFS之上的一个顶层文件夹。

(2)传统的关系型数据库,有tables,Hive中的table就相当于第二层文件夹。

(3)Hive中还有一个更小的单位Partitions,一个表可以有多个partition,partition就是存放在文件夹之下。

(4)最后就是bucket,这是最底层的了,这就是具体的文件数据了。

4.Hive中常用的数据类型

(1)int   bigint   long   float   string   double  boolean(这个也不建议用,可以用01表示更加省字节) decimal(精度非常高的,很少用)

(2)常用的分隔符

行:\n

列:\001  tab ,空格,$$$  就这些常用的

5.内外部表的不同

创建表默认使用的是MANAGED_TABLE:内部表
    ruozedata_emp_managed
    drop:hdfs+meta
    
EXTERNAL:外部表 
create EXTERNAL table ruozedata_emp_external 
(empno int, ename string, job string, mgr int, hiredate string, salary double, comm double, deptno int)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t'
LOCATION "/ruozedata/external/emp" ;
    drop: drop meta

内部表删除表会将hdfs上的数据和MySQL中的meta信息都删除,外部表则只删除meta信息。

6.操作出了问题,例如字段名字反了

只有重跑,别想着花里胡哨的回滚操作。

重跑:必须要要保证幂等性(就是执行n次结果是一样的!)

猜你喜欢

转载自blog.csdn.net/qq_42064119/article/details/85242239