PA_CR_PA-3.9.X_presto-0.100
Preface
This report covers the following products.
- Pentaho Analysis - Custom Build ( https://github.com/pentaho/mondrian/tree/presto )
- Presto 0.100
- Presto JDBC driver 0.100
Feature |
Status |
Notes |
---|---|---|
Concurrency and Thread Safety |
|
|
Degenerate Schemas |
|
|
Star Schemas |
|
|
Snowflake Schemas |
|
|
Filters |
|
|
Top Count |
|
setMaxRows() is not implemented correctly in the JDBC driver. |
Aggregation Tables |
|
Implicit aggregation tables are not recognized by Mondrian. The JDBC driver does not implement java.sql.DatabaseMetaData.getTables |
Null Values & Keys |
|
|
Inline Tables |
|
|
Distinct Count |
|
Not all forms of distinct counts are supported, although the minimum support it offers is sufficient for Mondrian. |
Grouping Sets |
|
Grouping sets are not supported. |
Metadata and data types |
|
The type of certain columns is not reported properly by the JDBC driver. |
Connection pooling |
|
Using Apache DBCP causes connections to fail because of an unimplemented method. |
Failures
Connection pooling
Symptom
When a connection pool is used, connections will fail. Apache DBCP tries to set the connection's read-only property and this throws an exception from the driver.
Caused by: mondrian.olap.MondrianException: Mondrian Error:Internal error: Error while creating SQL connection: Jdbc=jdbc:presto://localhost:8080/mysql/foodmart; JdbcUser=test; JdbcPassword=test at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:977) at mondrian.olap.Util.newInternal(Util.java:2404) at mondrian.olap.Util.newError(Util.java:2420) at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:247) at mondrian.rolap.RolapSchema.<init>(RolapSchema.java:189) at mondrian.rolap.RolapSchema.<init>(RolapSchema.java:216) at mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:215) at mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:67) at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:161) at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:91) at mondrian.olap.DriverManager.getConnection(DriverManager.java:114) at mondrian.olap.DriverManager.getConnection(DriverManager.java:69) at mondrian.olap4j.MondrianOlap4jConnection.<init>(MondrianOlap4jConnection.java:164) at mondrian.olap4j.FactoryJdbc4Plus$AbstractConnection.<init>(FactoryJdbc4Plus.java:323) at mondrian.olap4j.FactoryJdbc41Impl$MondrianOlap4jConnectionJdbc41.<init>(FactoryJdbc41Impl.java:118) at mondrian.olap4j.FactoryJdbc41Impl.newConnection(FactoryJdbc41Impl.java:32) at mondrian.olap4j.MondrianOlap4jDriver.connect(MondrianOlap4jDriver.java:134) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:270) at org.pentaho.mondrian.tck.MondrianContext$1.load(MondrianContext.java:59) at org.pentaho.mondrian.tck.MondrianContext$1.load(MondrianContext.java:1) at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524) at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195) ... 30 more Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:103) at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:227) ... 51 more Caused by: java.util.NoSuchElementException: Could not create a validated object, cause: Disabling read-only mode not supported at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:806) at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95) ... 52 more
Top Count
Symptom
TopCount operations are not working. The JDBC driver doesn't enforce the value passed to java.sql.Statement.setMaxRows().
Failed tests
Test |
Result |
---|---|
org.pentaho.mondrian.tck.TopCountTest.testSetMaxRows |
The driver doesn't use the value passed to setMaxRows(). java.lang.AssertionError: ResultSet returned more rows than expected at org.junit.Assert.fail(Assert.java:88) at org.pentaho.mondrian.tck.SqlExpectation.validateRows(SqlExpectation.java:107) at org.pentaho.mondrian.tck.SqlExpectation.verify(SqlExpectation.java:64) at org.pentaho.mondrian.tck.SqlContext.verify(SqlContext.java:75) at org.pentaho.mondrian.tck.TopCountTest.testSetMaxRows(TopCountTest.java:53) |
Warnings
Distinct Count
Symptom
Not all forms of distinct count queries are supported. One form of distinct count for multiple columns is supported however, so mondrian can batch the queries as needed. The integration tests have also shown that the dialect is issuing the distinct count queries correctly.
Failed tests
Test |
Result |
---|---|
org.pentaho.mondrian.tck.AggregationTest.testCompoundColumnSQL |
Cannot batch multiple distinct count columns with the following syntax Caused by: com.facebook.presto.spi.PrestoException: Unexpected parameters (double, bigint) for function count. Expected: count() , count(T) T at com.facebook.presto.metadata.FunctionRegistry.resolveFunction(FunctionRegistry.java:465) at com.facebook.presto.metadata.MetadataManager.resolveFunction(MetadataManager.java:148) at com.facebook.presto.sql.analyzer.ExpressionAnalyzer$Visitor.visitFunctionCall(ExpressionAnalyzer.java:673) at com.facebook.presto.sql.analyzer.ExpressionAnalyzer$Visitor.visitFunctionCall(ExpressionAnalyzer.java:208) at com.facebook.presto.sql.tree.FunctionCall.accept(FunctionCall.java:70) |
Aggregation Tables
Symptom
The driver's metadata does not provide Mondrian with a list of the available tables. This prevents Mondrian from automatically discovering the available tables. It will howeverwork when the aggregation tables are defined explicitly in the Mondrian schema.
Failed tests
Test |
Result |
---|---|
org.pentaho.mondrian.tck.AggregationTablesRecognitionTest.testAggregationRecognition |
java.lang.AssertionError: Expected sql was not executed: select sum(agg_c_10_sales_fact_1997.customer_count) m0 from agg_c_10_sales_fact_1997 agg_c_10_sales_fact_1997 at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.assertTrue(Assert.java:41) at org.pentaho.mondrian.tck.MondrianExpectation.verifySqls(MondrianExpectation.java:119) at org.pentaho.mondrian.tck.MondrianExpectation.verify(MondrianExpectation.java:91) at org.pentaho.mondrian.tck.MondrianContext.verify(MondrianContext.java:167) at org.pentaho.mondrian.tck.AggregationTablesRecognitionTest$2.run(AggregationTablesRecognitionTest.java:93) at org.pentaho.mondrian.tck.PropertyContext.execute(PropertyContext.java:40) at org.pentaho.mondrian.tck.AggregationTablesRecognitionTest.testAggregationRecognition(AggregationTablesRecognitionTest.java:77) |
Metadata and data types
Symptom
The driver's metadata identifies integer columns as BigInteger objects. This can be worked around by crafting the mondrian schema correctly and forcing the types to those expected.
Failed tests
Test |
Result |
---|---|
org.pentaho.mondrian.tck.JoinTest.testTwoWayJoin89 |
java.lang.AssertionError: Wrong meta type for column warehouse_id, expected meta type 4 but actual meta type was -5 expected:<4> but was:<-5> at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:743) at org.junit.Assert.assertEquals(Assert.java:118) at org.junit.Assert.assertEquals(Assert.java:555) at org.pentaho.mondrian.tck.ResultSetValidator.validateMetaType(ResultSetValidator.java:188) at org.pentaho.mondrian.tck.ResultSetValidator.validateRows(ResultSetValidator.java:124) at org.pentaho.mondrian.tck.SqlExpectation.verify(SqlExpectation.java:74) at org.pentaho.mondrian.tck.SqlContext.verify(SqlContext.java:134) at org.pentaho.mondrian.tck.JoinTest.testTwoWayJoin89(JoinTest.java:144) |
- There are numerous other failed tests due to data types.
Grouping sets
Symptom
Queries which use grouping sets are not supported. This is a optimization feature supported by some more advanced databases. It allows to batch cell requests and improve the overall performance.
Failed tests
Test |
Result |
---|---|
org.pentaho.mondrian.tck.GroupingSetTest.testEmptyEntry |
Grouping set queries are not supported. select customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost from time_by_day, sales_fact_1997, customer where (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997 and sales_fact_1997.customer_id = customer.customer_id) group by grouping sets ((customer.gender),()) |
org.pentaho.mondrian.tck.GroupingSetTest.testPlainEntry |
Grouping set queries are not supported. select customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost from time_by_day, sales_fact_1997, customer where (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997 and sales_fact_1997.customer_id = customer.customer_id) group by grouping sets ((customer.gender)) |
org.pentaho.mondrian.tck.GroupingSetTest.testComplexEntry |
Grouping set queries are not supported. select time_by_day.the_year as the_year, customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost from time_by_day, sales_fact_1997, customer where (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997 and sales_fact_1997.customer_id = customer.customer_id) group by grouping sets ((time_by_day.the_year, customer.gender)) |
org.pentaho.mondrian.tck.GroupingSetTest.testMultipleEntries |
Grouping set queries are not supported. select time_by_day.the_year as the_year, customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost from time_by_day, sales_fact_1997, customer where (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997 and sales_fact_1997.customer_id = customer.customer_id) group by grouping sets ((time_by_day.the_year, customer.gender), (time_by_day.the_year),()) |