美文网首页
393.【跟着大领导】排除法,一个一个 join

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

作者: 七镜 | 来源:发表于2022-08-10 20:53 被阅读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. 自动化

    相关文章

      网友评论

          本文标题:393.【跟着大领导】排除法,一个一个 join

          本文链接:https://www.haomeiwen.com/subject/tpiawrtx.html