欢迎投稿

今日深度:

HIVE DDL,

HIVE DDL,


1.何为DDL?
DDL: Data Definition Language
create drop alter关键字开头的

2.hive的抽象

3.关于数据库存放位置和参数查询
开局自带一个default数据库,默认数据库存放位置:/user/hive/warehouse,位置是由参数决定的:hive.metastore.warehouse.dir

Hive所有参数的查询:https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties

想要查询参数设置情况,请用set:

hive (default)> set hive.metastore.warehouse.dir
              > ;
hive.metastore.warehouse.dir=/user/hive/warehouse

也可以用set修改:

set key=value;

4.关于创建db

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path]
  [WITH DBPROPERTIES (property_name=property_value, ...)];

这里 | 表示2选1,[]是可选条件,comment是备注信息,with是创建的属性信息。

想要查看db信息

desc database extended xxx

db信息属性也可修改

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)

删除数据库

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

这里的cascade: ,1对多的时候,你删除1的一端是否删除多的一端,如果数据库有表,会报错,用这个参数直接全删,生产不用,危险。

5.hive数据类型

重要数值类型:int bigint float double
字符串: string <= date time date time类型麻烦不好用,直接用string类型

t:date time - string   比如日志里如果打印出来是时间戳,看不懂啊

where flag=true  0   布尔类型用0,1更好,更短,不用true,false

6.hive分割符
Hive构建在Hadoop之上
hive创建表,然后数据是存储在HDFS之上

文件:zhangsan,20,m,beijing
表: name age gender location

文件和表要对应
所以创建表的时候要指定分隔符(默认分隔符是\001 ^A)
我们要用空格、制表符(\t)

7.创建表及重点

1.表分为内部表(MANAGED_TABLE)外部表,区别在于内部表是hive管理的。如何理解,删除一张内部表,hdfs,mysql的该表数据都被删除。然而删除一张外部表,hdfs的数据还在,mysql的元数据被删除了

2.查看表结构
表头信息desc xxx
还可以看到细节,存在哪 desc extended xxx
细节格式工整,工作用这个

desc formatted ruoze_emp;

3.复制表
拷贝表结构,不考数据

create table ruoze_emp2 like ruoze_emp;

都考,涉及mapreduce,慢

create table ruoze_emp3 as select * from ruoze_emp;

4.创建表语法

CREATE EXTERNAL(加了是外部,不加默认内部) TABLE ruoze_emp_external (
empno int, 
ename string, 
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'   字段间分割符
#LINES TERMINATED BY '\n'    行之间的分割符,默认换行
LOCATION '/ruoze_emp_external'   外部表常用,hdfs根路径,该路径下直接放数据文件,可以直接select出来
;	

5.给表导数

load data local inpath '/home/hadoop/app/hive-1.1.0-cdh5.7.0/data/emp.txt' overwrite into table ruoze_emp; 
这里local表示本地数据,也就是linux,不加就相当于hdfs上的数据
 overwrite加上表示重写,原先数据会被替换,不加是追加。

注意如果表和数据分割符不对应,数据会变为null

6.删表

drop table ruoze_emp4;

7.内部导数注意
先上传个文件到hdfs

hadoop fs -put dept.txt /data/

hadoop fs -ls /data,在/data目录下有dept.txt

然后执行下面这句两次

LOAD DATA INPATH '/data/dept.txt' INTO TABLE ruoze_dept;

报错发现/data下面没有dept.txt了,因为是内部表,第一次导入,depy.txt被移动到了ruoze_dept目录下面了。

8.从其它表导入数据
两张表注意导入的表和导入数据列数要一样,数据类型一样

 INSERT OVERWRITE TABLE ruoze_emp_test select empno,ename from ruoze_emp; 

9.把数据写进文件系统

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/ruoze'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT empno,ename FROM ruoze_emp;

www.htsjk.Com true http://www.htsjk.com/hive/38806.html NewsArticle HIVE DDL, 1.何为DDL? DDL: Data Definition Language create drop alter关键字开头的 2.hive的抽象 3.关于数据库存放位置和参数查询 开局自带一个default数据库,默认数据库存放位置: /user/hive/warehou...
相关文章
    暂无相关文章
评论暂时关闭