持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第31天,点击查看活动详情
之前介绍过很多的hive函数的应用以及实际案例设计方案,在开发过程中肯定遇到过很多问题和sql报错,下面就沉淀一些常见的问题排查思路以及报错原因等等。
首先最最严重的结果就是数据炸裂,因为在我们的日常开发过程中,经常会应用到左连接的查询方式,这种查询方式最容易出现也是最可怕的结果就是数据炸裂,即关联的子表中有多条数据,导致最终结果的数据条数远远大于底表数据。
这种数据炸裂的情况怎么排查原因呢?当一个表中用了很多的左连接,肯定不能一一查验是哪个左连接出了问题,那样太费时间了,首先查询出唯一键的所有条数,一一查看哪个字段是不一样的,不一样的字段所在的表就是导致数据炸裂的子表,当然你也会说,就是有这么多条数据,怎么就是炸裂不是正常的呢,实际上我们对于唯一键肯定只需要一条数据,那么每个字段都只会有一个值,所以这里需要对子表数据做过滤。另外还有一种情况是所有字段均一模一样,这时候就只能一一验证每个子表中的数据,有多条的那种就是数据又问题,需要做过滤条件的。
在开发中正常的业务表一般我们都是清楚数据结构的,有一些上传导入的表需要认真排查数据问题的。
另外还有一种情况导致了数据炸裂,那就是数据表中包含了默认值,默认值匹配上了主表的数据,就会造成炸裂情况,这很容易忽略对默认值的过滤,造成笛卡尔积问题。
select
city_id
,city_name
from test.table_table_test
where pt='${-1d_pt000000}'
and city_id <> '100000000'