1.length(null) 结果不是0是null,天真的我因为这个被坑苦了
还有SELECT if(length(null)<>12,'Y','N'), -- N if(length('')<>12,'Y','N') -- Y
这个也是个意想不到的错误
2.当一段sql报错,且不显示什么信息时,你就看看
表名.字段名,中间的.是不是写成了,
3.防止数据倾斜,这个真的太影响队列里的其他操作了,为避免数据倾斜,在2个地方需要额外注意,一个是表关联,一个是汇总数据。
在表关联时,可以
t1
left join
t2
on nvl(t1.line,concat('hive1',rand())) = nvl(t2.line,concat('hive1',rand()))
在汇总数据时
select
id,
sum(sum_num)
from
(
select
id,
cast((rand() * 100) * 100 as int) as idx,
sum(num) sum_num
from
table1
) a group by id
虽然多包一层,但可以避免数据倾斜
4.建表时,要加存储格式和压缩格式,要不然碰到大数据量运行,会吃光运行资源,而且存储资源也会占光
create table ta1 stored STORED AS ORC TBLPROPERTIES ('orc.compress' = 'SNAPPY')
select
...
from ta
5.去除字符串特殊字符。如:(空字符串、双引号、换行符、回车、tab键、‘null’、‘NULL’、‘N/A’、‘#N/A’、‘n/a’、‘#n/a’ )时,置为空
SELECT regexp_replace(line, '"|\\n|\\t|\\r|\\s+|null|NULL|N/A|#N/A|n/a|#n/a', '');
6.排序
row_number() over(partition by line1 order by line2 desc)
order by 后面跟的字段类型要格外注意,如果是数字类型倒没啥问题,但如果要是string类型,那么排的顺序会让人非常意外
如上,按金额排序,按说je为10的排第一,但是因为该字段是string类型,所以排序出现问题
版权声明:本文为qq_45292079原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。