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步,如
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动态代理查询出错
org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache. ...
- SQLITE 多进程查询出错database is locked
程序比较简单: 父进程查询数据库A表,没有更新操作 子进程同时查询数据库A表,查询出来的内容更新B表. 两个进程都放到while(1)循环中,速度慢的话就是2S执行一次就没有错,执行的速度快的话就会报 ...
- SQL--相关子查询 与 非相关子查询
SQL 子查询可以分为相关子查询 与 非相关子查询. 假设Books表如下: 类编号 图书名 出版社 价格 ---------------------------------------------- ...
- T-SQL查询语句(二):嵌套查询
一个select...From...Where查询语句块可以嵌套在另一个select...From...Where查询块的Where子句中,称为嵌套查询.外层查询称为父查询,主查询.内层查询称为子查询 ...
- T-SQL动态查询(2)——关键字查询
接上文:T-SQL动态查询(1)--简介 前言: 在开发功能的过程中,我们常常会遇到类似以下情景:应用程序有一个查询功能,允许用户在很多查询条件中选择所需条件.这个也是本系列的关注点. 但是有时候你也 ...
- DB 查询分析器 6.04 发布 ,本人为之撰写的相关技术文章达78篇
DB查询分析器 6.04 发布,本人为之撰写的相关技术文章达78篇 中国本土程序员马根峰(CSDN专访马根峰:海量数据处理与分析大师的中国本土程序员 http://www.csdn.net/artic ...
- mysql慢查询----pt-query-digest详解慢查询日志(linux系统)
一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdu ...
- MySQL简单查询详解-单表查询
MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...
- Hibernate_day04--课程安排_Hibernate查询方式_对象导航查询_OID查询
Hibernate_day04 上节内容 今天内容 Hibernate查询方式 对象导航查询 OID查询 HQL查询 查询所有 条件查询 排序查询 分页查询 投影查询 聚集函数使用 QBC查询 查询所 ...
随机推荐
- RxJava操作符(03-变换操作)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51649975 本文出自:[openXu的博客] 目录: Buffer FlatMap fla ...
- Android的log日志知识点剖析
log类的继承结构 Log public final class Log extends Object java.lang.Object ↳ android.util.Log log日志的常用方法 分 ...
- Spark内存管理-UnifiedMemoryManager和StaticMemoryManager
在Spark-1.6.0中,引入了一个新的参数spark.memory.userLegacyMode(默认值为false),表示不使用Spark-1.6.0之前的内存管理机制,而是使用1.6.0中引入 ...
- iOS下JS与OC互相调用(五)--UIWebView + WebViewJavascriptBridge
WebViewJavascriptBridge是一个有点年代的JS与OC交互的库,使用该库的著名应用还挺多的,目前这个库有7000+star.我去翻看了它的第一版本已经是4年前了,在版本V4.1.4以 ...
- spring @Qualifier注解使用
@Autowired是根据类型进行自动装配的.如果当Spring上下文中存在多个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在U ...
- bash与ksh数组使用
区别: bash与ksh在数组的使用中,最大的不同在于数组的定义. bash: declare -a arrayname ksh:set -A arrayname 其实,数组不用非要定义,在赋值的时候 ...
- Android简易实战教程--第六话《开发一键锁屏应用2·完成》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51885687点击打开链接 上一篇,初步开发了这个应用,功能都有了(见http:// ...
- Android初级教程理论知识(第十章Fragment与动画)
Fragment 用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容 生命周期方法跟Activity一致,可以理解把其为就是一个Activity 定义布局文件作为Fra ...
- 新手学python(1):解析XML与系统调用
最近需要做一个项目,完成一批音乐的格式转换.由于之前并未学习过python,所以想借此机会学一下.在介绍自己的学习过程之前,先把项目简要描述一下.目前在一台服务器a上有几十万首原始的MP3音乐文件,现 ...
- iOS中 常用的mac终端指令汇总 技术分享
通常情况下,只有高端用户才会经常用到终端应用.这并不意味着命令行非常难学,有的时候命令行可以轻松.快速的解决问题.相信所有Mac用户都尝试过命令行,今天为大家带来9个非常实用的命令行操作.一些命令行需 ...