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

saiku连接infiniDB数据库

1,日期维度无结果。

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

          表最后一列(日期字段)匹配出错,用“like %日期%”可以。说明入库时写入多余的空白符,因为直接看不出。windows表数据,放到linux下,后面也是\a\0,要用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存储。用的话,会有逻辑上问题。。(后期详细排查)

 

 

 

转载于:https://www.cnblogs.com/cl1024cl/p/6205512.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值