蚂蚁森林题目的第二题没看到 先跳过
加载数据:
load data inpath “/daya/dataload//ids.csv” into table bit.name PARTITION(dt=“2019-03-06”);
desc formatted 表名/ desc 表名
一个表是一个文件夹, 分区是表的文件夹下再建文件夹, 以分区名建文件夹
hive中无索引
insert 语句是从hive的表a导入到hive的表b
sqool是把hive的表导入到mysql 中的
truncate 是清空表,只能删除内部表 不能删除外部表
sql关键词写的顺序:
select
from
join on
where
group by
order by
having
limit
执行顺序:
from -> join on -> where -> group by -> select|having -> order by -> limit
1. 因order by后面可以使用在select命名的别名,所以order by在select之后
2. 先走过滤再走查询
sql优化的方式:
第一种:
select *
from A
join B
on A.id=Bid
where A.id>100
这样的方式会查出很多冗余的信息,优化的方式:
先走的是子查询,过滤出来所需的数据,再进行join
select *
from
(
select id from A where A.id>100
) t1
join B
on t1.id=B.id
如果需要对查询的结果进行再次加工,需要进行子查询,就是再包裹一层。
sql中分为以下几种: 一和多指的是行数, 不是参数
- 一进多出 exploed 炸裂函数
- 一进一出 udtf, nvl函数
- 多进一出 sum等聚合函数
distinct去重是将数据放到一个reduce中, 处理的数据量会很大;
每个用户在2019-10之前的总低碳量, 因为是对每个人计算总量,是以人为单位的,所以要对人分组 group by
select uid,
sum(low_carbon)
from table_name
where date_format(regexp_replace(date_dt, '/', '-'), 'yyyy-MM')<'2019-10'
group by uid