393.【跟着大领导】排除法,一个一个 join

2022-08-10  本文已影响0人  七镜

不知道是网速原因,还是性能原因,我做星型数据(start schema)的性能比对测试时,往 snowflake 导入 1 亿条数据,昨晚导入完成之后,开始做执行测试 SQL。

结果,数据发现执行多表 join 查询时,获取不到结果,在咱们自己的云原生数仓下,在阿里的 adb pg 云原生数仓下执行都没问题,在 snowflake 云原生数仓下执行竟然不返回结果。

难道是 snowflake 有 bug?

抱着这个疑问,赶忙找大领导,我说,查询不到结果!(心里想的是:1. 数仓本身的 bug 问题我解决不了; 2. 又有机会找大领导一起调式问题了)

原始 SQL 如下:

    select count(*) from mdx.FACT_TABLE f, mdx.dim_10 dim_10, mdx.dim_100 dim_100, mdx.dim_1000 dim_1000,
        mdx.dim_10000 dim_10000, mdx.dim_100000 dim_100000, mdx.dim_1000000 dim_1000000, mdx.dim_10000000 dim_10000000
    where f.dim_10_id = dim_10.dim_10_id and 
          f.dim_100_id = dim_100.dim_100_ID and 
          f.dim_1000_id = dim_1000.dim_1000_id and
          f.dim_10000_id = dim_10000.dim_10000_id and 
          f.dim_100000_id = dim_100000.dim_100000_id and 
          f.dim_1000000_id = dim_1000000.dim_1000000_id and 
          f.dim_10000000_id = dim_10000000.dim_10000000_id

返回结果是 0,大领导让我先执行一个 join ,看看有没有数据?于是我修改 SQL 如下:

    select count(*) from mdx.FACT_TABLE f, mdx.dim_10 dim_10 where f.dim_10_id = dim_10.dim_10_id

返回结果是正常的。接下来大领导说:“你不是有一个 SQL 能查出来结果嘛,现在一个一个往上加 join…… 我现在不方便跟你线上会议,你自己解决一下。”

“分析问题,就是这样”
“没有捷径”

于是我修改 SQL 如下:

select count(*) from mdx.FACT_TABLE f, mdx.dim_10 dim_10, mdx.dim_100 dim_100 
    where f.dim_10_id =dim_10.dim_10_id and  f.dim_100_id = dim_100.dim_100_ID

返回结果是 0,ok,问题浮现出来了,从这里可以看出是 mdx.dim_100 这张表的问题,我进一步去查了下它的表结构,发现我导数据前,手动通过界面建表时,把列名写错了。(又是一个人工操作的失误,这里有个启示:能自动化的地方,要尽量用程序来做,减少人工的失误,人工要尽量用在程序涉及不到的地方

执行 SQL 如下:

ALTER TABLE DIM_100 RENAME COLUMN DIM_100 TO dim_100_id;

ok,将列名重命名之后,结果就对了。


手机上也有这次问题解决流程的记录,顺便写在文章里,多加深印象。两点:

  1. 排除法
  2. 自动化
上一篇下一篇

猜你喜欢

热点阅读