当前位置:Gxlcms > mysql > saiku查询出错如何debug(saiku查询过程的本质),以及相关workb

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

时间:2021-07-01 10:21:17 帮助过:47人阅读

saiku连接infiniDB数据库 1,日期维度无结果。 原因:(数据库表内容出错) 表最后一列(日期字段)匹配出错,用like %日期%可以。说明入库时写入多余的空白符,因为直接看不出。windows表数据,放到linux下,后面也是\a\0,要用dos2unix命令转换。 2,workb

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步,如

Month的downloads,组成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存储。用的话,会有逻辑上问题。。(后期详细排查)

\

人气教程排行