• saiku查询出错如何debug(saiku查询过程的本质),以及相关workbench的schema设置


    saiku连接infiniDB数据库

    1,日期维度无结果。

    原因:(数据库表内容出错)

              表最后一列(日期字段)匹配出错,用“like %日期%”可以。说明入库时写入多余的空白符,因为直接看不出。windows表数据,放到linux下,后面也是a,要用dos2unix命令转换。

    2,workbench :

    (1)维度dimension设置:

          事实表外键和维度表主键关联:从不同维度查询,实际就是两个表联合查询,本质是两个表做自然连接,因此事实表主键和维度表外键要一致,一一对应。如果类型不一致,报错:

    SQLException: IDB-1002: 'factdownloadsnew' and 'dimstore' have incompatible column type specified for join condition.

    错误设置为事实表外键用datevalue,维度表主键设为id。

    (2)column设置:这是选择要查看什么内容(本质是 group by column的设定)看哪一列,比如月份,选month,则在主外键自然连接后,按month做group by,进行统计。

            但saiku会自动加上该列的上一级列,进行操作,如month会自动加上year:

    saiku自动生成的sql语句为:

    SELECT
     `dimDate`.`year` AS `c0`,
     `dimDate`.`month` AS `c1`,
     sum(
      `factDownloadsNew`.`downloads`
     )AS `m0`
    FROM
     `dimDate` AS `dimDate`,
     `factDownloadsNew` AS `factDownloadsNew`
    WHERE
     `factDownloadsNew`.`date_time` = `dimDate`.`datevalue` // 自然连接要对应
    GROUP BY
     `dimDate`.`year`,
     `dimDate`.`month`

    group by也自动变成两列。

    结果:

    对比,将column设置为datevalue(原来是month):

    SELECT
     `dimDate`.`year` AS `c0`,
     `dimDate`.`datevalue` AS `c1`,
     sum(
      `factDownloadsNew`.`downloads`
     )AS `m0`
    FROM
     `dimDate` AS `dimDate`,
     `factDownloadsNew` AS `factDownloadsNew`
    WHERE
     `factDownloadsNew`.`date_time` = `dimDate`.`datevalue`
    GROUP BY
     `dimDate`.`year`,
     `dimDate`.`datevalue`

    (3)namecolumn不设定,默认为用column。要显示的内容。

    总结:

     维度度主外键关联,实现自然连接;

     column为查看内容,实现group by。自动加上一级。

     

      

    用saiku查错:(saiku查询过程的本质)

     mondrian_sql.log日志信息(tomcat/logs下)中,会给出组装的sql查询语句。sql里直接执行该sql查询语句,看结果,和执行过程。

    从执行记录看,一个查询分4步,如

    Monthdownloads,组成sql

    1       select `dimDate`.`year` as `c0`, `dimDate`.`yearname` as `c1`, `dimDate`.`month` as `c2`, `dimDate`.`monthname` as `c3` from `dimDate` as `dimDate` group by `dimDate`.`year`, `dimDate`.`yearname`, `dimDate`.`month`, `dimDate`.`monthname` order by ISNULL(`dimDate`.`year`) ASC, `dimDate`.`year` ASC, ISNULL(`dimDate`.`month`) ASC, `dimDate`.`month` ASC

    统计年和月从dimdate,并分组。

     

    2       select count(distinct `year`) from `dimDate`

    3       select count(distinct `month`) from `dimDate`

    年月个数

    4       SELECT

             `dimDate`.`year` AS `c0`,

             `dimDate`.`month` AS `c1`,

             sum(

                       `factDownloadsNew`.`downloads`

             )AS `m0`

    FROM

             `dimDate` AS `dimDate`,

             `factDownloadsNew` AS `factDownloadsNew`

    WHERE

             `factDownloadsNew`.`date_time` = `dimDate`.`datevalue`

    GROUP BY

             `dimDate`.`year`,

             `dimDate`.`month`

    核心,表连接查看。

    负数问题:当反复几次计算后,会出现负数。如计算每天的下载量后,在看每年和每月的会出现负数现象。

    .xml的schema文件设置中,cube属性中的cache被勾选(默认)。不勾选,无缓存,不出现负数。

    cache是cube的事实表是否用modrian存储。用的话,会有逻辑上问题。。(后期详细排查)

  • 相关阅读:
    JSP界面之间如何实现传值
    绝对路径的用法
    每日日报2020.8.12 1905
    每日日报2020.8.8 1905
    每日日报2020.8.17 1905
    每日日报2020.8.15 1905
    每日日报2020.8.13 1905
    每日日报2020.8.10 1905
    每日日报2020.8.16 1905
    每日日报2020.8.9 1905
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205512.html
Copyright © 2020-2023  润新知