1.建库语句:CREATE DATABASE [IF NOT EXISTS] database_name[COMMENT database_comment][LOCATION hdfs_path][WITH DBPROPERTIES (property_name=property_value, ...)];例:create DATABASE if NOT EXISTS hive_db2comment "my first database"location "/hive_db2"
2.库的修改:alter database hive_db2 set DBPROPERTIES ("createtime"="2018-12-19");
3.库的删除drop database db_hive cascade if exists; -- 删除存在表的数据库
3.建表语句: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] DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char][MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)][STORED AS file_format] Textfile[LOCATION hdfs_path][TBLPROPERTIES (property_name=property_value, ...)][AS select_statement]例1:create table student2(id int COMMENT "xuehao", name string COMMENT "mingzi")COMMENT "xueshengbiao"ROW format delimitedfields terminated by '\t'STORED as Textfilelocation '/student2' -- 直接加载该目录下的数据文件到表中TBLPROPERTIES ("createtime"="2018-12-18");例2:create table student(id int, name string)row format delimitedfields terminated by '\t';load data local inpath '/opt/module/datas/student.txt' into table student;例3:create table student4 like student2; -- 仅复制表结构
4.导入数据语句4.1 不加local则导入hdfs上文件,但会剪贴原文件,local本地仅粘贴load data [local] inpath '/opt/module/datas/student.txt' [overwrite] into table student [partition (partcol1=val1,…)];4.2 创建表并导入数据(依据以存在的表)create table student6 as select * from student; -- 仅导入数据,不会导入其他细节属性 --被创建表不能是外部表 -- 被创建表不支持分区及分桶4.3 覆盖插入insert overwrite table student3 select * from student;4.4 插入带分区的表insert into table stu_par partition(month = '08') select id ,name from stu_par where month = '09';4.5 将单表中数据导入多表from studentinsert into table student4 select *insert into table student5 select *;4.6 多分区导入单表from stu_parinsert into table stu_par partition(month = '06')select id ,name where month = '08'insert into table stu_par partition(month = '07')select id,name where month = '10';
5.表的修改操作5.1 修改表的属性alter table stu_ex set TBLPROPERTIES ('EXTERNAL' = 'TRUE');5.2 重命名表名alter table student4 rename to student3;5.3 修改表的serde属性(序列化和反序列化)alter table table_name set serdepropertyes('field.delim'='\t');
6.列的更新操作6.1 修改列语法ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]6.2 增加或替换列语法ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) 例1:增加列:alter table student2 add COLUMNS (score double);例2:修改列:alter table student2 CHANGE COLUMN score score int AFTER id;例3:替换列(全部替换):alter table student2 replace COLUMNS (id int, name string);
7.带有分区的表7.0 查看分区show partitions table_name;7.1 创建单个分区create table stu_par(id int, name string)partitioned by (month string)ROW format delimitedFIELDS terminated by '\t';-- 错误示例create table stu_par2(id int, name string)partitioned by (id int)ROW format delimitedFIELDS terminated by '\t';  错!!!!(不能以数据库字段作为分区)-- 加载数据到指定分区(分区不存在则自动创建)load data local inpath '/opt/module/datas/student.txt' into table stu_par partition(month = '12');load data local inpath '/opt/module/datas/student.txt' into table stu_par partition(month = '11');-- 合并分区查询结果select * from stu_par where month = '11'unionselect * from stu_par where month = '12';7.2 增加多个分区alter table stu_par add partition (month = '08') partition(month='07');7.3 删除多个分区alter table stu_par drop partition(month='08'),partition(month='09');7.4 创建多级分区create table stu_par2(id int, name string)partitioned  by (month string, day string)row format delimitedFIELDS terminated by '\t';7.5 导入数据到多级分区load data local inpath '/opt/module/datas/student.txt' into table stu_par2 partition (month='12',day='19');7.6 向多级分区增加分区alter table stu_par2 add partition(month = '12', day = '17');7.7 查询多级分区中的数据select * from stu_par2 where day = '18';7.8 修复分区(也可以使用添加分区的语句)msck repair table dept_partition2;
8.创建外部表(删除表不会删除表中数据,仅删除表的元数据)create external table stu_ex2(id int, name string)ROW format delimitedFIELDS terminated by '\t'location '/student';8.1 外部表与内部表的转换alter table stu_ex set TBLPROPERTIES ('EXTERNAL' = 'TRUE');
9.数据的导出9.1 导出同时格式化(不加local则导出到hdfs)insert overwrite local directory '/opt/module/datas/student'row format delimitedfields terminated by '\t'select * from student;9.2 hadoop命令导出到本地dfs -get /user/hive/warehouse/student/month=201709/000000_0 /opt/module/datas/export/student3.txt;9.3 shell命令导出hive -f/-e 执行语句或者脚本 > file  -- -f跟文件,-e跟执行语句9.4 export仅可以导出到hdfs,常用于hdfs集群hive表迁徙export table default.student to '/user/hive/warehouse/export/student'; -- 同时会导出表的元数据
10.数据的导入(仅能导入export导出的数据,因为需要获取表的元数据)import table table_name from 'export导出数据的路径';
11.清除表中数据truncate table student; -- 只能删除管理表,不能删除外部表中数据
12.Like、RLike:RLike可以使用java的正则表达式
13.group by及having的使用 -- hive中对于使用group by后查询字段仅限group by的字段及聚合函数select deptno, avg(sal) avg_sal from emp group by deptno having avg_sal > 2000;
14.mapreduce的join   14.1 mapreduce中的reducejoin特点:在mapper阶段进行数据关联标记,在reducer阶段进行数据聚合14.2 mapreduce中的mapjoin特点:将小表加载到内存中,在mapper阶段根据内存中的数据对大表进行数据处理,没有reduce阶段
15.HQL的join15.1 仅支持等值连接不支持非等值连接例:不支持select * from A left join B on A.id != B.id;15.2 不支持在on条件中使用‘or’15.3 每个join都会启动一个mapreduce任务,但hive默认开启mapreduce优化关闭mapreduce优化:set hive.auto.convert.join=false;
16.order by会进行全局排序,则reduce数量被看作1个,效率低下
17.sort by -- 局部排序对于每个mapreduce各分区进行局部排序,分区中的数据随机给定
18.distribute by18.1 即mapreduce中自定义分区操作,hql书写规则:先分区后排序  18.2 distribute by的分区规则是根据分区字段的hash码与reduce的个数进行模除后,余数相同的分到一个区。
19.cluster by当distribute和sort字段相同时可用cluster进行替代,默认正序,单不支持desc倒序
20.分桶 -- 分桶表的数据需要通过子查询的方式导入20.1 开启分桶的设置set hive.enforce.bucketing=true;20.2 分桶表的创建create table stu_buck(id int, name string)clustered by(id) into 4 bucketsrow format delimited fields terminated by '\t';20.3 分桶的规则用分桶字段的hash值与桶的个数求余,来决定数据存放在那个桶,20.4 分桶与分区区别a. 分桶结果在表的目录下存在多个分桶文件b. 分区是将数据存放在表所在目录不同文件路径下c. 分区针对是数据存储路径,分桶针对的是数据文件,分桶可以在分区的基础粒度细化
21.分桶的抽样    21.1 抽样语法 -- 必须 x<=yselect * from table_name tablesample(bucket x out of y on bucketKey); -- on bucketKey可不写21.2 抽样规则a. y用来决定抽样比例,必须为bucket数的倍数或者因子,例:bucket数为4时,当y=2时,4/2=2,则抽取两个桶的数据,具体抽取哪个桶由x决定b. x用来决定抽取哪个桶中的数据例1:当bucket=4, y=4, x=2时,则需要抽取的数据量为bucket/y=1个桶,抽取第x桶的数据例2:当bucket=4, y=2, x=2时,则需要抽取的数据量为bucket/y=2个桶,抽取第x桶和第x+y桶的数据例3:当bucket=12, y=3, x=2时,抽bucket/y=4个桶,抽取第x桶和第x+2y桶的数据
22.NVL函数NVL(column_name, default_cvalue),如果该行字段值为null,则返回default_value的值
23.CONCAT_WS()函数使用规则:concat_ws(separator, [string | array(string)]+)例:select concat_ws('_', 'www', array('achong','com')) 拼接结果:www_achong_com
24.COLLECT_SET(col)函数使用规则:仅接受基本数据类型,将字段去重汇总,并返回array类型例(行转列):表结构name  xingzuo           blood孙悟空    白羊座           A大海   射手座           A宋宋   白羊座           B猪八戒      白羊座           A凤姐   射手座           A需求:把星座和血型一样的人归类到一起射手座,A            大海|凤姐白羊座,A            孙悟空|猪八戒白羊座,B            宋宋查询语句:SELECT CONCAT_WS(',', xingzuo, blood), CONCAT_WS('|', COLLECT_SET(NAME))FROM xingzuoGROUP BY xingzuo, blood
25.EXPLODE(爆炸函数)及LATERAL_VIEW)(侧写函数)25.1 explode:将列中的array或者map结构拆分成多行 -- 一般需结合lateral_view使用25.2 lateral_view: LATERAL VIEW udtf(expression) 表别名 AS 列别名例(行转列)select movie, category_namefrom  movie_info lateral view explode(category) table_tmp as category_name;
26.开窗函数 -- 常结合聚合函数使用,解决即需要聚合前的数据又需要聚合后的数据展示26.1 语法:UDAF() over (PARTITION By col1,col2 order by col3 窗口子句(rows between .. and ..)) AS 列别名(partition by .. order by)可替换为(distribute by .. sort by ..)26.2 over(): 指定分析数据窗口大小26.3 窗口子句 -- 先分区在排序然后接rows限定执行窗口26.3.01 n PRECEDING:往前n行数据26.3.02 n FOLLOWING:往后n行数据例:select name, orderdate, cost, sum(cost) over(partition by name order by orderdate rows between 1 PRECEDING and 1 FOLLOWING) from business;26.3.03 CURRENT ROW:当前行26.3.04 UNBOUNDED PRECEDING 表示从前面的起点26.3.05 UNBOUNDED FOLLOWING表示到后面的终点例:select name, orderdate, cost, sum(cost) over(partition by name order by orderdate rows between CURRENT ROW and UNBOUNDED FOLLOWING) from business;
27.LAG(col,n,default_val):往前第n行数据
28.LEAD(col,n, default_val):往后第n行数据例:select name, orderdate, cost, lag(orderdate, 1, 'null') over(partition by name order by orderdate)from business; -- 即获取前1行的orderDate数据
29.ntile(n):把有序分区中的行分为n组,每组编号从1开始 -- 分组规则详见:ntile的分组规则.sql例:select name,orderdate,cost, ntile(5) over(order by orderdate) num from business
30.Rank函数rank() 出现相同排序时,总数不变dense_rank() 出现相同排序时,总数减少row_number() 不会出现相同排序sql执行顺序from... where...group by... having.... select ... order by...hql执行顺序 from … where … group by … having … select … order by … 或from … on … join … where … group by … having … select … distinct … order by … limit存在开窗函数时,起码在order by之前执行例题1:-- 集合类型数据导入{"name": "songsong","friends": ["bingbing" , "lili"] ,       //列表Array, "children": {                      //键值Map,"xiao song": 18 ,"xiaoxiao song": 19}"address": {                      //结构Struct,"street": "hui long guan" ,"city": "beijing" }}基于上述数据结构,我们在Hive里创建对应的表,并导入数据。1.1 格式化数据为:songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijingyangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing1.2 建表语句:create table test(name string, friends array<string>,children map<string, int>,address struct<street:string, city:string>)row format delimitedfields terminated by ','collection items terminated by '_'map keys terminated by ':';1.3 数据写入语句load data local inpath '/opt/module/datas/test.txt' into table test;1.4 查询语句select friends[0] friend,children['xiao song'] age,address.city from test where name = 'songsong';

Hive sql常用语句相关推荐

  1. SQL常用语句一览(增删改查Easy)

    SQL常用语句一览 (1)数据记录筛选: sql="select*from数据表where字段名=字段值orderby字段名[desc]" sql="select*fro ...

  2. 【SQL常用语句或函数】

    SQL常用语句或函数 –查询字符串的长度 select length('北京市东城区王府井大街1188799号') from dual; –查询当前时间 values current date –查询 ...

  3. 数据库 SQL常用语句

    数据库 SQL常用语句 文章目录 数据库 SQL常用语句 一.前言 二.相关知识点实用性介绍 1.常用查询格式 2.WHERE子句常用的查询条件 3.多表连接查询 4.嵌套查询 5.字符匹配查询 6. ...

  4. SQL常用语句(基础篇)

    SQL常用语句(基础篇) 说明:创建数据库 CREATE DATABASE database-name 说明:删除数据库 drop database dbname 说明:备份sql server -创 ...

  5. Hive sql 常用命令总结

    原文地址:https://bigdata.51cto.com/art/201908/600847.htm 一.基础命令 1.数据库操作 show databases; # 查看某个数据库 use 数据 ...

  6. Teradata sql 常用语句总结

    工作使用TD数据库,转载常用语句方便查看 从参考文章中截取工作中经常的语句,不定时更新 参考文章1:https://blog.csdn.net/u010020099/article/details/8 ...

  7. SQL常用语句 笔记

    https://github.com/QInzhengk/Math-Model-and-Machine-Learning SQL笔记 1.常用MySQL命令 2.语法规范 3.语句分类 MySQL索引 ...

  8. Hive sql 常用命令2

    原文地址:https://zhuanlan.zhihu.com/p/132720059 基本概念 外部表EXTERNAL:删除表并不会删除数据,但描述表的元数据信息会被删除掉. 分区表:使用分区来水平 ...

  9. sql常用语句使用方法

    一.root用户密码丢失或重新设置 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = pass ...

最新文章

  1. 如何防止ISE综合时信号不被优化掉
  2. kubernetes入门(06)kubernetes的核心概念(3)
  3. python显示语言错误_Python错误和异常
  4. typecho 邮件mail插件 LoveKKCommentModify 美化版
  5. 第一步:python下PyGame的下载与安装
  6. Spring Cloud Spring Boot mybatis分布式微服务云架构(一)快速入门
  7. 修改url 参数_SEO优化设计,如何处理网址的动态参数?
  8. 【解读】Http协议
  9. Quartz-第四篇 常规quartz的使用
  10. H3C OSPF基本配置命令
  11. 数字图像处理与Python实现-边缘检测-Roberts算子边缘检测
  12. 计算机管理员改时间,电脑时间修改权限
  13. CPU使用率100%,如何解决
  14. 净览杏蚜诰接煤檀郊炎
  15. 10个值得珍藏的4K高清壁纸网站推荐
  16. SIPM模拟器 MIPS汇编语言实现读取文件
  17. 如何制作u盘pe启动盘?
  18. 行业网站十年改变了什么 电商网 -《电子商务世界》打造电子商务大社区
  19. char s[],char *s,char **s与char *s[]
  20. 生活中不可缺少的日常小知识(转载)

热门文章

  1. mac 部署 ansible 记录
  2. xampp php5.6,XAMPP for Linux
  3. 如何将电脑文件自动备份?
  4. m031开发 新唐_【M031LC2AE价格_新唐单片机M031LC2AE,M031LD2AE,32/64/128kFLASH,48pin_全速装置图片】-TG工业网...
  5. SpringBoot日志级别设置
  6. 华为magic book笔记本无法重装系统的麻烦
  7. 关于退火法的粗浅理解
  8. cad画1000线太长了_为什么在CAD里面我画50变成了1000?
  9. bzoj4399 魔法少女LJJ 线段树合并
  10. ARM TrustZone ----ARM信任区