Hive学习

建表

元数据 :描述数据的数据

表分类:主要分为内表和外表

内表:元数据和数据本身均被hive管理。删除表则全部删除。

外表:元数据被hive管理,数据本身存储在hdfs,不受hive管理。删除表则只删除元数 据,数据本身不变。

DDL(数据定义语言)

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]

external: 创建内部表还是外部表,此为内外表的唯一区分关键字。

comment col_comment: 给字段添加注释

comment table_comment: 给表本身添加注释

partitioned by: 按哪些字段分区,可以是一个,也可以是多个

clustered by col_name... into num_buckets BUCKETS:按哪几个字段做hash后分桶存储

row format:用于设定行、列、集合的分隔符等设置

stored as : 用于指定存储的文件类型,如text,rcfile等

location : 设定该表存储的hdfs目录,如果不手动设定,则采用hive默认的存储路径

基本操作

show databases;查看所有数据库

show tables; 查看所有表

show create table 表名; · 查看已存在表的详细信息

alter table 表名 rename to 要改成的表名; 更改表

alter table 表名 add columns( age int comment "我是新增的字段") 添加新字段

insert into 表名 partition(分区字段='要分的区名') values(要添加的数据);新增数据

drop table 表名; 删除表;

show views;查看所有视图

truncate table 表名; 清楚表数据

创建视图

show views; 查看所以视图

cerate view 视图名 as select 要查询的字段 from 表名; 创建视图

drop view 视图名; 删除视图

select * from 视图名; 查看视图

DML(数据管理语言)

加载hdfs文件

LOAD DATA INPATH '要上传的文件路径' OVERWRITE INTO TABLE 表名 PARTITION (come_date=20170904);

将查询结果插入到数据表

insert overwrite table 表名 partition(come_date='20170905')
select
id,username,classid,classname 
from 表名 
where come_date='20170904';

一次查询多次插入

from student
insert overwrite table student partition(come_date='20170906') select id,username,classid,classname where come_date='20170905'
insert overwrite table student partition(come_date='20170907') select id,username,classid,classname where come_date='20170905'
insert overwrite table student partition(come_date='20170908') select id,username,classid,classname where come_date='20170905'

动态分区模式

INSERT OVERWRITE TABLE tablename 
PARTITION (col_name) select_statement FROM from_statement

设置非严格模式

set hive.exec.dynamic.partition.mode=nonstric;

外表的说明和使用

· 内外表的唯一区分标识,即为external关键字。创建表时候有,则为外表,没有则默认均为内表。

· 内表和外表的hdfs目录,均可以自由指定location,如不指定,则数据存储在hive的默认hdfs目录中,且后续均可以自由改变,但改变的场景不多,一般为了省事都不会轻易改变存储目录。

  • 应用场景
    • 如果表数据是外部load过来的,即为不可hive内部自生成,此时的表必须是外表。
    • 如果表数据是hive内部可以自生成的,即不需要依赖外部的load数据,则此时的表应该是内表。

DQL(数据查询语言)

SELECT [DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list [HAVING condition]]
[ CLUSTER BY col_list
   | [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list]
]
[LIMIT number]

DISTRIBUTE BY col_list

以指定字段作为key作hash partition,保证相同的key会到同一个reduce去处理。

Sort By col_list

以指定字段作为单个reduce排序的key,保证单个reduce内的key有序排列输出。

Order By col_list

只会生成一个reduce任务,对全部排序

CLUSTER BY col_list

以指定字段作为key做hash partition,保证相同key会到同一个reduce去处理。该命令相当于distributed by col_list和sort by col_list的联合使用。

基本操作

limit 分页限制

order by 排序 desc降序/asc升序

inner join 将左表和右表满足联接条件的数据,全部查询出来

left outer join 以左表为主,将左表数据全部保留,右表没有关联上数据字段置成NULL

right outer join 以右表为主,将右表数据全部保留,左表没有关联上数据字段置成NULL

full outer join 没有关联上数据字段全部置成NULL,full join=inner join+left join+right join union all 将所有表数据,完全叠加在一起,不去重。要求:所有表的字段和类型完全一致union 将所有表数据,完全叠加在一起,总体去重。要求:所有表的字段和类型完全一致。

Hive 重要说明

rdb sql等值连接

select * from table1 t1,table2 t2  where t1.key=t2.key

对分号敏感性(新版本没有问题)

select concat(key,concat(';',key))  from table1;

hive当中的子查询,必须要给予别名

NULL值判断

hql中用is NULL或者is not NULL来判断字段是否是NULL值,与""没有直接关系

Hive系统函数

show functions 查看所有系统函数

count 统计记录行

if 判断

coalesce 将参数列表中第1个不为null的值作为最后的值

case...when 分支判断

split 将字符串拆分成一个数组

explode:将一个集合元素,打散成一行一行的组成,即将一行改成多行,换句话说行转列

lateral view: 与explode联用,形成一张新表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值