1,分区表使用时必须+上条件过滤:
1)全量表,day取最新分区,dt='2019-11-06'
2)拉链表-每日增量表,进行现订日期,入dt BETWEEN '2019-10-01' AND '2019-10-31'
2,多数据去重的时候,使用group by 代替count distinct :
如:计算订单个数的时候,原来使用count(distinct order)
SELECT
COUNT(order_id)
FROM (
SELECT order
FROM table
WHERE dt='2019-11-06' AND condition2 AND condition3
GROUP BY order
) a
3,子查询时减少*的使用:
如:SELECT * FROM ;正确方式:SELECT uid,trade_no,payer_member_id FROM ;需要什么字段搜索什么字段
4,慎用IN 和NOT IN,连续值过滤时用 BETWWEN AND 代替,特定非连续值时忽略;
如: age IN (1,2,3,4) 写成 age BETWEEN 1 AND 4
5,多表关联,先进行子查询后再进行关联;
SELECT
user_id,
COUNT(t1.cargo_id) AS cargo_id,
COUNT(t2.order_id) AS order_id
FROM(
SELECT
user_id,
cargo_id
FROM ods.cargo_daily_event
WHERE dt='2019-11-06'
) t1
INNER JOIN
(
SELECT
cargo_id,
order_id
FROM ods.order_daily_event
WHERE dt='2019-11-06'
)t2
ON t1.cargo_id=t2.cargo_id
GROUP BY user_id
6,表关联时加上ON条件,避免笛卡尔积;
7,表关联时一定要在子查询里过滤掉NULL值,避免数据倾斜;
8,不要对一个表进行重复处理,多使用临时表,尽量做到一次处理多次使用;