Hive入门详解:包括数据模型,数据类型、常用函数等

一、Hive的几种数据模型

内部表 (Table 将数据保存到Hive 自己的数据仓库目录中:/usr/hive/warehouse)

外部表 (External Table 相对于内部表,数据不在自己的数据仓库中,只保存数据的元信息)

分区表 (Partition Table将数据按照设定的条件分开存储,提高查询效率,分区-----> 目录)

桶表 (Bucket Table本质上也是一种分区表,类似 hash 分区 桶 ----> 文件)

视图表 (视图表是一个虚表,不存储数据,用来简化复杂的查询)

注意:内部表删除表后数据也会删除,外部表数据删除后不会从hdfs中删除

1. 内部表/管理表

每一个Table在Hive中都有一个相应的目录存储数据

所有的Table数据都存储在该目录

每一个Table在Hive中都有一个相应的目录存储数据

所有的Table数据都存储在该目录

# 创建表

create table if not exists aiops.appinfo (

    appname string,

    level string,

    leader string,

    appline string,

    dep string,

    ips  array<string>)

    ROW FORMAT DELIMITED

    FIELDS TERMINATED BY ' '

    COLLECTION ITEMS TERMINATED BY ',';

# 自定义文件和记录格式

## 使用create table创建表,最后使用stored as sequencefile保存成sequence格式[默认是text格式]

# 数据库授权

hive> grant create on database dbname to user hadoop;

# 导入数据(本地导入和hdfs导入)

hive> load data inpath  'hdfs://hdfs-name/sure.csv' overwrite into table aiops.appinfo;

load data local inpath '/home/hdfs/online_state1' overwrite into table online_state PARTITION (end_dt='99991231');

# 查看表结构

hive> describe extended bgops;

hive> describe bgops;

# 修改列名

## 这个命令可以修改表的列名,数据类型,列注释和列所在的位置顺序,FIRST将列放在第一列,AFTER col_name将列放在col_name后面一列

hive> ALTER TABLE aiops.appinfo CHANGE hostnum ipnum int comment 'some 注释' AFTER col3;

# 修改表结构

ALTER TABLE aiops.appinfo replace columns (appname string,level string,leader string,appline string,dep string,ips array<string>);

ALTER TABLE appinfo replace columns (appname string,appline string,level string,leader string,dep string,idcnum int,idcs array<string>,hostnum int,ips array<string>);

## 增加表的列字段(默认增加到最后一列,可以使用change column 来调整位置)

hive> alter table appinfo add columns (appclass string comment 'app_perf_class');

# 导出表查询结果(会将结果导出到testoutput目录下)

hive> insert overwrite local directory './testoutput'

    > row format delimited fields terminated by "\t"

    > select ip,appname,leader from appinfo  LATERAL VIEW explode(ips) tmpappinfo  AS ip;

2.外部表的使用场景

原始日志文件或同时被多个部门同时操作的数据集,需要使用外部表

如果不小心将meta data删除了,HDFS上的数据还在,可以恢复,增加了数据的安全性

注意:使用insert插入数据时会产生临时表,重新连接后会表会消失,因此大批量插入数据时不建议用insert

tips1:在hdfs的hive路径下以.db结尾的其实都是实际的数据库

tips2:默认的default数据库就在hive的家目录

3. 分区表

注意:分区表通常分为静态分区表和动态分区表,前者需要导入数据时静态指定分区,后者可以直接根据导入数据进行分区。分区的好处是可以让数据按照区域进行分类,避免了查询时的全表扫描。

# 创建外部分区表,指定静态分区为dt

CREATE EXTERNAL TABLE if not exists aiops.tmpOnline(ip string,

status string,

....

)

PARTITIONED BY (

  dt string);

# 导入数据到静态分区表中(需要注意的是数据中没有dt字段)

load data local inpath '/home/hdfs/tmpOnline' overwrite into table aiops.tmpOnline PARTITION (dt='99991231');

# 动态分区表的使用(动态分区和静态分区表的创建时没有区别的)

# 注意:hive默认没有开启动态分区,需要进行参数修改

# 使用动态分区的记录中,必须在指定位置包含动态分区的字段才能被动态分区表识别

hive>set hive.exec.dynamic.partition.mode=nonstrict;

hive>

insert

  overwrite

table aiops.tmpOnline

partition(dt)

select

ip,appname,....,from_unixtime(unix_timestamp(),'yyyyMMdd') as dt from table;


# 手动添加分区

alter table tablename add partition (dt='20181009');

# 删除分区,数据也会删除(所以一般会使用外部分区表?)

## 注意:如果数据有变动,是无法将数据load到同一个时间分区的记录的

alter table tablename drop partition (dt='20181009');

# 查询分区表没有加分区过滤,会禁止提交这个任务(strict方式每次查询必须制定分区)

set hive.mapred.mode = strict|nostrict;

注意:在外部分区表中,如果将表删除了,重建表后只需要将分区加载进来即可恢复历史相关分区的数据。

多重分区的使用

# 创建多重分区表

create table log_m (

    id  int,

    name string,

    age int

)

partitioned by (year string,month string,day string)

row format delimited

fields terminated by '|'

collection items terminated by ','

map keys terminated by ':'

lines terminated by '\n';

# 插入数据

insert into table log_m partition  (year='2018',month='10',day='10') values(1,'biaoge',24);

insert into table log_m partition  (year='2018',month='10',day='09') values(2,'bgbiao',25);

hive> show partitions log_m;

OK

year=2018/month=10/day=09

year=2018/month=10/day=10

Time taken: 0.055 seconds, Fetched: 2 row(s)

hive>

# 多重动态分区

# 好像动态分区表不能直接load data

hive> insert into table log_m partition(year,month,day) values(3,'xuxuebiao',28,'2016','09','10');

hive> show partitions log_m;

OK

year=2016/month=09/day=10

year=2018/month=10/day=09

year=2018/month=10/day=10

# 查询分区数据

hive> select * from log_m where year = '2018';

OK

2 bgbiao  25  2018  10  09

1 biaoge  24  2018  10  10

2 bgbiao  25  2018  10  10

二、Hive的复杂数据类型的使用

三、Hive的常用函数

hive的所有函数文件(全部的)(加微信maochentingqiang发给你)

http://www.aboutyun.com/forum.php?mod=viewthread&tid=27181

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容