码迷,mamicode.com
首页 > 其他好文 > 详细

16-Hive DDL DML 内置函数

时间:2019-12-01 09:47:31      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:tmp   总结   执行   when   意思   existing   文件   string   ati   

创建表: 如下的格式

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path];

 

拷贝表结构,不拷贝表数据
CREATE TABLE ruozedata_emp2 LIKE ruozedata_emp;

Create Table As Select (CTAS)         #CTAS表示Create Table As Select
create table ruozedata_emp3 as select empno,ename,deptno from ruozedata_emp;

离线作业:天粒度,今天统计的是昨天的,统计结果写到一个tmp表里面

ALTER TABLE 老表 RENAME TO 新表;
ALTER TABLE ruozedata_emp3 rename to ruozedata_emp3_bak;

Drop Table 删表跑路
DROP TABLE table_name ruozedata_emp3_bak;   表和数据都会删除

Truncate Table 删表的数据,但是表还在
Truncate Table table_name;

 

 

Drop Table和Truncate Table面试经常问到

#################################################################

技术图片

 

 

 

技术图片

 

 

技术图片

 

 

内部表和外部表
metadata: TBL_TYPE
data: Table Type

hive中有2大类,managed table 和 external table,如下                    #external是外部的意思,外部表时候,通常把数据不放在默认的路径下  

默认情况下,create table table_name就是内部表

create external table table_name 是外部表

技术图片

 

 

 技术图片

 

 

技术图片

 

 

上面的发现在mysql中有元数据,在hdfs中也有数据

技术图片

 

 

 技术图片

 

 

技术图片

 

 

技术图片

 

 所以对于managed内部表而言,执行drop table table_name时候,元数据和HDFS上面的数据都没了

下面来看外部表 terminated,外部表,公司一般走路径,也就是说不放在默认的路径中

CREATE EXTERNAL TABLE 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‘
LOCATION ‘/d7_externel/emp/‘ ;

这个时候元数据和hdfs中都有数据了

技术图片

 

 

 技术图片

 

 

技术图片

 

 技术图片

 

 技术图片

 

 

但是HDFS中数据还在

技术图片

 

 

 

技术图片

 

 总结:

MANAGED_TABLE
DROP : data + metadata  都会被删除掉

 

EXTERNAL_TABLE
DROP: metadata 被删除 但是 HDSF不删

上面的2个区别,面试经常会被问到

##############################################################################

create table ruozedata_dept(
deptno int,
dname string,
loc string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t‘;

load data local inpath ‘/home/hadoop/data/dept.txt‘ into table ruozedata_dept;

技术图片

技术图片

 

 上面数据就重复了,此时需要用overwrite 防止重写

 

 

load data inpath ‘hdfs://hadoop000:8020/wc/dept/dept.txt‘ into table ruozedata_dept;

 

 

LOAD DATA [LOCAL] INPATH ‘‘ [OVERWRITE] INTO TABLE XXX;
LOCAL:从本地系统 linux
不带LOCAL: 从Hadoop文件系统 HDFS

OVERWRITE 数据覆盖
不带OVERWRITE 追加

#############################################################

技术图片

 

 

 技术图片

下面来把数据导出

INSERT OVERWRITE LOCAL DIRECTORY ‘/home/hadoop/tmp/empout‘
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t‘
SELECT empno,ename FROM ruozedata_emp;

 

SELECT empno,ename FROM ruozedata_emp;

 

select ename,sal,
case
when sal>1 and sal<=1000 then "lower"
when sal>1000 and sal<=2000 then "just so so"
when sal>2000 and sal<=4000 then "ok"
else "high"
end
from ruozedata_emp;                   #显示如下

技术图片

 

16-Hive DDL DML 内置函数

标签:tmp   总结   执行   when   意思   existing   文件   string   ati   

原文地址:https://www.cnblogs.com/python8/p/11964928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!