一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情
Hello,非常感谢你的关注~ 我是机器学习与风控,一名末流985的本硕,无顶会、无大厂核心部门实习,拥有多个比赛的竞赛经历,秋招刷了leetcode500题,在秋招提前批中收获字节跳动,腾讯,阿里,美团等大厂offer,最终选择入职字节风控,从事与黑产对抗的工作。我会定期分享我的春招、秋招亲身求职体验;算法岗日常工作;数据挖掘比赛,经典图模型等日常学习等有料也有趣的内容~秋招到了,欢迎各位私信找我内推!!!部门缺少开发,算法等岗位验证缺人。
数据操控语言DML
加载数据
\
load [local] inpath 'filepath' [overwrite] into table tablename [partition]
插入数据:
普通插入数据:
insert overwrite table tablename1 [partition ()] select_statement1 from fromo_statement;insert into table tablename1 [partition()] select_statement1 from from_statement;
多重插入数据:扫描一次,插入多个表。
\
from student
insert overwrite table student_insert1
select num
insert overwrite table student_insert2
select name;
动态分区插入:表数据插入的时候,对应了不同的分区,怎么办?
需要先设置使用动态分区,然后插入的时候字段要 指定哪个字段是分区。
\
-- 开启动态分区并使用非严格模式
set hive.exec.dynamic.partition = true;
set hive.exec.dynamic.partition.mode = nonstrict;
\
-- 动态分区插入
insert into table student_partition partition (Sdept)
select num, name, sex, age, dept
from student;
\
Hive的文件时存储在HDFS上的,而HDFS上又不支持对文件的任意修改。
HDFS文件作为原始数据,用delta保存操作的记录增量数据;
当访问Hive数据时,根据HDFS原始文件和delta增量文件做合并,查询最新的数据。
DML-Update、Delete 前提表是事务表。
\
基础语法:
多个字段distinct,整体去重
where分组前过滤,不能使用聚合函数
having分组后过滤,可以使用聚合函数
limit偏移量
执行顺序:
from > where > group(含聚合) > having > order > select;
高级语法:
order by
对输出的结果进行全局排序,当底层使用MR引擎执行的时候,只会有一个reducetask执行,如果输出的行数太大,会导致运行很长时间。asc|desc
cluster by
根据指定字段将数据分组,每组内再根据该字段正序排序(只能正序),根据同一个字段,分且排序。
\
distribute by + sort by
相当于把cluster by的功能一分为二,distribute by负责根据指定字段分组,sort by负责分组内排序规则。分组和排序的字段可以不同。 union联合查询 将多个select语句的结果合并为一个结果集,distinct会删除重复行;all会保留重复行;
6、 Join连接: 多种。笛卡尔积,cross join,完整的连接。如果有表a和表b,表a有m条记录,表b有n条记录,则一般笛卡尔积后得到的记录条数是m*n条,记录之间的组合是随意的。 而内连接则是建立在表a和表b的结构中有相同的列名的基础上进行的。 UDF:操作单个数据行,产生单个数据行; UDAF:操作多个数据行,产生一个数据行。 UDTF:操作一个数据行,产生多个数据行一个表作为输出
多行转单列
多列转多行
单列转多行
explode函数
爆炸函数,将一个集合或者数组中的每个元素展开,将每个元素变成一行,explode(map|array)。 相当于一个元素变成了多行一列。
使用lateral view侧视图来解决UDTF函数的一些查询限制问题。将UDTF的结果构建成一个类似于视图的表,然后将原表中的每一行和UDTF函数输出的每一行进行连接,生成一张新的虚拟表。