如何在百度开个网站,网建公司转型,网站模板代理电话,做网站如何变现1. 建表 拉取表2. 插入数据 insert select3. 查询3.1 查询语句语法/顺序3.2 关系操作符3.3 聚合函数3.4 where3.5 分组聚合3.6 having 筛选分组后结果3.7 显式类型转换 select产生指定值的列 4. join 横向拼接4.1 等值连接 不等值连接4.2 两表连接4.2.1 内连… 1. 建表 拉取表2. 插入数据 insert select3. 查询3.1 查询语句语法/顺序3.2 关系操作符3.3 聚合函数3.4 where3.5 分组聚合3.6 having 筛选分组后结果3.7 显式类型转换 select产生指定值的列 4. join 横向拼接4.1 等值连接 不等值连接4.2 两表连接4.2.1 内连接4.2.2 左外连接 右外连接4.2.3 满外连接 4.3 多表连接4.4 笛卡尔积 5. union 纵向拼接6. 排序6.1 order by 全局排序6.2 sort by reduce内部排序 7. 其他7.1 select中判断筛选出null7.1.1 MYSQL ifnull7.1.2 Hive SQL if( , , ) 1. 建表 拉取表
建表
create table student(name string, age BIGINT,subject arraystring, -- 学科score mapstring, float, -- 学科对应成绩address structhouseNumber: int, street: string
)
row format delimited
fields terminated by \t; -- 列间隔符加载数据
-- local 从本地加载省略则从HDFS加载
load data local inpath /root/covid/2020-02.csv into table covid2020;
-- 加载数据到分区
load data inpath /data/covid/2020-02.csv into table covid2020 partition(dt2020-02);2. 插入数据 insert select
-- overwrite 覆盖
-- into 追加
insert overwrite/into table table1
select id,name
from table2;-- 一次查询插入多个表或分区
from table2
insert into/overwrite table table1 partition(dt01)
select_value1
insert into/overwrite table table1 partition(dt02)
select_value2
;3. 查询
3.1 查询语句语法/顺序
注意先后顺序
select all/distinct expr1,expr2
from table_name
where condition -- 过滤
group by condition -- 分组查询
having condition -- 分组后组内过滤
order by col_list -- 最终查询结果排序
limit number
offset number
;3.2 关系操作符
-- 都为null或都不为null返回true
where A B -- 判空必须用is (not) null
-- 若string类型为,则hive的is null判断反回为False
where job is null-- in 集合
where job(col_name) in(研发 ‘销售’)
3.3 聚合函数
多行数据一起计算返回一行值
count(*) 统计行数包含null
count(col_name) 统计指定列的行数不包含null
max() 不包含null
min()
sum()
avg()select count(*) from table1;3.4 where
-- where 中可以使用函数
select * from table1 where length(name) 5;
-- where中不能使用聚合函数3.5 分组聚合
选择分组后select字段只能选择 分组的字段(job)、聚合函数。
-- 分组后 组内count(*)
select job,count(*)
from emp
group by job
;3.6 having 筛选分组后结果
select job,count(*) cnt
from emp
group by job
having cnt 2;-- 相当于
select job,cnt
from
(select job,count(*) cntfrom empgroup by job
) t
where cnt 2;3.7 显式类型转换 select产生指定值的列
selectnone as none_col1,cast(none as int) as none_col2显示类型转换 cast(‘100’ as int) select cast(12.1 as int); 12
4. join 横向拼接
4.1 等值连接 不等值连接
-- 等值连接
select *
from table1
join table2
on table1.id table2.id
;-- 不等值连接
on 中不是, 早期版本hive 不支持不等值连接4.2 两表连接
4.2.1 内连接
join 或inner join 两表连接字段的交集不能join的行不显示。
select tb1.name,tb2.name
from table1 tb1
join / inner join table2 tb2
on tb1.id tb2.id;4.2.2 左外连接 右外连接
left join 或left outer join 保留左表所有数据右表补空。 右外连接 相反。
select tb1.name,tb2.name
from table1 tb1
left/right join table2 tb2
on tb1.id tb2.id;4.2.3 满外连接
full join 或full outer join 保留两表左右不能连接的字段补空。
select tb1.name,tb2.name
from table1 tb1
full join table2 tb2
on tb1.id tb2.id;4.3 多表连接
select*
from table1
join table2
on table1.id table2.id
join table3
on table2.name table3.name(select id, namefrom stu_infowhere course_id 01
) t1
full outer join
(select id, namefrom stu_infowhere course_id 02
) t2
on t1.id t2.id
full outer join
(select id, namefrom stu_infowhere course_id 03
) t3
-- 如果某id 不在t1中在t2中
-- 如果t1.id 为空则返回t2.id,如果不为空则返回t1.id
on nvl(t1.id, t2.id) t3.id4.4 笛卡尔积
select *
from table1
join table2-- 或
select *
from table1, table25. union 纵向拼接
两表上下拼接对应字段的数量、类型都必须相同对应字段名不一样能连接上最终字段名以第一个表的字段名为准union 连接的必须是select查询语句连接完后当成一个select查询使用就行union all 不会对相同数据去重union会对上下两部分相同部分去重。
select *
from stu
where score 30
union
select *
from stu
where score 40
;6. 排序
6.1 order by 全局排序
默认升序asc desc 降序descend hive 最终执行reduce时只能一个reduce以实现全局排序数据量大时order by不合适 可以使用order by limit n 每个Map取出n个减少了reduce时的压力
select*
from table1
order by col_name desc
;6.2 sort by reduce内部排序
保证每个reduce内有序全局不保证有序。
-- 设置reduce个数
set mapreduce.job.reduces3;
-- 查看reduce个数
set mapreduce.job.reduces;-- reduce内部排序
select*
from emp
sort by col_1 desc;7. 其他
7.1 select中判断筛选出null
7.1.1 MYSQL ifnull
筛选出第二大的但可能初筛排序后只有一个再筛第二大为null ifnull 指定为null时替换为什么值。
selectifnull((selectsalaryfrom Employeeorder by salary desclimit 1offset 1),null) as No2_highest_salary7.1.2 Hive SQL if( , , )
如果column是null返回第二个值不是则返回第三个值
if(column is null, IS NULL, IS NOT NULL)