1、关于NULL值排序
①HIVE
时间类型:
SELECt id
FROM (
SELECt GETDATE() id
UNIOn
SELECT NULL id
UNIOn
SELECT TO_DATE('20211101','yyyymmdd') id
) t
ORDER BY id ASC
;
结果:
+------------+
| id |
+------------+
| NULL |
| 2021-11-01 00:00:00 |
| 2021-12-03 16:36:06 |
数值类型:
SELECT id
FROM (
SELECt 1 id
UNIOn
SELECT NULL id
UNIOn
SELECT 2 id
) t
ORDER BY id ASC
;
结果:
+------------+
| id |
+------------+
| NULL |
| 1 |
| 2 |
+------------+
字符类型:
SELECT id
FROM (
SELECt '张王' id
UNIOn
SELECT NULL id
UNIOn
SELECT '李赵' id
) t
ORDER BY id ASC
;
结果:
+----+
| id |
+----+
| NULL |
| 张王 |
| 李赵 |
+----+
②Mysql
时间类型:
select
id from
(select now() id
union
select null id
) t order by id asc;
结果:
N
2021-12-03 16:40:44
数值类型:
select
id from
(select 1 id
union
select null id
union
select 2 id
) t order by id asc;
结果:
N
1
2
字符类型:
SELECT id
FROM (
SELECt '张王' id
UNIOn
SELECT NULL id
UNIOn
SELECT '李赵' id
) t
ORDER BY id ASC
;
结果:
N
张王
李赵
③Oracle
在Oracle数据库数据处理的SQL语句中,当表的排序列中含有null或者''时,缺省Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前。
如果你没有对null或''做处理时,这时做降序排序时,就会发现null或''是排在最前位的;做升序排序时,会发现null或''是排在最后位的。
nulls first和nulls last是Oracle Order by支持的语法,
如果order by 中指定了表达式Nulls first,则表示null值的记录将排在最前(不管是asc 还是 desc)
如果order by 中指定了表达式Nulls last,则表示null值的记录将排在最后(不管是asc 还是 desc)
2、合并小文件
set odps.merge.max.filenumber.per.job=50000; --值默认为50000个;当分区数大于50000时需要调整,最大可到1000000万,大于1000000的提交多次merge
ALTER TABLE 表名[partition] MERGE SMALLFILES;
3、排除某个不想要的字段
首先需要设置一个参数:
set hive.support.quoted.identifiers=None;
然后指定要剔除哪个字段:
insert overwrite table test partition(data_date=20211121)
select `(data_date)?+.+` from dm.dm_user_add ;
剔除多个字段:
## 最好按照字段顺序来写,遇到字段未过滤的时候把字段顺序换一下试试 select `(dateline|data_date)?+.+` from dm.dm_user_add



