I've upgraded to 3.6.7 and I've turned on the use of aggregation tables using the following parameters:
mondrian.rolap.aggregates.Use=true
mondrian.rolap.aggregates.Read=true
But I'm still having problems with mondrian using my aggregation tables because of the way it matches up table names and names used in the olap schema. My app must work on Mysql and Oracle DB which presents many challenges on its own. So to write a portable schema for mondrian I used all caps for table and column names because that was explained in the mondrian FAQ. Oracle converts all non-quoted table/column names to upper case. However, just the opposite happens in mysql. MySql converts table names to lower case depending on the settings specified in the my.cnf file.
Technically it might work (using all caps) but I keep seeing this in the logs:
I found in Mondrian source code where this code is being printed out. If you see this it means Mondrian can't find the table that goes with the RolapStar so if that is printed Mondrian won't attempt to find any aggregation tables. It fails immediately. The reason it can't find the table name is the fact that in my olap schema I used all caps, but when mysql return table names its lower case. And in JdbcSchema.addTable() it puts whatever the database says the table name is into a HashMap which is case sensitive. Therefore it'll never work without everyone being case sensitive. I used my debugger to add an all caps version of the table name to the HashMap and once I do that it finds the aggregation tables. Other than that there appears to be no other option. I think this is a bug since it forces you to use case sensitive settings when Mondrian documentation seems to leave you with the impression that is not necessary.
I could fix this by subclassing JdbcSchema, but that is also impossible because of package protected constructors and private methods needed to reproduce the code that exists in addTable().
So what are my options? Are there settings in Mysql that I can use that would make mondrian portable between each database? I know I can use quotations to try and enforce case sensitive names, but mysql and oracle differ on the quotations. And that is a major rework in my program to go back through and redo every query I used to include quotations.
mondrian.rolap.aggregates.Use=true
mondrian.rolap.aggregates.Read=true
But I'm still having problems with mondrian using my aggregation tables because of the way it matches up table names and names used in the olap schema. My app must work on Mysql and Oracle DB which presents many challenges on its own. So to write a portable schema for mondrian I used all caps for table and column names because that was explained in the mondrian FAQ. Oracle converts all non-quoted table/column names to upper case. However, just the opposite happens in mysql. MySql converts table names to lower case depending on the settings specified in the my.cnf file.
Technically it might work (using all caps) but I keep seeing this in the logs:
Code:
2014-11-02 14:56:27,070 [RMI TCP Connection(2)-127.0.0.1] WARN mondrian.rolap.aggmatcher.AggTableManager - : No Table found for fact name=JOB_OPENINGS
2014-11-02 14:56:27,070 [RMI TCP Connection(2)-127.0.0.1] WARN mondrian.rolap.aggmatcher.AggTableManager - : No Table found for fact name=PAYCHECK_LINE_ITEMS
2014-11-02 14:56:27,070 [RMI TCP Connection(2)-127.0.0.1] WARN mondrian.rolap.aggmatcher.AggTableManager - : No Table found for fact name=PAYCHECKS
2014-11-02 14:56:27,070 [RMI TCP Connection(2)-127.0.0.1] WARN mondrian.rolap.aggmatcher.AggTableManager - : No Table found for fact name=EMPLOYMENT
2014-11-02 14:56:27,070 [RMI TCP Connection(2)-127.0.0.1] WARN mondrian.rolap.aggmatcher.AggTableManager - : No Table found for fact name=APPLICANTS
2014-11-02 14:56:27,070 [RMI TCP Connection(2)-127.0.0.1] WARN mondrian.rolap.aggmatcher.AggTableManager - : No Table found for fact name=INCOME_STATEMENTS
I could fix this by subclassing JdbcSchema, but that is also impossible because of package protected constructors and private methods needed to reproduce the code that exists in addTable().
So what are my options? Are there settings in Mysql that I can use that would make mondrian portable between each database? I know I can use quotations to try and enforce case sensitive names, but mysql and oracle differ on the quotations. And that is a major rework in my program to go back through and redo every query I used to include quotations.