Hive DML

作者: 歌哥居士 | 来源:发表于2019-03-30 12:33 被阅读0次

Load 数据文件

语法:LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
说明:
从本地到HDFS是复制,从HDFS到HDFS上的Hive数据库是移动。
LOCAL表示从本地。
INTO 是追加, OVERWRITE INTO 是覆盖。

Insert 插入数据

hive> create table student2(id int,name string) 
       partitioned by(month string, day string)
       row format delimited fields terminated by ' ';

示例1,普通插入:
hive> insert into table student2 partition(month=202001,day=01)
      values(1,'baozi1'),(2,'baozi2'),(3,'baozi3');

示例2,从查询结果插入:
hive> insert into table student2 partition(month=202001,day=02)
       select * from student;

示例3,同一表查询结果多插入:
hive> from student
       insert into table student2 partition(month=202001,day=03)
       select *
       insert into table student2 partition(month=202001,day=04)
       select *;

Truncate 清空表数据

hive> truncate table student2;

Select 查询

select语法 同mysql
hive> select * from stu_partition;
hive> select * from stu_partition where month=202001;

rlike:正则表达式
hive> select * from stu_partition where name like '%2';
stu_partition.id    stu_partition.name  stu_partition.month
2   baozi2  202001
2   baozi2  202002
hive> select * from stu_partition where name rlike '[2]';
stu_partition.id    stu_partition.name  stu_partition.month
2   baozi2  202001
2   baozi2  202002

排序 --------------------------------------
order by:全局排序,一个Reduce。
sort by:“分块”排序,每个Reduce内排序。
distribute by:指定分区,“分块”排序。联合使用:distribute by分区,sort by对分区数据排序,可以是不同的字段。
cluster by:等于相同字段的distribute by + sort by。


查询桶表 --------------------------------------
语法:
tablesample(bucket x out of y on ...)
x:从第几个bucket开始
y:从x开始,下一个就是x+y,x+y+y.....
取几个:bucket数/y,y必须是bucket数的倍数或者因子。
* x必须小于等于y
示例:
hive> select * from stu_bucket tablesample(bucket 1 out of 4 on id);
stu_bucket.id   stu_bucket.name
1016    ss16
1012    ss12
1008    ss8
1004    ss4
hive> select * from stu_bucket tablesample(bucket 1 out of 1 on id);
stu_bucket.id   stu_bucket.name
1016    ss16
1012    ss12
1008    ss8
1004    ss4
1009    ss9
1005    ss5
1001    ss1
1013    ss13
1010    ss10
1002    ss2
1006    ss6
1014    ss14
1003    ss3
1011    ss11
1007    ss7
1015    ss15
hive> select * from stu_bucket tablesample(bucket 1 out of 2 on id);
stu_bucket.id   stu_bucket.name
1016    ss16
1012    ss12
1008    ss8
1004    ss4
1010    ss10
1002    ss2
1006    ss6
1014    ss14


case when 示例 --------------------------------------
emp_gender.txt
悟空 A 男
大海 A 男
宋宋 B 男
凤姐 A 女
婷姐 B 女
婷婷 B 女
hive> create table emp_gender(name string, dept_no string, gender string)
    row format delimited fields terminated by ' ';
hive> load data local inpath '/home/user000/data/emp_gender.txt' into table emp_gender;
hive> select dept_no,
    sum(case gender when '男' then 1 else 0 end) male,
    sum(case gender when '女' then 1 else 0 end) femail
    from emp_gender
    group by dept_no;
结果
A 2 1
B 1 2

行转列 示例 --------------------------------------
CONCAT(colA, str, colB) CONCAT(colA, colB) 
CONCAT_WS(separator, str1, str2, ...)
COLLECT_SET(col):汇总字段值产生array。

person_info.txt
孙悟空 白羊座 A
大海 射手座 A
宋宋 白羊座 B
猪八戒 白羊座 A
凤姐 射手座 A

hive> create table person_info(name string, constellation string, blood_type string) 
    row format delimited fields terminated by ' ';
hive> load data local inpath '/home/user000/data/person_info.txt' into table person_info;
hive> select t1.c1, concat_ws('|',collect_set(t1.name) )
    from  (select concat(constellation,',',blood_type) c1, name from person_info) t1
    group by t1.c1;

结果
射手座,A 大海|凤姐
白羊座,A 孙悟空|猪八戒
白羊座,B 宋宋

列转行 示例 --------------------------------------
EXPLODE(col):将map、array拆分成多行。
LATERAL VIEW:
语法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:和split、explode等UDTF一起使用,对拆分后的数据,根据数据原本的对应关系,进行聚合。

film_info.txt
《疑犯追踪》    悬疑,动作,科幻,剧情
《Lie to me》   悬疑,警匪,动作,心理,剧情
《战狼 2》      战争,动作,灾难

hive> create table file_info(movie string, category array<string>)
    row format delimited
    fields terminated by '\t'
    collection items terminated by ',';
hive> load data local inpath '/home/user000/data/film_info.txt' into table file_info;
hive> select movie,category_name
    from file_info
    lateral view explode(category) tmpTable as category_name;
+--------------+----------------+--+
|    movie     | category_name  |
+--------------+----------------+--+
| 《疑犯追踪》       | 悬疑             |
| 《疑犯追踪》       | 动作             |
| 《疑犯追踪》       | 科幻             |
| 《疑犯追踪》       | 剧情             |
| 《Lie to me》  | 悬疑             |
| 《Lie to me》  | 警匪             |
| 《Lie to me》  | 动作             |
| 《Lie to me》  | 心理             |
| 《Lie to me》  | 剧情             |
| 《战狼 2》       | 战争             |
| 《战狼 2》       | 动作             |
| 《战狼 2》       | 灾难             |
+--------------+----------------+--+

相关文章

  • 大数据开发之Hive篇4-Hive数据操作语言

    备注:Hive 版本 2.1.1 一.Hive的DML(数据操作语言)概述 Hive的DML语句继承了传统的关系型...

  • Hive DML

    Load 数据文件 Insert 插入数据 Truncate 清空表数据 Select 查询

  • 大数据分析利器之hive(三)

    大数据分析利器之hive 一、课前准备 安装hive环境 掌握hive sql常见的DDL和DML操作 掌握hiv...

  • hive dml sql

    INSERT 标准语法 Standard Syntax:INSERT INTO TABLE tablename [...

  • hive sql dml

    导入数据 唯一的导入数据库的方法 还可以从已经存在的表中向新创建的表中导入数据 导出数据 如果存储的数据格式正好为...

  • HIVE-DML

    DML LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO ...

  • 【Hive】DML、DQL

    load Local指的是HiveServer2机器 事务表 实现原理在原始数据文件的基础上,新增delta保存事...

  • Hadoop实验——Hive的安装和实验

    实验目的 理解Hive在Hadoop体系结构中的角色。 熟悉Hive的DDL命令与DML操作。 区分数据仓库和数据...

  • 大数据分析利器之hive(四)

    一、课前准备 1. 安装hive环境2. 掌握hive sql常见的DDL和DML操作 二、课堂主题 本堂课主要围...

  • Hive开发--Hive--DML(五)

    一、DML 操作 操作手册:https://cwiki.apache.org/confluence/display...

网友评论

      本文标题:Hive DML

      本文链接:https://www.haomeiwen.com/subject/mkpxvqtx.html