saiku查询出错如何debug(saiku查询过程的本质),以及相关workbench的schema设置
2014-01-07 18:53
357 查看
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存储。用的话,会有逻辑上问题。。(后期详细排查)
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存储。用的话,会有逻辑上问题。。(后期详细排查)
相关文章推荐
- saiku查询出错如何debug(saiku查询过程的本质),以及相关workbench的schema设置
- 传值设置mybatis查询的 列名(字段名),以及如何查看mybatis中执行的SQL语句
- 传值设置mybatis查询的 列名(字段名),以及如何查看mybatis中执行的SQL语句
- MySQL数据库中字段设置了zerofill,页面上显示时整数前仍带有0以及如何查询字段注释
- 设置开发(Debug模式)与提交(Release模式)的运行环境以及如何屏蔽NSLog
- 如何设置VS2008 辅助编译代码提示相关函数以及相关函数的参数
- 为什么ESP8266 TCP透传过程会丢包?8266流控原理以及如何设置
- 如何利用nslookup命令查询mx记录?以及邮件相关记录
- 关于android view属性的归属以及如何在代码中设置相关属性总结
- 如何利用nslookup命令查询mx记录?以及邮件相关记录
- 微信测试帐号如何设置URL和Token,以及相关验证的原理
- 存储过程报错之后,后续语句如何执行,以及相关job下次执行时间怎样进行更新
- workbench导出的Schema文件,在saiku中运行出错。
- 关于vss如何连上服务器以及如何实现协同作业的相关设置
- JVM内存泄露和内存溢出后如何进行调优以及相关参数设置
- DedeCms模板 如何防被盗以及安全设置的一些方法
- 多条SQL语句对查询结果集的垂直合并,以及表设计时如何冗余字段
- js_前台页面如何设置radio、checkbox、select三者的值以及绑定事件,方便后台接收数据
- ORCLE-Select 语句执行顺序以及如何提高Oracle 基本查询效率
- Java - 如何设置请求的编码以及响应内容的类型?