视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
saiku查询出错如何debug(saiku查询过程的本质),以及相关workb
2020-11-09 15:46:11 责编:小采
文档

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

下载本文
显示全文
专题