干货-SQL日常使用经验积累

一.背景

记录日常工作中使用到的Hive-SQL相关知识,不是基础的SQL语法介绍,一般是坑比较多的语句或者优化技巧。

二.语法

2.1hive简介

Hive的内置四大组件(Driver, Compiler, Optimizer, Executor)完成HQL到MapReduce的转换,在Hive执行HQL编译过程中,会从元数据库获取表结构和数据存储目录等相关信息,Hive只是完成对存储在HDFS上的结构化数据的管理,并提供一种类SQL的操作方式来进行海量数据运行,底层支持多种分布式计算引擎,影响 Hive 效率的几乎从不是数据量过大,而是数据倾斜、数据冗余、Job或I/O过多、MapReduce 分配不合理等等。

2.2hive常用

#1.分区和分桶
PARTITIONED BY(dt STRING, country STRING)
CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
#2.hive的抽样
#分桶抽样
select * from student tablesample(bucket 3 out of 32);
#随机采样:rand() 函数
select * from student order by rand() limit 100; // 效率低
select * from student distribute by rand() sort by rand() limit 100; // 推荐使用这种
#数据块抽样:tablesample()函数
select * from student tablesample(10 percent); # 百分比
select * from student tablesample(5 rows); # 行数
select * from student tablesample(5 M); # 大小
#3.in/exists实现和semi join
select a.id, a.name from a where a.id in (select b.id from b);
select a.id, a.name from a where exists (select id from b where a.id = b.id);
#可以使用join来改写:
select a.id, a.namr from a join b on a.id = b.id;
#应该转换成left semi join 实现
select a.id, a.name from a left semi join b on a.id = b.id;

2.2常用SQL语法记录

2.2.1日期相关

#取某一天是周几,返回0-6 周日-周六
select pmod(datediff('2020-12-06','1920-01-01')-3,7) as week
#若想返回 1-7
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值